Skip to content

Architectural canon docs, missing appsettings.json, and documentation validation scripts#160

Merged
efargas merged 7 commits intoS7-Tools_V2from
copilot/audit-refactor-codebase
Mar 24, 2026
Merged

Architectural canon docs, missing appsettings.json, and documentation validation scripts#160
efargas merged 7 commits intoS7-Tools_V2from
copilot/audit-refactor-codebase

Conversation

Copy link
Copy Markdown
Contributor

Copilot AI commented Mar 23, 2026

The project lacked prescriptive architectural documentation, had no appsettings.json in the repository, and was missing the Python scripts required by the documentation validation CI workflow.

Canonical Architecture Documentation (docs/canon/)

Seven prescriptive documents defining how the system must be built — not how it currently works:

  • ARCHITECTURE.md — 10 immutable commandments, hexagonal layer model, mandatory patterns (Unified Profile Management, Internal Method Pattern, WritableOptions), prohibited anti-patterns
  • DATA_FLOW.md — Unidirectional flow diagrams for all major paths: UI→ViewModel→Service→Domain, config loading, logging pipeline, profile CRUD, job execution
  • STATE_MANAGEMENT.md — State taxonomy (settings/profile/job/connection/log), ownership rules, ReactiveUI ViewModel patterns, immutability and propagation rules
  • CORE_API_CONTRACT.md — Formal internal API contracts for IApplicationSettingsService, IProfileManager<T>, IJobScheduler, IBootloaderService, ILogDataStore, all hardware interfaces
  • PLC_MEMORY_DUMP_PIPELINE.md — Stage-by-stage spec for the 14-stage PLC memory extraction workflow including resource requirements, retry policy, progress contract, and teardown invariants
  • JOB_EXECUTION_PIPELINE.md — Full job lifecycle: profile resolution → enqueue → resource-aware scheduling → parallel execution → persistence
  • CONFIGURATION_AND_LOGGING_SYSTEM.md — Complete AppSettings schema with types/defaults/validation, loading pipeline, atomic mutation flow, logging provider stack, per-task log isolation, and anti-patterns catalogue

Missing appsettings.json (Audit Finding)

Program.cs loads appsettings.json as optional: true — so its absence was silent. The app ran on C# defaults with no canonical reference config in source control.

  • Added src/S7Tools/appsettings.json with explicit production defaults for all 14 config sections (Logging, Ui, Serial, Network, Socat, PowerSupply, Plc, Jobs, Tasks, Paths, Profiles, MemoryRegion, Export, MemoryDump)
  • Added Resources/AppSettings/UserSettings.json as an empty {} scaffold so the writable user-settings directory is guaranteed to exist on first run
  • Both files registered in S7Tools.csproj as Content with CopyToOutputDirectory="PreserveNewest"

Documentation Validation Scripts (CI Fix)

The docs-validation.yml workflow was failing because the required Python scripts were not present in the branch. Scripts were extracted from the audit/comprehensive-review-2025 branch:

  • scripts/validate-frontmatter.py — blocking CI job that validates YAML frontmatter in all docs
  • scripts/detect-orphans.py — non-blocking orphan file detection
  • scripts/detect-duplicates.py — non-blocking duplicate content detection
  • Supporting modules: scripts/extractors/, scripts/reporters/, scripts/validators/

The Canon docs frontmatter was also corrected to comply with the validator's schema: added the required last-updated field and changed status: canonstatus: current (the only accepted values are current, deprecated, draft, redirect).

Audit Summary

414 files across 4 projects reviewed. No legacy code, dead code, Console.WriteLine leakage into services, or string interpolation in log messages found. The appsettings.json gap was the single actionable code finding.

Original prompt

haz una auditoría completa y detallada del código fuente del proyecto y encuentra código, funciones, strings, constantes, que se hayan dejado durante la refactorización como legacy y reimplementa correctamente siguiendo los nuevos patrones y buenas prácticas centrándote en appsettings y logging. haz un informe detallado del como debería de ser.
Hola, agente! Vas a actuar como Arquitecto Líder y Escritor Técnico. Tu función principal no es escribir código, sino analizar una base de código existente y producir un conjunto de documentos arquitectónicos "Canon".

