Architectural canon docs, missing appsettings.json, and documentation validation scripts#160
Merged
efargas merged 7 commits intoS7-Tools_V2from Mar 24, 2026
Merged
Conversation
Co-authored-by: efargas <9705611+efargas@users.noreply.github.com> Agent-Logs-Url: https://github.com/efargas/S7-Tools/sessions/b897eb8e-f12d-4c9a-9480-1455d2d22710
Copilot
AI
changed the title
[WIP] Conduct detailed code audit and refactor legacy code
Architectural canon docs + missing appsettings.json
Mar 23, 2026
efargas
approved these changes
Mar 23, 2026
Owner
|
@CodiumAI-Agent /review |
Owner
|
@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 |
…n frontmatter Co-authored-by: efargas <9705611+efargas@users.noreply.github.com> Agent-Logs-Url: https://github.com/efargas/S7-Tools/sessions/c15b5cc0-f24b-4838-bc41-39b65c45a50d
Contributor
Author
Done in commit
Also fixed the Canon docs frontmatter that the newly-active validator flagged: added |
Copilot
AI
changed the title
Architectural canon docs + missing appsettings.json
Architectural canon docs, missing appsettings.json, and documentation validation scripts
Mar 23, 2026
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
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The project lacked prescriptive architectural documentation, had no
appsettings.jsonin 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-patternsDATA_FLOW.md— Unidirectional flow diagrams for all major paths: UI→ViewModel→Service→Domain, config loading, logging pipeline, profile CRUD, job executionSTATE_MANAGEMENT.md— State taxonomy (settings/profile/job/connection/log), ownership rules, ReactiveUI ViewModel patterns, immutability and propagation rulesCORE_API_CONTRACT.md— Formal internal API contracts forIApplicationSettingsService,IProfileManager<T>,IJobScheduler,IBootloaderService,ILogDataStore, all hardware interfacesPLC_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 invariantsJOB_EXECUTION_PIPELINE.md— Full job lifecycle: profile resolution → enqueue → resource-aware scheduling → parallel execution → persistenceCONFIGURATION_AND_LOGGING_SYSTEM.md— CompleteAppSettingsschema with types/defaults/validation, loading pipeline, atomic mutation flow, logging provider stack, per-task log isolation, and anti-patterns catalogueMissing
appsettings.json(Audit Finding)Program.csloadsappsettings.jsonasoptional: true— so its absence was silent. The app ran on C# defaults with no canonical reference config in source control.src/S7Tools/appsettings.jsonwith explicit production defaults for all 14 config sections (Logging,Ui,Serial,Network,Socat,PowerSupply,Plc,Jobs,Tasks,Paths,Profiles,MemoryRegion,Export,MemoryDump)Resources/AppSettings/UserSettings.jsonas an empty{}scaffold so the writable user-settings directory is guaranteed to exist on first runS7Tools.csprojasContentwithCopyToOutputDirectory="PreserveNewest"Documentation Validation Scripts (CI Fix)
The
docs-validation.ymlworkflow was failing because the required Python scripts were not present in the branch. Scripts were extracted from theaudit/comprehensive-review-2025branch:scripts/validate-frontmatter.py— blocking CI job that validates YAML frontmatter in all docsscripts/detect-orphans.py— non-blocking orphan file detectionscripts/detect-duplicates.py— non-blocking duplicate content detectionscripts/extractors/,scripts/reporters/,scripts/validators/The Canon docs frontmatter was also corrected to comply with the validator's schema: added the required
last-updatedfield and changedstatus: canon→status: current(the only accepted values arecurrent,deprecated,draft,redirect).Audit Summary
414 files across 4 projects reviewed. No legacy code, dead code,
Console.WriteLineleakage into services, or string interpolation in log messages found. Theappsettings.jsongap 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.