spolvero 0.3.0__tar.gz → 0.4.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (126) hide show
  1. {spolvero-0.3.0 → spolvero-0.4.0}/.gitattributes +1 -0
  2. spolvero-0.4.0/.github/CODEOWNERS +33 -0
  3. spolvero-0.4.0/.github/ISSUE_TEMPLATE/bug_report.md +60 -0
  4. spolvero-0.4.0/.github/ISSUE_TEMPLATE/config.yml +8 -0
  5. spolvero-0.4.0/.github/ISSUE_TEMPLATE/feature_engine_work.md +62 -0
  6. spolvero-0.4.0/.github/ISSUE_TEMPLATE/qa_hygiene_work.md +52 -0
  7. spolvero-0.4.0/.github/ISSUE_TEMPLATE/release_work.md +54 -0
  8. spolvero-0.4.0/.github/ISSUE_TEMPLATE/vsdx_template_work.md +53 -0
  9. spolvero-0.4.0/.github/dependabot.yml +25 -0
  10. spolvero-0.4.0/.github/pull_request_template.md +50 -0
  11. {spolvero-0.3.0 → spolvero-0.4.0}/.github/workflows/ci.yml +16 -0
  12. spolvero-0.4.0/.github/workflows/codeql.yml +32 -0
  13. spolvero-0.4.0/.github/workflows/dependency-review.yml +20 -0
  14. spolvero-0.4.0/HANDOFF.md +75 -0
  15. {spolvero-0.3.0 → spolvero-0.4.0}/PKG-INFO +10 -5
  16. {spolvero-0.3.0 → spolvero-0.4.0}/README.md +7 -4
  17. spolvero-0.4.0/SECURITY.md +77 -0
  18. {spolvero-0.3.0 → spolvero-0.4.0}/docs/agents/glossary.md +1 -1
  19. {spolvero-0.3.0 → spolvero-0.4.0}/docs/agents/recipes.md +7 -4
  20. {spolvero-0.3.0 → spolvero-0.4.0}/docs/current-state.md +28 -13
  21. spolvero-0.4.0/docs/declaratus-migration.md +104 -0
  22. spolvero-0.4.0/docs/plans/01-round-trip-drift-engine.md +2758 -0
  23. spolvero-0.4.0/docs/qa-corpus-and-sanitization.md +56 -0
  24. spolvero-0.4.0/docs/round-trip-workflow.md +75 -0
  25. spolvero-0.4.0/docs/security-posture-audit.md +96 -0
  26. spolvero-0.4.0/docs/specs/01-round-trip-drift-engine.md +255 -0
  27. {spolvero-0.3.0/skills/codex/spolvero/references → spolvero-0.4.0/docs}/support-matrix.md +24 -5
  28. {spolvero-0.3.0 → spolvero-0.4.0}/docs/topology-ir.md +1 -1
  29. {spolvero-0.3.0 → spolvero-0.4.0}/docs/using-the-package.md +11 -3
  30. spolvero-0.4.0/docs/vsdx-template-contract.md +108 -0
  31. {spolvero-0.3.0 → spolvero-0.4.0}/pyproject.toml +3 -3
  32. {spolvero-0.3.0 → spolvero-0.4.0}/skills/codex/spolvero/SKILL.md +3 -1
  33. {spolvero-0.3.0/docs → spolvero-0.4.0/skills/codex/spolvero/references}/support-matrix.md +20 -5
  34. {spolvero-0.3.0 → spolvero-0.4.0}/skills/codex/spolvero/scripts/spolvero_packager.py +0 -1
  35. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/__init__.py +0 -1
  36. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/builder.py +81 -12
  37. spolvero-0.4.0/src/spolvero/cli.py +355 -0
  38. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/constants.py +11 -1
  39. spolvero-0.4.0/src/spolvero/drift_detection.py +227 -0
  40. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/engines/__init__.py +3 -0
  41. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/engines/data_visualizer.py +3 -1
  42. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/engines/package_only.py +3 -1
  43. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/engines/visio_com.py +1 -2
  44. spolvero-0.4.0/src/spolvero/engines/vsdx_template.py +639 -0
  45. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/hygiene.py +94 -13
  46. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/inspection.py +193 -22
  47. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/ir.py +39 -13
  48. spolvero-0.4.0/src/spolvero/layout_extraction.py +92 -0
  49. spolvero-0.4.0/src/spolvero/layout_patch.py +114 -0
  50. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/models.py +0 -1
  51. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/render.py +157 -29
  52. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/reports.py +11 -4
  53. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/schema.py +31 -7
  54. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/schemas/__init__.py +0 -1
  55. spolvero-0.4.0/src/spolvero/schemas/layout-patch.schema.json +28 -0
  56. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/schemas/manifest.schema.json +2 -1
  57. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/source.py +19 -9
  58. spolvero-0.4.0/src/spolvero/stamping.py +281 -0
  59. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/topology/model.py +39 -13
  60. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/utils.py +3 -2
  61. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/workbook.py +15 -5
  62. {spolvero-0.3.0 → spolvero-0.4.0}/tests/__init__.py +0 -1
  63. spolvero-0.4.0/tests/_review_toolkit.py +103 -0
  64. spolvero-0.4.0/tests/fixtures/reviewed-simple.vsdx +0 -0
  65. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_cli.py +29 -0
  66. spolvero-0.4.0/tests/test_cli_detect_drift.py +120 -0
  67. spolvero-0.4.0/tests/test_cli_extract_layout.py +38 -0
  68. spolvero-0.4.0/tests/test_drift_detection.py +266 -0
  69. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_engine_registry.py +0 -2
  70. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_extraction.py +5 -2
  71. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_hygiene.py +40 -3
  72. spolvero-0.4.0/tests/test_layout_extraction.py +72 -0
  73. spolvero-0.4.0/tests/test_layout_patch.py +130 -0
  74. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_mermaid_ir.py +9 -4
  75. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_optional_tools.py +10 -3
  76. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_package_build.py +30 -7
  77. spolvero-0.4.0/tests/test_render_with_overrides.py +49 -0
  78. spolvero-0.4.0/tests/test_review_toolkit.py +78 -0
  79. spolvero-0.4.0/tests/test_stamping.py +147 -0
  80. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_topology_ir.py +27 -7
  81. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_visio_com.py +6 -2
  82. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_vsdx_inspection.py +79 -9
  83. spolvero-0.4.0/tests/test_vsdx_template.py +354 -0
  84. {spolvero-0.3.0 → spolvero-0.4.0}/tests/test_workbook.py +16 -4
  85. {spolvero-0.3.0 → spolvero-0.4.0}/tests/validation/test_skill_adapters.py +0 -1
  86. {spolvero-0.3.0 → spolvero-0.4.0}/uv.lock +20 -1
  87. spolvero-0.3.0/HANDOFF.md +0 -29
  88. spolvero-0.3.0/docs/declaratus-migration.md +0 -88
  89. spolvero-0.3.0/src/spolvero/cli.py +0 -118
  90. spolvero-0.3.0/src/spolvero/engines/vsdx_template.py +0 -251
  91. spolvero-0.3.0/tests/test_vsdx_template.py +0 -143
  92. {spolvero-0.3.0 → spolvero-0.4.0}/.github/copilot-instructions.md +0 -0
  93. {spolvero-0.3.0 → spolvero-0.4.0}/.github/instructions/spolvero.instructions.md +0 -0
  94. {spolvero-0.3.0 → spolvero-0.4.0}/.github/workflows/release.yml +0 -0
  95. {spolvero-0.3.0 → spolvero-0.4.0}/.gitignore +0 -0
  96. {spolvero-0.3.0 → spolvero-0.4.0}/AGENTS.md +0 -0
  97. {spolvero-0.3.0 → spolvero-0.4.0}/CLAUDE.md +0 -0
  98. {spolvero-0.3.0 → spolvero-0.4.0}/adapters/claude/.claude/skills/spolvero/SKILL.md +0 -0
  99. {spolvero-0.3.0 → spolvero-0.4.0}/adapters/claude/CLAUDE.md +0 -0
  100. {spolvero-0.3.0 → spolvero-0.4.0}/adapters/claude/INSTALL.md +0 -0
  101. {spolvero-0.3.0 → spolvero-0.4.0}/adapters/copilot/.github/copilot-instructions.md +0 -0
  102. {spolvero-0.3.0 → spolvero-0.4.0}/adapters/copilot/.github/instructions/spolvero.instructions.md +0 -0
  103. {spolvero-0.3.0 → spolvero-0.4.0}/adapters/copilot/INSTALL.md +0 -0
  104. {spolvero-0.3.0 → spolvero-0.4.0}/adapters/generic/AGENTS.md +0 -0
  105. {spolvero-0.3.0 → spolvero-0.4.0}/docs/agent-usage.md +0 -0
  106. {spolvero-0.3.0 → spolvero-0.4.0}/docs/agents/architecture.md +0 -0
  107. {spolvero-0.3.0 → spolvero-0.4.0}/docs/agents/extending.md +0 -0
  108. {spolvero-0.3.0 → spolvero-0.4.0}/docs/feature-expansion/template-testing-lessons.md +0 -0
  109. {spolvero-0.3.0 → spolvero-0.4.0}/docs/qa-findings-plan.md +0 -0
  110. {spolvero-0.3.0 → spolvero-0.4.0}/skills/codex/spolvero/agents/openai.yaml +0 -0
  111. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/schemas/ir.schema.json +0 -0
  112. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/schemas/topology.schema.json +0 -0
  113. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/templates/LICENSE.txt +0 -0
  114. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/templates/minimal_flowchart.vsdx +0 -0
  115. {spolvero-0.3.0 → spolvero-0.4.0}/src/spolvero/topology/__init__.py +0 -0
  116. {spolvero-0.3.0 → spolvero-0.4.0}/tests/_paths.py +0 -0
  117. {spolvero-0.3.0 → spolvero-0.4.0}/tests/fixtures/sample-network.topology.yaml +0 -0
  118. {spolvero-0.3.0 → spolvero-0.4.0}/tests/fixtures/sample-sequence.mmd +0 -0
  119. {spolvero-0.3.0 → spolvero-0.4.0}/tests/fixtures/sample-trd.topology.json +0 -0
  120. {spolvero-0.3.0 → spolvero-0.4.0}/tests/fixtures/sample.dot +0 -0
  121. {spolvero-0.3.0 → spolvero-0.4.0}/tests/fixtures/sample.md +0 -0
  122. {spolvero-0.3.0 → spolvero-0.4.0}/tests/fixtures/sample.png +0 -0
  123. {spolvero-0.3.0 → spolvero-0.4.0}/tests/fixtures/sample.puml +0 -0
  124. {spolvero-0.3.0 → spolvero-0.4.0}/tests/fixtures/sample.svg +0 -0
  125. {spolvero-0.3.0 → spolvero-0.4.0}/tests/fixtures/simple.mmd +0 -0
  126. {spolvero-0.3.0 → spolvero-0.4.0}/tests/fixtures/synthetic-rich.mmd +0 -0
@@ -1,2 +1,3 @@
1
1
  * text=auto eol=lf
2
+ *.vsdx binary
2
3
 
@@ -0,0 +1,33 @@
1
+ # Current governance owner for release and sensitive paths.
2
+ # Extend these entries with a Declaratus maintainer team once one exists.
3
+
4
+ # CI, release automation, and repository-level agent instructions.
5
+ /.github/CODEOWNERS @Barry-Johnston
6
+ /.github/workflows/ @Barry-Johnston
7
+ /.github/copilot-instructions.md @Barry-Johnston
8
+ /.github/instructions/ @Barry-Johnston
9
+
10
+ # Package metadata, dependency lock state, and release-facing docs.
11
+ /pyproject.toml @Barry-Johnston
12
+ /uv.lock @Barry-Johnston
13
+ /README.md @Barry-Johnston
14
+
15
+ # Governance and operating posture.
16
+ /HANDOFF.md @Barry-Johnston
17
+ /AGENTS.md @Barry-Johnston
18
+ /CLAUDE.md @Barry-Johnston
19
+ /docs/current-state.md @Barry-Johnston
20
+ /docs/declaratus-migration.md @Barry-Johnston
21
+ /docs/qa-findings-plan.md @Barry-Johnston
22
+ /docs/agent-usage.md @Barry-Johnston
23
+ /docs/agents/ @Barry-Johnston
24
+
25
+ # Core package behavior, validation, schemas, and bundled Visio assets.
26
+ /src/spolvero/ @Barry-Johnston
27
+ /tests/ @Barry-Johnston
28
+ /src/spolvero/schemas/ @Barry-Johnston
29
+ /src/spolvero/templates/ @Barry-Johnston
30
+
31
+ # Distributed agent adapters and Codex skill surface.
32
+ /adapters/ @Barry-Johnston
33
+ /skills/ @Barry-Johnston
@@ -0,0 +1,60 @@
1
+ ---
2
+ name: Bug report
3
+ about: Something in Spolvero is not working as expected
4
+ labels: ["bug"]
5
+ ---
6
+
7
+ ## Describe the bug
8
+
9
+ <!-- What went wrong? Be specific about the command, input type, target engine, or generated artifact. -->
10
+
11
+ ## Steps to reproduce
12
+
13
+ 1.
14
+ 2.
15
+ 3.
16
+
17
+ ## Expected behavior
18
+
19
+ <!-- What did you expect to happen? -->
20
+
21
+ ## Actual behavior
22
+
23
+ <!-- What happened instead? Include sanitized error output, manifest warnings, or QA excerpts when useful. -->
24
+
25
+ ## Affected area
26
+
27
+ <!-- Check all that apply. -->
28
+
29
+ - [ ] CLI or package API
30
+ - [ ] Source extraction
31
+ - [ ] Mermaid parsing or rendering
32
+ - [ ] Topology / TRD parsing
33
+ - [ ] Data Visualizer workbook
34
+ - [ ] VSDX template engine
35
+ - [ ] Visio COM fallback behavior
36
+ - [ ] QA report or manifest fidelity
37
+ - [ ] GitHub Actions or release workflow
38
+ - [ ] Other:
39
+
40
+ ## Environment
41
+
42
+ - OS:
43
+ - Python version:
44
+ - Spolvero version or commit:
45
+ - Command or workflow:
46
+ - Optional extras installed:
47
+
48
+ ## Minimal sanitized input
49
+
50
+ <!-- Paste the smallest synthetic or sanitized input that reproduces the issue.
51
+ Do not include real infrastructure names, credentials, client names, hostnames, or proprietary diagrams. -->
52
+
53
+ ```mermaid
54
+ flowchart TD
55
+ A[Start] --> B[End]
56
+ ```
57
+
58
+ ## Related context
59
+
60
+ <!-- Links, related issues, or notes for maintainers. -->
@@ -0,0 +1,8 @@
1
+ blank_issues_enabled: false
2
+ contact_links:
3
+ - name: Declaratus governance source of truth
4
+ url: https://github.com/Declaratus/governance
5
+ about: Use this for org-level GitHub policy, repository properties, rulesets, and inherited controls.
6
+ - name: Security policy
7
+ url: https://github.com/Declaratus/spolvero/security/policy
8
+ about: Report vulnerabilities privately through the repository security policy.
@@ -0,0 +1,62 @@
1
+ ---
2
+ name: Feature or engine work
3
+ about: Propose package behavior, parser, renderer, engine, or CLI changes
4
+ labels: ["enhancement", "area: engines"]
5
+ ---
6
+
7
+ ## Summary
8
+
9
+ <!-- One or two sentences describing the desired change. -->
10
+
11
+ ## Motivation
12
+
13
+ <!-- What problem does this solve? What is hard or missing today? -->
14
+
15
+ ## Proposed behavior
16
+
17
+ <!-- Describe the target behavior concretely. Include input, target, manifest, QA, or artifact examples if helpful. -->
18
+
19
+ ## Affected area
20
+
21
+ <!-- Check all that apply. -->
22
+
23
+ - [ ] CLI or package API
24
+ - [ ] Source extraction
25
+ - [ ] Mermaid IR
26
+ - [ ] Topology / TRD IR
27
+ - [ ] Renderer fallback behavior
28
+ - [ ] Data Visualizer workbook
29
+ - [ ] VSDX template engine
30
+ - [ ] Visio COM engine
31
+ - [ ] Schemas
32
+ - [ ] Agent adapters or Codex skill
33
+ - [ ] Other:
34
+
35
+ ## Editability claim
36
+
37
+ <!-- If this changes output editability, state the expected declaration:
38
+ native, semi_native, vector_reference, or raster_reference. Explain why that claim is honest. -->
39
+
40
+ ## Fixture posture
41
+
42
+ <!-- New fixtures should be synthetic and organization-agnostic. If a real sample inspired the work,
43
+ describe how it was reduced or sanitized before adding anything to the repo. -->
44
+
45
+ ## Governance fit
46
+
47
+ <!-- If this changes inherited GitHub policy, repository properties, rulesets, security posture,
48
+ or publishing posture, open or link the source-of-truth work in Declaratus/governance.
49
+ Keep repo-local changes here focused on Spolvero behavior and documentation. -->
50
+
51
+ ## Validation plan
52
+
53
+ <!-- List the commands or manual checks that should prove the work is ready. -->
54
+
55
+ - [ ] `uv run python -m compileall src tests`
56
+ - [ ] `uv run pytest -rs`
57
+ - [ ] `uv run spolvero build tests/fixtures/sample.md --out .tmp/ci-smoke --target data-visualizer`
58
+ - [ ] Other:
59
+
60
+ ## Related context
61
+
62
+ <!-- Links, related issues, docs, or prior decisions. -->
@@ -0,0 +1,52 @@
1
+ ---
2
+ name: QA or hygiene work
3
+ about: Track validation, repository hygiene, sanitization, or inspection improvements
4
+ labels: ["type: qa", "type: hygiene"]
5
+ ---
6
+
7
+ ## Summary
8
+
9
+ <!-- What QA, hygiene, inspection, or sanitization concern should be addressed? -->
10
+
11
+ ## Affected area
12
+
13
+ <!-- Check all that apply. -->
14
+
15
+ - [ ] `spolvero hygiene`
16
+ - [ ] `spolvero inspect-vsdx`
17
+ - [ ] QA report content
18
+ - [ ] Manifest warnings or schema validation
19
+ - [ ] Test fixtures
20
+ - [ ] CI validation
21
+ - [ ] External corpus or local-only review material
22
+ - [ ] Other:
23
+
24
+ ## Risk being controlled
25
+
26
+ <!-- Examples: generated artifacts accidentally tracked, sensitive template metadata, stale QA warnings,
27
+ incomplete schema validation, or overclaimed editability. -->
28
+
29
+ ## Fixture and sample handling
30
+
31
+ <!-- Keep fixtures synthetic and organization-agnostic. Do not attach raw customer, infrastructure,
32
+ proprietary, secret, or environment-specific material. Keep external review samples outside git unless
33
+ they are explicitly approved. -->
34
+
35
+ ## Proposed checks
36
+
37
+ <!-- List the commands, assertions, or manual review steps that should prove the work is ready. -->
38
+
39
+ - [ ] `uv run spolvero hygiene --report .tmp/hygiene.md`
40
+ - [ ] Optional local sample scan: `uv run spolvero hygiene --include-untracked --report .tmp/local-hygiene.md`
41
+ - [ ] `uv run spolvero inspect-vsdx PATH --report .tmp/vsdx-inspection.md`
42
+ - [ ] `uv run pytest -rs`
43
+ - [ ] Other:
44
+
45
+ ## Governance fit
46
+
47
+ <!-- If this changes inherited GitHub policy, repository properties, rulesets, or org-level security posture,
48
+ open or link the source-of-truth work in Declaratus/governance instead of duplicating policy here. -->
49
+
50
+ ## Related context
51
+
52
+ <!-- Links, related issues, docs, or prior decisions. -->
@@ -0,0 +1,54 @@
1
+ ---
2
+ name: Release work
3
+ about: Plan or track Spolvero packaging, tag, PyPI, or release-note changes
4
+ labels: ["area: packaging", "type: release"]
5
+ ---
6
+
7
+ ## Release summary
8
+
9
+ <!-- What release, packaging, publishing, or release-note work is being proposed? -->
10
+
11
+ ## Scope
12
+
13
+ <!-- Check all that apply. -->
14
+
15
+ - [ ] Package metadata
16
+ - [ ] Dependency or lock state
17
+ - [ ] Build backend or wheel contents
18
+ - [ ] GitHub release workflow
19
+ - [ ] PyPI trusted publishing
20
+ - [ ] Release notes
21
+ - [ ] Post-release docs or handoff
22
+ - [ ] Other:
23
+
24
+ ## Version and compatibility
25
+
26
+ - Target version:
27
+ - Supported Python versions:
28
+ - Expected extras affected:
29
+
30
+ ## Validation plan
31
+
32
+ <!-- Reference the commands that prove the release path is ready. -->
33
+
34
+ - [ ] `uv run python -m compileall src tests`
35
+ - [ ] `uv run pytest -rs`
36
+ - [ ] `uv run spolvero hygiene --report .tmp/release-hygiene.md`
37
+ - [ ] `uv run spolvero inspect-vsdx src/spolvero/templates/minimal_flowchart.vsdx --report .tmp/minimal-flowchart-vsdx.md`
38
+ - [ ] `uv run spolvero build tests/fixtures/sample.md --out .tmp/ci-smoke --target data-visualizer --title "CI Smoke"`
39
+ - [ ] Build sdist/wheel and inspect contents
40
+
41
+ ## Fixture and artifact posture
42
+
43
+ <!-- Keep generated packages, built distributions, and local smoke output out of git unless explicitly approved.
44
+ Use synthetic and organization-agnostic fixtures. -->
45
+
46
+ ## Governance fit
47
+
48
+ <!-- If this changes inherited org release policy, tag controls, repository properties, or publishing controls,
49
+ open or link the source-of-truth work in Declaratus/governance. Keep repo-local changes here focused on
50
+ Spolvero package behavior and release documentation. -->
51
+
52
+ ## Related context
53
+
54
+ <!-- Links, related issues, docs, release runs, or prior decisions. -->
@@ -0,0 +1,53 @@
1
+ ---
2
+ name: VSDX or template work
3
+ about: Propose changes to Visio package handling, bundled templates, or Office artifacts
4
+ labels: ["area: visio"]
5
+ ---
6
+
7
+ ## Summary
8
+
9
+ <!-- What VSDX/template behavior should change? -->
10
+
11
+ ## Artifact scope
12
+
13
+ <!-- Check all that apply. -->
14
+
15
+ - [ ] Bundled `minimal_flowchart.vsdx`
16
+ - [ ] New or replacement tracked template
17
+ - [ ] `vsdx-template` engine behavior
18
+ - [ ] `inspect-vsdx` report behavior
19
+ - [ ] Data Visualizer workbook interoperability
20
+ - [ ] Visio Plan 2 manual validation
21
+ - [ ] Other:
22
+
23
+ ## Provenance and license
24
+
25
+ <!-- If this proposes a tracked Office artifact, describe its source and license.
26
+ Do not attach proprietary, client, environment-specific, or unsanitized binary material. -->
27
+
28
+ - Source:
29
+ - License:
30
+ - Sanitization / reduction approach:
31
+
32
+ ## Security and metadata review
33
+
34
+ <!-- Note expected review of document properties, relationships, media, comments, thumbnails,
35
+ custom properties, and sensitive-pattern findings. -->
36
+
37
+ - [ ] `uv run spolvero inspect-vsdx PATH --report .tmp/template-inspection.md`
38
+ - [ ] `uv run spolvero hygiene --report .tmp/template-hygiene.md`
39
+ - [ ] Optional local sample scan: `uv run spolvero hygiene --include-untracked --report .tmp/template-local-hygiene.md`
40
+ - [ ] Manual review of package provenance and metadata
41
+
42
+ ## Expected behavior
43
+
44
+ <!-- Describe the expected generated files, editability declaration, fallback warnings, or Visio import result. -->
45
+
46
+ ## Fixture posture
47
+
48
+ <!-- Use synthetic diagrams and organization-agnostic sample names. Keep generated packages under `.tmp/`
49
+ unless a reviewer approves a minimal fixture. -->
50
+
51
+ ## Related context
52
+
53
+ <!-- Links, related issues, docs, or prior decisions. -->
@@ -0,0 +1,25 @@
1
+ version: 2
2
+ updates:
3
+ - package-ecosystem: "uv"
4
+ directory: "/"
5
+ schedule:
6
+ interval: "weekly"
7
+ day: "monday"
8
+ time: "09:00"
9
+ timezone: "America/Phoenix"
10
+ open-pull-requests-limit: 5
11
+ labels:
12
+ - "area: packaging"
13
+ - "area: security"
14
+
15
+ - package-ecosystem: "github-actions"
16
+ directory: "/"
17
+ schedule:
18
+ interval: "weekly"
19
+ day: "monday"
20
+ time: "09:30"
21
+ timezone: "America/Phoenix"
22
+ open-pull-requests-limit: 5
23
+ labels:
24
+ - "area: packaging"
25
+ - "area: security"
@@ -0,0 +1,50 @@
1
+ ## Summary
2
+
3
+ <!-- What changed, and why? Link the issue when available. -->
4
+
5
+ ## Scope
6
+
7
+ <!-- Check all that apply. -->
8
+
9
+ - [ ] Package code
10
+ - [ ] Engine, parser, renderer, or IR behavior
11
+ - [ ] Schemas or validation
12
+ - [ ] VSDX/template assets
13
+ - [ ] Agent adapters or Codex skill
14
+ - [ ] Documentation
15
+ - [ ] GitHub workflows, release, or packaging
16
+ - [ ] QA, hygiene, or inspection
17
+ - [ ] Other:
18
+
19
+ ## Fixture and artifact posture
20
+
21
+ <!-- Confirm new samples are synthetic and organization-agnostic.
22
+ Keep generated handoff packages, workbooks, local smoke output, and external review material under ignored
23
+ local paths such as `.tmp/` unless explicitly approved as fixtures. -->
24
+
25
+ - [ ] New or changed fixtures are synthetic / sanitized.
26
+ - [ ] No generated package output or local smoke artifact is being tracked unexpectedly.
27
+ - [ ] Any tracked Office artifact has provenance, license, metadata, and inspection notes.
28
+
29
+ ## Governance notes
30
+
31
+ <!-- If this PR changes inherited GitHub policy, repository properties, rulesets, or org-level controls,
32
+ link the corresponding Declaratus/governance work. Keep repo-local policy focused on Spolvero behavior. -->
33
+
34
+ - Declaratus/governance link, if needed:
35
+
36
+ ## Validation
37
+
38
+ <!-- Check the commands you ran. Mark intentionally skipped items with a short reason. -->
39
+
40
+ - [ ] `uv run python -m compileall src tests`
41
+ - [ ] `uv run pytest -rs`
42
+ - [ ] `uv run spolvero hygiene --report .tmp/pr-hygiene.md`
43
+ - [ ] `uv run spolvero inspect-vsdx src/spolvero/templates/minimal_flowchart.vsdx --report .tmp/minimal-flowchart-vsdx.md`
44
+ - [ ] `uv run spolvero build tests/fixtures/sample.md --out .tmp/ci-smoke --target data-visualizer --title "CI Smoke"`
45
+ - [ ] `git diff --check`
46
+
47
+ ## Release impact
48
+
49
+ <!-- Note whether this affects package metadata, dependency extras, bundled assets, PyPI publishing,
50
+ or release notes. -->
@@ -4,6 +4,9 @@ on:
4
4
  push:
5
5
  pull_request:
6
6
 
7
+ permissions:
8
+ contents: read
9
+
7
10
  jobs:
8
11
  test:
9
12
  name: Python ${{ matrix.python-version }} on ${{ matrix.os }}
@@ -31,3 +34,16 @@ jobs:
31
34
  - name: Assert generated artifacts
32
35
  run: uv run python -c "import json, pathlib, zipfile; root=pathlib.Path('.tmp/ci-smoke'); manifest=json.loads((root/'manifest.json').read_text()); assert manifest['schema_version']=='1.0.0'; assert len(manifest['diagrams'])==3; assert (root/'preview/diagram-001.png').read_bytes().startswith(b'\x89PNG\r\n\x1a\n'); assert zipfile.is_zipfile(root/'visio/diagram-001-data-visualizer.xlsx')"
33
36
 
37
+ ci-summary:
38
+ name: ci-summary
39
+ runs-on: ubuntu-latest
40
+ needs: [test]
41
+ if: always()
42
+ steps:
43
+ - name: Check test matrix result
44
+ run: |
45
+ if [ "${{ needs.test.result }}" != "success" ]; then
46
+ echo "test result: ${{ needs.test.result }}"
47
+ exit 1
48
+ fi
49
+ echo "test result: ${{ needs.test.result }}"
@@ -0,0 +1,32 @@
1
+ name: CodeQL
2
+
3
+ on:
4
+ push:
5
+ branches: ["main"]
6
+ pull_request:
7
+ branches: ["main"]
8
+ schedule:
9
+ - cron: "36 11 * * 1"
10
+ workflow_dispatch:
11
+
12
+ permissions:
13
+ actions: read
14
+ contents: read
15
+ security-events: write
16
+
17
+ jobs:
18
+ analyze:
19
+ name: CodeQL Python
20
+ runs-on: ubuntu-latest
21
+ timeout-minutes: 15
22
+ steps:
23
+ - uses: actions/checkout@v6
24
+
25
+ - uses: github/codeql-action/init@v4
26
+ with:
27
+ languages: python
28
+ queries: security-and-quality
29
+
30
+ - uses: github/codeql-action/analyze@v4
31
+ with:
32
+ category: "/language:python"
@@ -0,0 +1,20 @@
1
+ name: Dependency Review
2
+
3
+ on:
4
+ pull_request:
5
+
6
+ permissions:
7
+ contents: read
8
+
9
+ jobs:
10
+ dependency-review:
11
+ name: Dependency Review
12
+ runs-on: ubuntu-latest
13
+ timeout-minutes: 10
14
+ steps:
15
+ - uses: actions/checkout@v6
16
+
17
+ - uses: actions/dependency-review-action@v4
18
+ with:
19
+ fail-on-severity: high
20
+ fail-on-scopes: runtime, development, unknown
@@ -0,0 +1,75 @@
1
+ # Handoff
2
+
3
+ Latest durable queue for `spolvero`.
4
+
5
+ ## Current State
6
+
7
+ - Core goal is unchanged: package docs-as-code diagrams into Visio-friendly handoff artifacts with honest editability declarations.
8
+ - The repository now lives at `Declaratus/spolvero`; `main` should remain ready for post-release governance and operations work.
9
+ - CI exposes a single `ci-summary` aggregate check for org ruleset readiness.
10
+ - Latest default-branch checks are green, including `ci-summary`, CodeQL, and Dependency Review.
11
+ - Spolvero is promoted to `tier=internal`; repo-local branch protection is disabled, and default-branch policy is enforced through Declaratus org rulesets.
12
+ - Spolvero is recorded in `Declaratus/governance` property assignments; issue #18 is closed.
13
+ - CODEOWNERS covers release and governance-sensitive paths with the current owner handle until a Declaratus maintainer team exists.
14
+ - SECURITY.md, issue/PR templates, Dependabot updates, and the security posture audit are in place.
15
+ - Code Security is enabled for the private repo; CodeQL and dependency-review workflows cover Python scanning and dependency-change gates.
16
+ - The `pypi` environment is restricted to release tags matching `v*`. Required reviewers were evaluated but are not available for this private repository under the current GitHub plan.
17
+ - Generated package output, local smoke packages, and external review material belong under ignored `.tmp/` or another local-only path.
18
+ - The bundled `src/spolvero/templates/minimal_flowchart.vsdx` is the only approved tracked `.vsdx` template. It is derived from the BSD-licensed `vsdx` Python package fixture and documented in `src/spolvero/templates/LICENSE.txt`.
19
+
20
+ ## Operating Validation Commands
21
+
22
+ ```bash
23
+ uv run spolvero hygiene --report .tmp/operating-hygiene.md
24
+ uv run spolvero inspect-vsdx src/spolvero/templates/minimal_flowchart.vsdx --report .tmp/minimal-flowchart-vsdx.md
25
+ uv run spolvero sanitize-vsdx src/spolvero/templates/minimal_flowchart.vsdx --out .tmp/minimal-flowchart-sanitized.vsdx --report .tmp/minimal-flowchart-sanitized.md
26
+ uv run pytest -rs
27
+ uv run python -m compileall src tests
28
+ uv run spolvero build tests/fixtures/sample.md --out .tmp/ci-smoke --target data-visualizer
29
+ uv run spolvero build tests/fixtures/sample-trd.topology.json --out .tmp/topology-json-smoke --target data-visualizer --title "Topology JSON Smoke"
30
+ git diff --check
31
+ ```
32
+
33
+ ## v0.4 Engine Handoff
34
+
35
+ Governance cleanup is complete. The v0.4 template mutation pass now covers:
36
+
37
+ 1. #10 Synthetic VSDX stamp/master contract documented in `docs/vsdx-template-contract.md`.
38
+ 2. #11 Flowchart shape routing through preferred stamps with explicit degradation warnings.
39
+ 3. #12 Topology-aware `vsdx-template` generation with topology/container stamp routing and fallback warnings.
40
+ 4. #13 Docs, support matrix, current-state, agent recipes, and skill references refreshed.
41
+ 5. #15 QA corpus/sanitization policy plus opt-in `sanitize-vsdx --out` tooling for XML redaction.
42
+
43
+ Keep #14 true COM-native Visio generation separate. The remaining product follow-up is higher-fidelity synthetic templates beyond the bundled minimal fixture; the COM-native body should wait until that path is better specified and tested.
44
+
45
+ Residual governance notes:
46
+
47
+ 1. Revisit a `pypi` required-reviewer gate if Declaratus plan/team support becomes available for private repositories.
48
+ 2. Revisit `pip-audit` when Spolvero gains default runtime dependencies or release-critical optional extras.
49
+
50
+ ## Round-trip & drift engine (spec 01)
51
+
52
+ The round-trip/drift engine is merged to `main` and released in v0.4.0
53
+ (Tasks 1–14 pure-logic foundation in PR #43, Tasks 15–25 VSDX integration in PR #44).
54
+ See `docs/specs/01-round-trip-drift-engine.md` for the spec and
55
+ `docs/round-trip-workflow.md` for the end-to-end flow.
56
+
57
+ New capabilities:
58
+
59
+ 1. Source-metadata stamping (per-shape Visio Shape Data plus doc-level
60
+ `docProps/custom.xml`) on every `vsdx-template` build; see
61
+ `docs/vsdx-template-contract.md` for the stamp keys.
62
+ 2. `spolvero extract-layout` lifts reviewer node positions into a YAML layout
63
+ patch keyed by `spolvero.source_id`.
64
+ 3. `spolvero detect-drift` runs the D1–D4 detectors against the source IR (and,
65
+ with `--source`, the doc-level source hash).
66
+ 4. `spolvero build --layout-patch` regenerates while honouring reviewer layout.
67
+
68
+ Follow-ups:
69
+
70
+ 1. The Visio Diagram Handoff Assistant skill (DEC-104) is the next piece.
71
+ 2. Connector-endpoint drift detection plus edge-route geometry is the next
72
+ engine follow-up.
73
+ 3. Container/topology shape stamping and multi-diagram patch-to-diagram matching
74
+ remain unimplemented (see the MVP limitations in
75
+ `docs/round-trip-workflow.md`).
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: spolvero
3
- Version: 0.3.0
3
+ Version: 0.4.0
4
4
  Summary: Package docs-as-code diagrams into Visio-friendly handoff artifacts.
5
5
  Author: Spolvero maintainers
6
6
  License: MIT
@@ -11,6 +11,8 @@ Requires-Dist: pywin32>=306; (platform_system == 'Windows') and extra == 'com'
11
11
  Provides-Extra: topology
12
12
  Requires-Dist: pyyaml>=6.0; extra == 'topology'
13
13
  Provides-Extra: vsdx
14
+ Requires-Dist: defusedxml>=0.7; extra == 'vsdx'
15
+ Requires-Dist: pyyaml>=6.0; extra == 'vsdx'
14
16
  Requires-Dist: vsdx>=0.5; extra == 'vsdx'
15
17
  Description-Content-Type: text/markdown
16
18
 
@@ -62,14 +64,15 @@ uv run spolvero build tests/fixtures/sample.md --out .tmp/ci-smoke --target data
62
64
 
63
65
  Generated packages are intentionally ignored by git.
64
66
 
65
- Migration hygiene checks are also available:
67
+ Operating hygiene checks are also available:
66
68
 
67
69
  ```bash
68
- uv run spolvero hygiene --report .tmp/migration-hygiene.md
70
+ uv run spolvero hygiene --report .tmp/operating-hygiene.md
69
71
  uv run spolvero inspect-vsdx src/spolvero/templates/minimal_flowchart.vsdx --report .tmp/minimal-flowchart-vsdx.md
72
+ uv run spolvero sanitize-vsdx src/spolvero/templates/minimal_flowchart.vsdx --out .tmp/minimal-flowchart-sanitized.vsdx --report .tmp/minimal-flowchart-sanitized.md
70
73
  ```
71
74
 
72
- See [docs/declaratus-migration.md](docs/declaratus-migration.md) for the fresh-history Declaratus import checklist.
75
+ See [docs/declaratus-migration.md](docs/declaratus-migration.md) for post-import operating guidance.
73
76
 
74
77
  ## Optional Extras
75
78
 
@@ -90,11 +93,13 @@ A Mermaid CLI (`mmdc`) on `PATH` is auto-detected for higher-fidelity Mermaid pr
90
93
  |---|---|---|---|
91
94
  | `package-only` | `internal_preview` | `vector_reference` | Skips workbook generation. Even Mermaid flowcharts and topology IRs are downgraded to a vector reference because no Visio handoff artifact is produced. |
92
95
  | `data-visualizer` | `data_visualizer_xlsx` | `semi_native` | Default semi-native path. Generates a Visio Data Visualizer workbook for supported Mermaid flowcharts and topology IRs with recognized nodes. Empty/failed topology parses are downgraded to reference previews with no empty workbook. |
93
- | `vsdx-template` | `vsdx_template_mutation` | `semi_native` (real `.vsdx`) | Mutates a template via the [`vsdx`] extra to produce a real `.vsdx` for supported flowcharts. Use `--template PATH` to override the bundled template. Unsupported inputs and missing extras/templates cascade with clear warnings. |
96
+ | `vsdx-template` | `vsdx_template_mutation` | `semi_native` (real `.vsdx`) | Mutates a template via the [`vsdx`] extra to produce a real `.vsdx` for supported flowchart and topology IRs. Use `--template PATH` to override the bundled template. Unsupported inputs and missing extras/templates cascade with clear warnings. |
94
97
  | `visio-com` | `visio_com_automation` | delegated output editability | Probes Visio Plan 2 / Professional via COM (Windows + [`com`] extra), then currently delegates through `vsdx-template` and `data-visualizer`. A future true COM-native path will be the only source of `native` output. |
95
98
 
96
99
  The manifest always records both `requested_engine` and `actual_engine` so engine fallbacks are visible without parsing warning strings.
97
100
 
101
+ The VSDX template stamp contract is documented in [docs/vsdx-template-contract.md](docs/vsdx-template-contract.md). The bundled template is intentionally minimal; richer templates can provide preferred flowchart, topology, and container stamp names while remaining synthetic and organization-agnostic.
102
+
98
103
  ## Inputs
99
104
 
100
105
  - Mermaid flowchart (`.mmd`, fenced ` ```mermaid ` in Markdown) — primary input; full IR + workbook.
@@ -46,14 +46,15 @@ uv run spolvero build tests/fixtures/sample.md --out .tmp/ci-smoke --target data
46
46
 
47
47
  Generated packages are intentionally ignored by git.
48
48
 
49
- Migration hygiene checks are also available:
49
+ Operating hygiene checks are also available:
50
50
 
51
51
  ```bash
52
- uv run spolvero hygiene --report .tmp/migration-hygiene.md
52
+ uv run spolvero hygiene --report .tmp/operating-hygiene.md
53
53
  uv run spolvero inspect-vsdx src/spolvero/templates/minimal_flowchart.vsdx --report .tmp/minimal-flowchart-vsdx.md
54
+ uv run spolvero sanitize-vsdx src/spolvero/templates/minimal_flowchart.vsdx --out .tmp/minimal-flowchart-sanitized.vsdx --report .tmp/minimal-flowchart-sanitized.md
54
55
  ```
55
56
 
56
- See [docs/declaratus-migration.md](docs/declaratus-migration.md) for the fresh-history Declaratus import checklist.
57
+ See [docs/declaratus-migration.md](docs/declaratus-migration.md) for post-import operating guidance.
57
58
 
58
59
  ## Optional Extras
59
60
 
@@ -74,11 +75,13 @@ A Mermaid CLI (`mmdc`) on `PATH` is auto-detected for higher-fidelity Mermaid pr
74
75
  |---|---|---|---|
75
76
  | `package-only` | `internal_preview` | `vector_reference` | Skips workbook generation. Even Mermaid flowcharts and topology IRs are downgraded to a vector reference because no Visio handoff artifact is produced. |
76
77
  | `data-visualizer` | `data_visualizer_xlsx` | `semi_native` | Default semi-native path. Generates a Visio Data Visualizer workbook for supported Mermaid flowcharts and topology IRs with recognized nodes. Empty/failed topology parses are downgraded to reference previews with no empty workbook. |
77
- | `vsdx-template` | `vsdx_template_mutation` | `semi_native` (real `.vsdx`) | Mutates a template via the [`vsdx`] extra to produce a real `.vsdx` for supported flowcharts. Use `--template PATH` to override the bundled template. Unsupported inputs and missing extras/templates cascade with clear warnings. |
78
+ | `vsdx-template` | `vsdx_template_mutation` | `semi_native` (real `.vsdx`) | Mutates a template via the [`vsdx`] extra to produce a real `.vsdx` for supported flowchart and topology IRs. Use `--template PATH` to override the bundled template. Unsupported inputs and missing extras/templates cascade with clear warnings. |
78
79
  | `visio-com` | `visio_com_automation` | delegated output editability | Probes Visio Plan 2 / Professional via COM (Windows + [`com`] extra), then currently delegates through `vsdx-template` and `data-visualizer`. A future true COM-native path will be the only source of `native` output. |
79
80
 
80
81
  The manifest always records both `requested_engine` and `actual_engine` so engine fallbacks are visible without parsing warning strings.
81
82
 
83
+ The VSDX template stamp contract is documented in [docs/vsdx-template-contract.md](docs/vsdx-template-contract.md). The bundled template is intentionally minimal; richer templates can provide preferred flowchart, topology, and container stamp names while remaining synthetic and organization-agnostic.
84
+
82
85
  ## Inputs
83
86
 
84
87
  - Mermaid flowchart (`.mmd`, fenced ` ```mermaid ` in Markdown) — primary input; full IR + workbook.