Tu Misión: Tu misión es analizar la base de código proporcionada, que no está documentada, y producir un conjunto de documentos fundamentales en la carpeta "docs" que sirvan como un plano para refactorizarla en un sistema robusto, escalable y mantenible. Es crucial que tu documentación sea prescriptiva, no descriptiva. No debe documentar el código tal como existe actualmente, sino definir el estado arquitectónico ideal al que el código debería adherirse, basándote en los principios que se detallan a continuación.

Parte 1: Filosofía Central (Tus Principios Rectores)

DEBES basar todos tus análisis y recomendaciones en las siguientes filosofías arquitectónicas:

Arquitectura Hexagonal (Puertos y Adaptadores): La lógica de negocio central de la aplicación (el "motor") debe ser completamente independiente de las preocupaciones externas como la interfaz de usuario, las bases de datos o las API específicas. Tu arquitectura propuesta debe hacer cumplir una clara separación entre el "interior" (dominio central) y el "exterior" (infraestructura e interfaz de usuario).

Principios SOLID: Tus diseños propuestos deben reflejar los principios SOLID:

Responsabilidad Única: Cada módulo o componente debe hacer una sola cosa bien. Abierto/Cerrado: Los módulos deben estar abiertos para la extensión pero cerrados para la modificación. Sustitución de Liskov: Los subtipos deben ser sustituibles por sus tipos base. Segregación de la Interfaz: Los clientes no deben verse obligados a depender de interfaces que no utilizan. Inversión de Dependencia: Los módulos de alto nivel no deben depender de los módulos de bajo nivel; ambos deben depender de abstracciones.

Parte 2: Tu Proceso (El Método de Investigación)

Seguirás este proceso de tres fases:

Fase A: Ingesta y Análisis. Primero, realiza un análisis estático profundo de toda la base de código. Infiere el propósito principal de la aplicación, sus entidades de datos clave, sus flujos de trabajo principales de usuario y su arquitectura actual (probablemente defectuosa).

Fase B: Prescripción Arquitectónica. Basado en tu análisis y en la Filosofía Central, diseña la arquitectura objetivo ideal. Refactoriza mentalmente el código existente para que se ajuste a este nuevo modelo robusto.

Fase C: Generación del Canon. Documenta tu arquitectura prescrita generando el conjunto de archivos Markdown definidos en la Parte 3.

Parte 3: Tus Entregables (El Canon Arquitectónico)

Generarás el siguiente conjunto de documentos. Cada documento debe ser completo, claro y definir las leyes inmutables para su dominio.

A. El Canon Universal (Generar para todos los proyectos):

ARCHITECTURE.md (La Constitución): Un resumen de alto nivel de la filosofía del proyecto y los mandamientos arquitectónicos centrales que has definido para él (por ejemplo, Fuente Única de Verdad, Flujo de Datos Unidireccional).

DATA_FLOW.md (El Plano): Un documento detallado que especifica el flujo de datos unidireccional obligatorio para la aplicación, desde la entrada del usuario hasta la actualización del estado y la re-renderización de la interfaz de usuario. Incluye un diagrama ASCII del flujo. Prohíbe explícitamente los anti-patrones comunes que podrían causar bucles.

STATE_MANAGEMENT.md (Las Reglas del Libro Mayor): La especificación definitiva de cómo se estructura y gestiona el estado de la aplicación. Si se utiliza una biblioteca de gestión de estado como Zustand o Redux, define los patrones obligatorios (por ejemplo, "el Patrón de Segmentación"). Aplica reglas de inmutabilidad y define los diferentes tipos de acciones (por ejemplo, setters simples vs. orquestadores complejos).

CORE_API_CONTRACT.md (El Manual del Motor): Un documento que trata la lógica de negocio central (/src/core/, /src/services/) como una API formal e interna. Debe exigir la pureza de las funciones del dominio central y definir la "API" clara y pública de la capa de servicio con la que la interfaz de usuario puede interactuar (a través del gestor de estado).

B. El Canon Específico del Proyecto (Generar basado en tu análisis):

Instrucción: A partir de tu análisis en la Fase A, identifica los 1 a 3 procesos más críticos, únicos y complejos que definen el alma de la aplicación. Estos son típicamente los flujos de trabajo principales del usuario o las tuberías de backend más importantes. Para cada uno de ellos, generarás un documento de "Plano del Sistema".

[SYSTEM_BLUEPRINT_1].md,...


💬 Send tasks to Copilot coding agent from Slack and Teams to turn conversations into code. Copilot posts an update in your thread when it's finished.

Copy link
Copy Markdown
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot wasn't able to review any files in this pull request.

Copilot AI changed the title [WIP] Conduct detailed code audit and refactor legacy code Architectural canon docs + missing appsettings.json Mar 23, 2026
Copilot AI requested a review from efargas March 23, 2026 22:29
@efargas
Copy link
Copy Markdown
Owner

efargas commented Mar 23, 2026

@CodiumAI-Agent /review

@efargas efargas marked this pull request as ready for review March 23, 2026 23:30
@efargas
Copy link
Copy Markdown
Owner

efargas commented Mar 23, 2026

@copilot about workflows for documentation, they failed becouse unable to find the scripts on the source code, can you extract the scripts from other branch where are present and commit it here

Copy link
Copy Markdown
Contributor Author

Copilot AI commented Mar 23, 2026

@copilot about workflows for documentation, they failed becouse unable to find the scripts on the source code, can you extract the scripts from other branch where are present and commit it here

Done in commit dd82c02. The scripts were found in the audit/comprehensive-review-2025 branch. Extracted the full set required by the workflow:

  • scripts/validate-frontmatter.py (blocking CI job)
  • scripts/detect-orphans.py and scripts/detect-duplicates.py
  • Supporting modules: scripts/extractors/, scripts/reporters/, scripts/validators/

Also fixed the Canon docs frontmatter that the newly-active validator flagged: added last-updated and changed status: canonstatus: current to match the schema's allowed values.

Copilot AI changed the title Architectural canon docs + missing appsettings.json Architectural canon docs, missing appsettings.json, and documentation validation scripts Mar 23, 2026
Copilot AI requested a review from efargas March 23, 2026 23:40
Copilot AI and others added 4 commits March 24, 2026 00:27
Bugs fixed:
- link_validator: skip fenced code blocks and inline code when extracting links
  (fixes VB.NET [Next](0,count) being treated as a broken link)
- markdown_parser: skip fenced code blocks when extracting file references
  (fixes hypothetical paths in code examples as broken references)
- validate-documentation: compilation_success_rate = 100% when --skip-compilation
  (was showing 0% — a false failure)
- pattern_validator: correct all 5 core-pattern expected file paths
  (Services/Profiles/, Services/Socat/, Services/PowerSupply/, Interfaces/Services/)
- namespace_validator + entities: add Hex and Components to VALID_CATEGORIES,
  allow sub-namespaces like Dialogs.Models as compliant
- validate-frontmatter + validate-documentation: skip docs/website/ directory

Test fixtures created in docs/.test-fixtures/:
  valid-document.md, invalid-frontmatter.md, code-blocks.md, links.md, file-references.md

New test file: scripts/tests/test_frontmatter_validator.py (24 tests)
New tests in: test_markdown_parser, test_pattern_link_validators, test_validators, test_integration

Result: 328 errors → 1 genuine error; 88 tests → 130 tests (all passing)

Co-authored-by: efargas <9705611+efargas@users.noreply.github.com>
Agent-Logs-Url: https://github.com/efargas/S7-Tools/sessions/8dc4898e-a3cb-48b9-b18f-1f8221e22148
…lative path exclusion in frontmatter validator, fix deprecated test, update README

- markdown_parser.py: also skip inline-backtick path extraction inside fenced code blocks
  (previously only link patterns were skipped inside fences)
- validate-frontmatter.py: use relative_to(docs_root).parts for directory exclusions
  so running the validator directly on .test-fixtures/ no longer skips everything
- test_frontmatter_validator.py: fix test_deprecated_without_superseded_by_warns —
  deprecated-date was appended after the document body (outside YAML), now correctly
  placed inside the frontmatter block; add test_validate_fixtures_directly
- test_markdown_parser.py: add test_inline_backtick_path_in_fenced_block_excluded
- docs/.test-fixtures/README.md: replace misleading direct-invocation example
  with pytest commands

Co-authored-by: efargas <9705611+efargas@users.noreply.github.com>
Agent-Logs-Url: https://github.com/efargas/S7-Tools/sessions/aeb37029-8f66-4521-b16b-8f013b6abd02
…acion

fix(docs-validation): fix 6 bugs in validation scripts + add test fixtures and 42 new tests
@efargas efargas merged commit eccfd2a into S7-Tools_V2 Mar 24, 2026
12 checks passed
@efargas efargas deleted the copilot/audit-refactor-codebase branch March 24, 2026 03:21
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants