requirements-as-code 0.7.2__tar.gz → 0.7.13__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 (308) hide show
  1. requirements_as_code-0.7.13/.DS_Store +0 -0
  2. requirements_as_code-0.7.13/.github/workflows/ci.yml +20 -0
  3. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/.github/workflows/python-publish.yml +6 -0
  4. requirements_as_code-0.7.13/.github/workflows/tests.yml +78 -0
  5. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/.gitignore +3 -0
  6. requirements_as_code-0.7.13/.rac/config.yaml +1 -0
  7. requirements_as_code-0.7.13/CHANGELOG.md +173 -0
  8. requirements_as_code-0.7.13/CONTRIBUTING.md +78 -0
  9. requirements_as_code-0.7.13/PKG-INFO +138 -0
  10. requirements_as_code-0.7.13/README.md +97 -0
  11. requirements_as_code-0.7.13/docs/artifacts.md +112 -0
  12. requirements_as_code-0.7.13/docs/cli.md +559 -0
  13. requirements_as_code-0.7.13/docs/examples.md +141 -0
  14. requirements_as_code-0.7.13/docs/quickstart.md +134 -0
  15. requirements_as_code-0.7.13/docs/relationships.md +85 -0
  16. requirements_as_code-0.7.13/docs/repo-workflow.md +74 -0
  17. requirements_as_code-0.7.13/docs/testing.md +82 -0
  18. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/pyproject.toml +15 -2
  19. requirements_as_code-0.7.13/rac/assets/images/rac_explorer_mascot.png +0 -0
  20. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-001-markdown-first.md +5 -0
  21. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-002-ai-optional.md +5 -0
  22. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-003-structured-outputs-first.md +5 -0
  23. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-004-artifact-model.md +5 -0
  24. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-005-cli-first.md +5 -0
  25. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-006-ingest-over-rewrite.md +5 -0
  26. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-007-json-contract-stability.md +5 -0
  27. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-008-agent-ready-architecture.md +5 -0
  28. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-009-ai-assisted-development.md +5 -0
  29. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-010-documents-are-not-artifacts.md +5 -0
  30. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-011-file-first-pipeline.md +5 -0
  31. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-012-open-core-strategy.md +5 -0
  32. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-013-leverage-existing-source-control-systems.md +5 -0
  33. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-014-viewer-agnostic-knowledge-artifacts.md +5 -0
  34. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-015-explorer-as-consumer.md +5 -0
  35. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-016-relationships-as-structural-references.md +7 -0
  36. {requirements_as_code-0.7.2/planning/adr → requirements_as_code-0.7.13/rac/decisions}/adr-017-rac-managed-knowledge-not-work.md +5 -0
  37. requirements_as_code-0.7.13/rac/decisions/adr-018-rac-directory-as-root.md +318 -0
  38. requirements_as_code-0.7.13/rac/decisions/adr-019-asset-management.md +196 -0
  39. requirements_as_code-0.7.13/rac/decisions/adr-020-requirements-as-capabilities.md +289 -0
  40. requirements_as_code-0.7.13/rac/decisions/adr-021-templates-product-contracts.md +291 -0
  41. requirements_as_code-0.7.13/rac/decisions/adr-022-documentation-boundaries.md +342 -0
  42. requirements_as_code-0.7.13/rac/decisions/adr-023-clean-break-internal-refactors.md +202 -0
  43. requirements_as_code-0.7.13/rac/decisions/adr-024-rac-not-content-store.md +330 -0
  44. requirements_as_code-0.7.13/rac/decisions/adr-025-hybrid-artifact-metadata.md +332 -0
  45. requirements_as_code-0.7.13/rac/decisions/adr-026-opaque-artifact-identities.md +392 -0
  46. requirements_as_code-0.7.13/rac/decisions/adr-027-ci-test-topology.md +222 -0
  47. requirements_as_code-0.7.13/rac/decisions/adr-028-explorer-surface.md +140 -0
  48. requirements_as_code-0.7.13/rac/designs/explorer-action-workflows.md +101 -0
  49. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac}/designs/explorer-command-surface.md +9 -5
  50. requirements_as_code-0.7.13/rac/designs/explorer-editor-integrations.md +88 -0
  51. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac}/designs/explorer-first-run-experience.md +8 -3
  52. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac}/designs/explorer-health-model.md +9 -4
  53. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac}/designs/explorer-import-workflow.md +8 -3
  54. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac}/designs/explorer-knowledge-graph.md +8 -3
  55. requirements_as_code-0.7.13/rac/designs/explorer-mascot-animations.md +216 -0
  56. requirements_as_code-0.7.13/rac/designs/explorer-mascot-interaction.md +175 -0
  57. requirements_as_code-0.7.13/rac/designs/explorer-mascot.md +182 -0
  58. requirements_as_code-0.7.13/rac/designs/explorer-recommendations.md +107 -0
  59. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac}/designs/explorer-visual-system.md +6 -1
  60. requirements_as_code-0.7.13/rac/prompts/rac-agent-commit-guidelines.md +271 -0
  61. requirements_as_code-0.7.13/rac/prompts/rac-agent-pr-guidelines.md +228 -0
  62. requirements_as_code-0.7.13/rac/prompts/rac-agent-simplification-guidelines.md +80 -0
  63. requirements_as_code-0.7.13/rac/requirements/rac-documentation-structure.md +303 -0
  64. requirements_as_code-0.7.13/rac/requirements/rac-product-intent-ci-watchkeeper.md +529 -0
  65. requirements_as_code-0.7.13/rac/requirements/rac-product-knowledge-navigator-explorer.md +327 -0
  66. requirements_as_code-0.7.13/rac/requirements/rac-repository-review-mode.md +236 -0
  67. requirements_as_code-0.7.13/rac/requirements/rac-trust-transparency.md +175 -0
  68. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps}/archive/v0.5-decisions.md +5 -0
  69. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps}/archive/v0.7-prompts.md +5 -0
  70. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.2.x-stats}/v0.2-stats.md +5 -0
  71. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.3.x-inspect}/v0.3-ingest.md +5 -0
  72. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.3.x-inspect}/v0.3.1-formats.md +5 -0
  73. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.4.x-intelligence}/v0.4-inspect.md +5 -0
  74. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.4.x-intelligence}/v0.4.1-expansion.md +5 -0
  75. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.4.x-intelligence}/v0.4.1-inspect-expansion.md +9 -4
  76. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.4.x-intelligence}/v0.4.2-decision-metadata.md +6 -1
  77. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.5.x-awareness}/v0.5.0-artifact-improvement.md +5 -0
  78. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.5.x-awareness}/v0.5.1-guided-improvement.md +5 -0
  79. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.5.x-awareness}/v0.5.2-schema.md +5 -0
  80. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.6.x-relationships}/v0.6.0-roadmap-artifacts.md +5 -0
  81. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.6.x-relationships}/v0.6.1-roadmap-improvement.md +5 -0
  82. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.6.x-relationships}/v0.6.2-prompt-artifact.md +5 -0
  83. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.6.x-relationships}/v0.6.3-design-artifacts.md +5 -0
  84. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust}/v0.7.0-relationship-metadata.md +5 -0
  85. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust}/v0.7.1-relationship-inspection.md +10 -5
  86. requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust/v0.7.10-artifact-templates.md +608 -0
  87. requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust/v0.7.11-hybrid-metadata-system-identity.md +399 -0
  88. requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust/v0.7.12-lookup-and-resolution.md +505 -0
  89. requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust/v0.7.13-metadata-migration.md +214 -0
  90. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust}/v0.7.2-relationship-validation.md +10 -5
  91. requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust/v0.7.4-internal-refactor.md +200 -0
  92. requirements_as_code-0.7.2/planning/roadmap/v0.7.4-repo-indexing.md → requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust/v0.7.5-repo-indexing.md +17 -10
  93. requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust/v0.7.6-document-structure.md +217 -0
  94. requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust/v0.7.7-readme-simplification.md +130 -0
  95. requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust/v0.7.8-repo-trust.md +149 -0
  96. requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust/v0.7.9-repository-review.md +142 -0
  97. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps}/v0.8.0-service-api.md +6 -1
  98. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps}/v0.8.1-repository-model.md +7 -2
  99. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps}/v0.8.2-interactive-runtime-readiness.md +7 -2
  100. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps}/v0.8.3-integration-freeze.md +7 -2
  101. requirements_as_code-0.7.13/rac/roadmaps/v0.8.x-explorer/v0.8.0-explorer-foundation.md +0 -0
  102. requirements_as_code-0.7.13/rac/roadmaps/v0.8.x-explorer/v0.8.1-explorer-navigation.md +0 -0
  103. requirements_as_code-0.7.13/rac/roadmaps/v0.8.x-explorer/v0.8.2-explorer-health.md +0 -0
  104. requirements_as_code-0.7.13/rac/roadmaps/v0.8.x-explorer/v0.8.3-explorer-recommendations.md +0 -0
  105. requirements_as_code-0.7.13/rac/roadmaps/v0.8.x-explorer/v0.8.4-explorer-action-workflow.md +25 -0
  106. requirements_as_code-0.7.13/rac/roadmaps/v0.8.x-explorer/v0.8.5-explorer-relationship-navigation.md +23 -0
  107. requirements_as_code-0.7.13/rac/roadmaps/v0.8.x-explorer/v0.8.6-explorer-maturity.md +25 -0
  108. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps}/v0.9.0-explorer-foundation.md +13 -1
  109. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps}/v0.9.1-explorer-experience.md +13 -1
  110. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps}/v0.9.2-knowledge-operations.md +13 -2
  111. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps}/v0.9.3-intelligence-views.md +8 -3
  112. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13/src}/rac/__init__.py +1 -1
  113. requirements_as_code-0.7.13/src/rac/cli.py +925 -0
  114. requirements_as_code-0.7.13/src/rac/core/__init__.py +6 -0
  115. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/core}/artifacts.py +5 -5
  116. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/core}/classification.py +2 -2
  117. requirements_as_code-0.7.13/src/rac/core/frontmatter.py +225 -0
  118. requirements_as_code-0.7.13/src/rac/core/identity.py +135 -0
  119. requirements_as_code-0.7.13/src/rac/core/idgen.py +51 -0
  120. requirements_as_code-0.7.2/rac/parser.py → requirements_as_code-0.7.13/src/rac/core/markdown.py +35 -7
  121. requirements_as_code-0.7.13/src/rac/core/metadata.py +56 -0
  122. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/core}/models.py +11 -2
  123. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/core}/schema.py +1 -1
  124. requirements_as_code-0.7.13/src/rac/core/templates.py +62 -0
  125. requirements_as_code-0.7.2/rac/validate.py → requirements_as_code-0.7.13/src/rac/core/validation.py +34 -7
  126. requirements_as_code-0.7.13/src/rac/explorer/__init__.py +8 -0
  127. requirements_as_code-0.7.13/src/rac/output/__init__.py +104 -0
  128. requirements_as_code-0.7.13/src/rac/output/_shared.py +27 -0
  129. requirements_as_code-0.7.2/rac/outputs.py → requirements_as_code-0.7.13/src/rac/output/human.py +348 -237
  130. requirements_as_code-0.7.13/src/rac/output/json.py +305 -0
  131. requirements_as_code-0.7.13/src/rac/output/templates.py +48 -0
  132. requirements_as_code-0.7.13/src/rac/services/__init__.py +8 -0
  133. requirements_as_code-0.7.13/src/rac/services/create.py +169 -0
  134. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/services}/diff.py +2 -2
  135. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/services}/improve.py +5 -5
  136. requirements_as_code-0.7.13/src/rac/services/index.py +102 -0
  137. requirements_as_code-0.7.13/src/rac/services/init.py +146 -0
  138. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/services}/inspect.py +7 -6
  139. requirements_as_code-0.7.13/src/rac/services/migrate.py +171 -0
  140. requirements_as_code-0.7.13/src/rac/services/portfolio.py +260 -0
  141. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/services}/relationships.py +196 -84
  142. requirements_as_code-0.7.13/src/rac/services/resolve.py +164 -0
  143. requirements_as_code-0.7.13/src/rac/services/review.py +195 -0
  144. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/services}/stats.py +46 -8
  145. requirements_as_code-0.7.13/src/rac/services/validate.py +128 -0
  146. requirements_as_code-0.7.13/src/rac/templates/__init__.py +8 -0
  147. requirements_as_code-0.7.13/src/rac/templates/decision.md +43 -0
  148. requirements_as_code-0.7.13/src/rac/templates/design.md +64 -0
  149. requirements_as_code-0.7.13/src/rac/templates/prompt.md +49 -0
  150. requirements_as_code-0.7.13/src/rac/templates/requirement.md +36 -0
  151. requirements_as_code-0.7.13/src/rac/templates/roadmap.md +34 -0
  152. requirements_as_code-0.7.13/src/requirements_as_code.egg-info/PKG-INFO +138 -0
  153. requirements_as_code-0.7.13/src/requirements_as_code.egg-info/SOURCES.txt +300 -0
  154. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13/src}/requirements_as_code.egg-info/requires.txt +1 -0
  155. requirements_as_code-0.7.13/tests/fixtures/migrate/.rac/config.yaml +1 -0
  156. requirements_as_code-0.7.13/tests/fixtures/migrate/adr-001-legacy.md +13 -0
  157. requirements_as_code-0.7.13/tests/fixtures/migrate/canonical.md +18 -0
  158. requirements_as_code-0.7.13/tests/fixtures/migrate/notes.md +3 -0
  159. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/all_types/adr.md +13 -0
  160. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/all_types/design.md +17 -0
  161. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/all_types/prompt.md +17 -0
  162. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/all_types/req.md +17 -0
  163. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/all_types/roadmap.md +9 -0
  164. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/all_types/unknown.md +3 -0
  165. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/broken_rels/source.md +13 -0
  166. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/invalid_known/req-no-title.md +19 -0
  167. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/unknown_only/unknown.md +3 -0
  168. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/valid_clean/adr-001.md +25 -0
  169. requirements_as_code-0.7.13/tests/fixtures/portfolio_summary/valid_clean/req-001.md +26 -0
  170. requirements_as_code-0.7.13/tests/fixtures/resolve/markdown-first.md +22 -0
  171. requirements_as_code-0.7.13/tests/fixtures/resolve/v0-canonical-format.md +9 -0
  172. requirements_as_code-0.7.13/tests/golden/diff_human.txt +29 -0
  173. requirements_as_code-0.7.13/tests/golden/diff_json.txt +35 -0
  174. requirements_as_code-0.7.13/tests/golden/find_human.txt +3 -0
  175. requirements_as_code-0.7.13/tests/golden/find_json.txt +14 -0
  176. requirements_as_code-0.7.13/tests/golden/migrate_dry_run_human.txt +9 -0
  177. requirements_as_code-0.7.13/tests/golden/migrate_dry_run_json.txt +32 -0
  178. requirements_as_code-0.7.13/tests/golden/relationships_resolved_human.txt +12 -0
  179. requirements_as_code-0.7.13/tests/golden/resolve_human.txt +5 -0
  180. requirements_as_code-0.7.13/tests/golden/resolve_json.txt +7 -0
  181. requirements_as_code-0.7.13/tests/golden/resolve_not_found_json.txt +5 -0
  182. requirements_as_code-0.7.13/tests/golden/review_human.txt +51 -0
  183. requirements_as_code-0.7.13/tests/golden/review_json.txt +86 -0
  184. requirements_as_code-0.7.13/tests/golden/schema_requirement_human.txt +40 -0
  185. requirements_as_code-0.7.13/tests/golden/schema_requirement_template.txt +37 -0
  186. requirements_as_code-0.7.13/tests/golden/stats_human.txt +27 -0
  187. requirements_as_code-0.7.13/tests/golden/stats_json.txt +43 -0
  188. requirements_as_code-0.7.13/tests/golden/templates_human.txt +7 -0
  189. requirements_as_code-0.7.13/tests/golden/templates_json.txt +10 -0
  190. requirements_as_code-0.7.13/tests/golden/validate_dir_human.txt +5 -0
  191. requirements_as_code-0.7.13/tests/golden/validate_dir_json.txt +84 -0
  192. requirements_as_code-0.7.13/tests/golden/validate_invalid_human.txt +9 -0
  193. requirements_as_code-0.7.13/tests/golden/validate_invalid_json.txt +26 -0
  194. requirements_as_code-0.7.13/tests/golden/validate_valid_human.txt +3 -0
  195. requirements_as_code-0.7.13/tests/golden/validate_valid_json.txt +6 -0
  196. requirements_as_code-0.7.13/tests/test_create.py +266 -0
  197. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_decision_metadata.py +8 -8
  198. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_design.py +10 -10
  199. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_diff.py +2 -2
  200. requirements_as_code-0.7.13/tests/test_dogfood.py +43 -0
  201. requirements_as_code-0.7.13/tests/test_frontmatter.py +208 -0
  202. requirements_as_code-0.7.13/tests/test_golden.py +83 -0
  203. requirements_as_code-0.7.13/tests/test_identity.py +41 -0
  204. requirements_as_code-0.7.13/tests/test_idgen.py +62 -0
  205. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_improve.py +7 -7
  206. requirements_as_code-0.7.13/tests/test_index.py +210 -0
  207. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_ingest.py +3 -3
  208. requirements_as_code-0.7.13/tests/test_init.py +121 -0
  209. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_inspect.py +10 -10
  210. requirements_as_code-0.7.13/tests/test_metadata_identity.py +134 -0
  211. requirements_as_code-0.7.13/tests/test_migrate.py +220 -0
  212. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_parser.py +1 -1
  213. requirements_as_code-0.7.13/tests/test_portfolio.py +337 -0
  214. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_prompt.py +10 -10
  215. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_relationship_validation.py +3 -31
  216. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_relationships.py +6 -6
  217. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_relationships_cmd.py +1 -1
  218. requirements_as_code-0.7.13/tests/test_resolve.py +324 -0
  219. requirements_as_code-0.7.13/tests/test_review.py +205 -0
  220. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_roadmap.py +10 -10
  221. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_schema.py +2 -2
  222. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_stats.py +71 -1
  223. requirements_as_code-0.7.13/tests/test_templates.py +71 -0
  224. requirements_as_code-0.7.13/tests/test_validate.py +198 -0
  225. requirements_as_code-0.7.2/PKG-INFO +0 -1000
  226. requirements_as_code-0.7.2/README.md +0 -960
  227. requirements_as_code-0.7.2/rac/cli.py +0 -483
  228. requirements_as_code-0.7.2/requirements_as_code.egg-info/PKG-INFO +0 -1000
  229. requirements_as_code-0.7.2/requirements_as_code.egg-info/SOURCES.txt +0 -164
  230. requirements_as_code-0.7.2/tests/test_validate.py +0 -99
  231. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/LICENSE +0 -0
  232. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/examples/example_dashboard_v1.md +0 -0
  233. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/examples/example_dashboard_v2.md +0 -0
  234. {requirements_as_code-0.7.2/planning/prompt → requirements_as_code-0.7.13/rac/prompts}/rac-agent-compression.md +0 -0
  235. {requirements_as_code-0.7.2/planning/prompt → requirements_as_code-0.7.13/rac/prompts}/rac-agent-instructions.md +0 -0
  236. {requirements_as_code-0.7.2/planning/prompt → requirements_as_code-0.7.13/rac/prompts}/rac-agent-release-gate-major.md +0 -0
  237. {requirements_as_code-0.7.2/planning/prompt → requirements_as_code-0.7.13/rac/prompts}/rac-agent-release-gate-minor.md +0 -0
  238. {requirements_as_code-0.7.2/planning/prompt → requirements_as_code-0.7.13/rac/prompts}/rac-agent-session-start.md +0 -0
  239. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac/roadmaps}/future/v1.0-workspace-analysis.md +0 -0
  240. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac/roadmaps}/future/v1.1-review-engine.md +0 -0
  241. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac/roadmaps}/future/v1.2-mcp-server.md +0 -0
  242. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac/roadmaps}/future/v1.4-claude-skills.md +0 -0
  243. {requirements_as_code-0.7.2/planning → requirements_as_code-0.7.13/rac/roadmaps}/future/v1.4-python-sdk.md +0 -0
  244. {requirements_as_code-0.7.2/planning/roadmap → requirements_as_code-0.7.13/rac/roadmaps/v0.7.x-trust}/v0.7.3-repo-intelligence.md +0 -0
  245. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/setup.cfg +0 -0
  246. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/core}/fs.py +0 -0
  247. {requirements_as_code-0.7.2/rac → requirements_as_code-0.7.13/src/rac/services}/ingest.py +0 -0
  248. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13/src}/requirements_as_code.egg-info/dependency_links.txt +0 -0
  249. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13/src}/requirements_as_code.egg-info/entry_points.txt +0 -0
  250. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13/src}/requirements_as_code.egg-info/top_level.txt +0 -0
  251. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/conftest.py +0 -0
  252. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/decision/bad_category.md +0 -0
  253. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/decision/bad_status.md +0 -0
  254. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/decision/minimal.md +0 -0
  255. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/decision/portfolio/01_accepted_arch.md +0 -0
  256. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/decision/portfolio/02_proposed_process.md +0 -0
  257. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/decision/portfolio/03_no_metadata.md +0 -0
  258. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/decision/with_metadata.md +0 -0
  259. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/design/minimal.md +0 -0
  260. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/design/missing_constraints.md +0 -0
  261. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/design/valid.md +0 -0
  262. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/diff/new.md +0 -0
  263. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/diff/old.md +0 -0
  264. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/ingest/sample.md +0 -0
  265. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/inspect/ambiguous.md +0 -0
  266. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/inspect/decision.md +0 -0
  267. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/inspect/nested/another_requirement.md +0 -0
  268. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/inspect/requirement.md +0 -0
  269. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/invalid/duplicate_ids.md +0 -0
  270. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/invalid/empty_req_text.md +0 -0
  271. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/invalid/malformed_id.md +0 -0
  272. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/invalid/missing_id.md +0 -0
  273. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/invalid/missing_problem.md +0 -0
  274. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/invalid/missing_requirements.md +0 -0
  275. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/invalid/missing_title.md +0 -0
  276. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/invalid/multiple_titles.md +0 -0
  277. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/no_relationships/decision.md +0 -0
  278. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/no_relationships/requirement.md +0 -0
  279. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/portfolio/broken.md +0 -0
  280. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/portfolio/feature_a.md +0 -0
  281. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/portfolio/feature_b.md +0 -0
  282. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/portfolio/sub/feature_c.md +0 -0
  283. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/prompt/minimal.md +0 -0
  284. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/prompt/missing_output.md +0 -0
  285. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/prompt/valid.md +0 -0
  286. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationship_validation/ambiguous_target/adr-004-alt.md +0 -0
  287. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationship_validation/ambiguous_target/adr-004.md +0 -0
  288. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationship_validation/ambiguous_target/req-001.md +0 -0
  289. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationship_validation/broken/search.md +0 -0
  290. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationship_validation/duplicate/adr-004-alt.md +0 -0
  291. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationship_validation/duplicate/adr-004.md +0 -0
  292. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationship_validation/resolved/adr-004.md +0 -0
  293. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationship_validation/resolved/req-001.md +0 -0
  294. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationship_validation/resolved/roadmap-q3.md +0 -0
  295. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationship_validation/self_reference/adr-004.md +0 -0
  296. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationships/decision_with_links.md +0 -0
  297. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationships/design_with_links.md +0 -0
  298. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationships/prompt_with_links.md +0 -0
  299. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationships/requirement_with_links.md +0 -0
  300. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/relationships/roadmap_with_links.md +0 -0
  301. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/roadmap/minimal.md +0 -0
  302. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/roadmap/missing_initiatives.md +0 -0
  303. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/roadmap/valid.md +0 -0
  304. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/valid/bullet_requirements.md +0 -0
  305. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/valid/feature.md +0 -0
  306. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/valid/minimal.md +0 -0
  307. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/fixtures/valid/warnings.md +0 -0
  308. {requirements_as_code-0.7.2 → requirements_as_code-0.7.13}/tests/test_cli.py +0 -0
Binary file
@@ -0,0 +1,20 @@
1
+ name: CI
2
+
3
+ # Run the test suite only when changes land on main (a merged PR or a direct
4
+ # push). Tests intentionally do NOT run on pull requests — see ADR-027 for the
5
+ # trigger policy and its post-merge-feedback tradeoff. workflow_dispatch allows
6
+ # running the full battery grid manually (e.g. to check a branch before merge).
7
+ on:
8
+ push:
9
+ branches: [main]
10
+ workflow_dispatch:
11
+
12
+ # Serialize runs on the same ref. Don't cancel an in-progress run: every merge
13
+ # to main should be fully tested, since these runs are what gate releases.
14
+ concurrency:
15
+ group: ci-${{ github.ref }}
16
+ cancel-in-progress: false
17
+
18
+ jobs:
19
+ tests:
20
+ uses: ./.github/workflows/tests.yml
@@ -16,7 +16,13 @@ permissions:
16
16
  contents: read
17
17
 
18
18
  jobs:
19
+ test:
20
+ # Gate the release on the full test suite (reusable workflow). Tests must
21
+ # pass before anything is built or published.
22
+ uses: ./.github/workflows/tests.yml
23
+
19
24
  release-build:
25
+ needs: test
20
26
  runs-on: ubuntu-latest
21
27
 
22
28
  steps:
@@ -0,0 +1,78 @@
1
+ name: Tests
2
+
3
+ # Reusable workflow — the single definition of how RAC's test suite runs.
4
+ # Called by ci.yml (push to main) and by python-publish.yml (release gate),
5
+ # so the test steps live in one place rather than being duplicated.
6
+ #
7
+ # Tests are split into one "battery" per .py service (plus grouped core / cli /
8
+ # artifacts) and run across every supported Python version, so the Actions UI
9
+ # names the service + version that failed (e.g. "relationships (py3.11)")
10
+ # instead of a single opaque "pytest (3.11)". See ADR-027.
11
+
12
+ on:
13
+ workflow_call:
14
+
15
+ permissions:
16
+ contents: read
17
+
18
+ jobs:
19
+ pytest:
20
+ name: ${{ matrix.battery.name }} (py${{ matrix.python-version }})
21
+ runs-on: ubuntu-latest
22
+ strategy:
23
+ fail-fast: false
24
+ matrix:
25
+ python-version: ["3.11", "3.12", "3.13"]
26
+ # One battery per .py service, plus grouped core / cli / artifacts.
27
+ # Every tests/test_*.py belongs to exactly one battery (no orphans).
28
+ battery:
29
+ - name: core
30
+ paths: "tests/test_validate.py tests/test_parser.py tests/test_schema.py tests/test_identity.py"
31
+ - name: cli
32
+ paths: "tests/test_cli.py"
33
+ - name: artifacts
34
+ paths: "tests/test_design.py tests/test_roadmap.py tests/test_prompt.py tests/test_decision_metadata.py"
35
+ - name: diff
36
+ paths: "tests/test_diff.py"
37
+ - name: improve
38
+ paths: "tests/test_improve.py"
39
+ - name: index
40
+ paths: "tests/test_index.py"
41
+ - name: ingest
42
+ paths: "tests/test_ingest.py"
43
+ - name: inspect
44
+ paths: "tests/test_inspect.py"
45
+ - name: portfolio
46
+ paths: "tests/test_portfolio.py"
47
+ - name: relationships
48
+ paths: "tests/test_relationships.py tests/test_relationships_cmd.py tests/test_relationship_validation.py"
49
+ - name: review
50
+ paths: "tests/test_review.py"
51
+ - name: stats
52
+ paths: "tests/test_stats.py"
53
+ # Trust gates (v0.7.9): dogfood validates RAC's own rac/ corpus,
54
+ # golden pins CLI stdout byte-for-byte against committed files.
55
+ - name: dogfood
56
+ paths: "tests/test_dogfood.py"
57
+ - name: golden
58
+ paths: "tests/test_golden.py"
59
+ steps:
60
+ - uses: actions/checkout@v4
61
+ with:
62
+ # setuptools-scm derives the version from git tags; fetch them so the
63
+ # editable install can resolve a version (mirrors python-publish.yml).
64
+ fetch-depth: 0
65
+
66
+ - uses: actions/setup-python@v5
67
+ with:
68
+ python-version: ${{ matrix.python-version }}
69
+
70
+ - name: Install package with dev/test extras
71
+ run: |
72
+ python -m pip install --upgrade pip
73
+ # The dev extra pulls pytest plus the document libraries that
74
+ # tests/test_ingest.py uses to generate fixtures.
75
+ python -m pip install -e .[dev]
76
+
77
+ - name: Run ${{ matrix.battery.name }} battery
78
+ run: python -m pytest -q ${{ matrix.battery.paths }}
@@ -1,3 +1,6 @@
1
+ # macOS
2
+ .DS_Store
3
+
1
4
  # Virtual environments
2
5
  .venv/
3
6
  venv/
@@ -0,0 +1 @@
1
+ repository_key: RAC
@@ -0,0 +1,173 @@
1
+ # Changelog
2
+
3
+ User-visible changes to RAC, by release. Follows the spirit of
4
+ [Keep a Changelog](https://keepachangelog.com/): user impact over implementation
5
+ details, release history over commit history.
6
+
7
+ ## Unreleased
8
+
9
+ ### Added
10
+
11
+ - `rac migrate metadata <directory>` — migrate existing recognized artifacts
12
+ onto canonical frontmatter identity: idempotent, byte-preserving, with
13
+ `--dry-run` preview; unrecognized documents are reported, never guessed at
14
+ (v0.7.13).
15
+
16
+ - `rac resolve <ID>` — resolve any artifact ID (canonical or legacy alias) to
17
+ its type, title, and path; duplicates are reported with every path, never
18
+ silently resolved (v0.7.12).
19
+ - `rac find <query>` — deterministic artifact search by ID, title, filename,
20
+ or path, with `--type` filtering and JSON output (v0.7.12).
21
+ - `rac relationships` human output resolves references to human-friendly
22
+ labels — `Title (type · ID)` — while JSON keeps stored references unchanged
23
+ (v0.7.12).
24
+ - `rac index` entries gain an additive `aliases` field: every identifier an
25
+ artifact answers to, canonical first (v0.7.12).
26
+
27
+ - `rac init` — establish the repository identity namespace
28
+ (`.rac/config.yaml` with a `repository_key`); idempotent, and an
29
+ established key is never silently changed (v0.7.11).
30
+ - Hybrid artifact metadata: a leading YAML frontmatter block
31
+ (`schema_version`, `id`, `type`, `relationships`) is parsed, strictly
32
+ schema-validated, and exposed as canonical machine-operational metadata;
33
+ artifacts without frontmatter remain fully supported (v0.7.11).
34
+ - System-assigned opaque artifact IDs (e.g. `RAC-01JY4M8X2QZ7`): branch-safe,
35
+ offline, stable across renames, moves, and type changes; `rac new` assigns
36
+ one automatically and `rac index` reports it (v0.7.11).
37
+ - Identity validation: conflicting frontmatter/legacy identity and duplicate
38
+ canonical IDs are deterministic errors — RAC never silently picks one
39
+ (v0.7.11).
40
+ - Relationship references resolve against legacy identity aliases (`## ID`
41
+ values, filename prefixes, stems), so adopting canonical IDs does not break
42
+ existing human-readable references; RAC's own corpus now carries canonical
43
+ frontmatter identity (v0.7.11).
44
+ - `rac new <type> <output-path>` — create a valid artifact from its canonical
45
+ bundled template; deterministic, AI-free, and never overwrites an existing
46
+ file (v0.7.10).
47
+ - `rac templates` — list the canonical artifact templates available to
48
+ `rac new`, with `--json` for tools (v0.7.10).
49
+ - `rac validate <directory>` — validate every recognized artifact in a tree in
50
+ one command; unrecognized documents are skipped, not failed.
51
+ - `rac review <directory>` — full repository review: validation, relationship
52
+ integrity, and completeness as one prioritized worklist (invalid artifacts
53
+ first, then broken relationships, then advisory findings), each finding with
54
+ a concrete suggested action. Exits `1` only on blocking issues.
55
+ - CI trust gates: RAC's own `rac/` corpus must pass `rac validate`,
56
+ `rac relationships --validate`, and `rac review` (dogfood battery), and CLI
57
+ output is pinned byte-for-byte by golden tests.
58
+ - README build badge, "How RAC earns trust" section, CHANGELOG.md, and
59
+ CONTRIBUTING.md.
60
+ - `rac portfolio --json` now lists `artifacts.unknown_paths` (additive).
61
+ - `rac index` — flat artifact inventory (id, type, title, path) for tools and
62
+ agents (v0.7.5).
63
+
64
+ ### Changed
65
+
66
+ - Documentation restructured around task-focused guides under `docs/`
67
+ (quickstart, CLI reference, artifacts, relationships, repository workflow,
68
+ testing); README simplified to an overview (v0.7.6–v0.7.7).
69
+
70
+ ### Fixed
71
+
72
+ - RAC's own planning corpus now passes its own validation: one invalid roadmap
73
+ repaired and all cross-artifact references resolve.
74
+
75
+ ## v0.7.3 — 2026-06-06
76
+
77
+ ### Added
78
+
79
+ - `rac portfolio` — one-screen repository intelligence: counts by type,
80
+ validity, completeness, relationship coverage, attention list, health score.
81
+
82
+ ## v0.7.2 — 2026-06-06
83
+
84
+ ### Added
85
+
86
+ - `rac relationships --validate` — resolve every cross-artifact reference and
87
+ report broken, ambiguous, self-referencing, or duplicate-identifier findings.
88
+
89
+ ## v0.7.1 — 2026-06-06
90
+
91
+ ### Added
92
+
93
+ - `rac relationships` — discover and report the explicit references artifacts
94
+ declare to each other.
95
+
96
+ ## v0.7.0 — 2026-06-06
97
+
98
+ ### Added
99
+
100
+ - Relationship metadata: artifacts can declare `## Related Requirements`,
101
+ `## Related Decisions`, and similar sections that RAC recognizes and counts.
102
+
103
+ ## v0.6.3 — 2026-06-05
104
+
105
+ ### Added
106
+
107
+ - Design artifact type: validate and inspect product-design documents.
108
+
109
+ ## v0.6.2 — 2026-06-05
110
+
111
+ ### Added
112
+
113
+ - Prompt artifact type: validate and inspect reusable AI prompts.
114
+
115
+ ## v0.6.1 — 2026-06-05
116
+
117
+ ### Added
118
+
119
+ - Guided improvement for roadmaps (`rac improve` understands roadmap sections).
120
+
121
+ ## v0.6.0 — 2026-06-05
122
+
123
+ ### Added
124
+
125
+ - Roadmap artifact type: validate and inspect roadmap documents.
126
+
127
+ ## v0.5.2 — 2026-06-05
128
+
129
+ ### Added
130
+
131
+ - `rac schema` — show the expected structure of any artifact type, with
132
+ `--template` to emit a starting document.
133
+
134
+ ## v0.5.0 — 2026-06-05
135
+
136
+ ### Added
137
+
138
+ - `rac improve` — actionable suggestions (and templates) for incomplete
139
+ artifacts.
140
+
141
+ ## v0.4.2 — 2026-06-05
142
+
143
+ ### Added
144
+
145
+ - Decision (ADR) artifact type with status/category metadata.
146
+ - `rac inspect` — classify a document and report its completeness.
147
+
148
+ ## v0.3.1 — 2026-06-04
149
+
150
+ ### Added
151
+
152
+ - More ingest formats (HTML, PPTX, XLSX).
153
+
154
+ ## v0.3.0 — 2026-06-03
155
+
156
+ ### Added
157
+
158
+ - `rac ingest` — convert DOCX/PDF documents into RAC-compatible Markdown.
159
+
160
+ ## v0.2.0 — 2026-06-02
161
+
162
+ ### Added
163
+
164
+ - `rac stats` — summarize a directory of artifacts: counts, quality signals,
165
+ missing recommended sections.
166
+
167
+ ## v0.1.0 – v0.1.3 — 2026-06-01
168
+
169
+ ### Added
170
+
171
+ - Initial release: `rac validate` and `rac diff` for requirement documents,
172
+ human and `--json` output, stable exit codes (`0` ok, `1` validation failed,
173
+ `2` usage error).
@@ -0,0 +1,78 @@
1
+ # Contributing to RAC
2
+
3
+ Thanks for your interest in improving RAC. The project is early and evolving
4
+ quickly — contributions, ideas, and experiments are welcome.
5
+
6
+ ## Local setup
7
+
8
+ Requires **Python 3.11+**.
9
+
10
+ ```bash
11
+ git clone https://github.com/tcballard/requirements-as-code.git
12
+ cd requirements-as-code
13
+ python3 -m venv .venv
14
+ source .venv/bin/activate
15
+ pip install -e '.[dev]'
16
+ ```
17
+
18
+ ## Verify a change
19
+
20
+ Three commands; all must pass before you open a pull request:
21
+
22
+ ```bash
23
+ pytest
24
+
25
+ rac validate rac/
26
+
27
+ rac relationships rac/ --validate
28
+ ```
29
+
30
+ - `pytest` runs the full suite, including the **dogfood gate** (RAC's own
31
+ planning corpus under `rac/` must pass RAC) and **golden output tests**
32
+ (CLI output is pinned byte-for-byte).
33
+ - If you intentionally changed what the CLI prints, refresh the goldens and
34
+ commit the diff — it will be reviewed as a product change:
35
+
36
+ ```bash
37
+ RAC_UPDATE_GOLDEN=1 python -m pytest tests/test_golden.py
38
+ ```
39
+
40
+ See [docs/testing.md](docs/testing.md) for test layout, fixtures, and useful
41
+ pytest variations.
42
+
43
+ ## Documentation expectations
44
+
45
+ - `docs/` is the public documentation: quickstart, CLI reference, artifact
46
+ types, relationships, repository workflow. If your change alters a command's
47
+ behavior, flags, output, or exit codes, update [docs/cli.md](docs/cli.md) in
48
+ the same pull request.
49
+ - User-visible changes get a line in [CHANGELOG.md](CHANGELOG.md) under
50
+ **Unreleased** — user impact over implementation details.
51
+ - JSON output is a stable, versioned contract: field changes must be additive
52
+ and `schema_version`-gated (see `rac/decisions/`).
53
+
54
+ ## RAC artifact expectations
55
+
56
+ The `rac/` directory is RAC's own product knowledge — requirements, decisions
57
+ (ADRs), roadmaps, prompts, and designs — maintained with the same care as code:
58
+
59
+ - Behavior changes that reflect a product decision should trace to an artifact
60
+ under `rac/` (a roadmap initiative or an ADR).
61
+ - Artifacts you add or edit must keep the corpus green: `rac validate rac/`,
62
+ `rac relationships rac/ --validate`, and `rac review rac/` all run in CI.
63
+
64
+ ## Commit conventions
65
+
66
+ Follow [`rac/prompts/rac-agent-commit-guidelines.md`](rac/prompts/rac-agent-commit-guidelines.md):
67
+
68
+ ```text
69
+ <type>(<area>): <imperative summary> [roadmap:vX.Y.Z]
70
+ ```
71
+
72
+ with `type` one of `feat`, `fix`, `test`, `docs`, `refactor`, `chore`. Keep
73
+ commits small and single-purpose.
74
+
75
+ ## License
76
+
77
+ By contributing you agree your contributions are licensed under the
78
+ [MIT License](LICENSE).
@@ -0,0 +1,138 @@
1
+ Metadata-Version: 2.4
2
+ Name: requirements-as-code
3
+ Version: 0.7.13
4
+ Summary: RAC — lint and diff product requirements written in Markdown.
5
+ Author: tcballard
6
+ License-Expression: MIT
7
+ Project-URL: Homepage, https://github.com/tcballard/requirements-as-code
8
+ Project-URL: Repository, https://github.com/tcballard/requirements-as-code
9
+ Project-URL: Issues, https://github.com/tcballard/requirements-as-code/issues
10
+ Keywords: requirements,product-management,markdown,linter,cli,diff
11
+ Classifier: Development Status :: 3 - Alpha
12
+ Classifier: Environment :: Console
13
+ Classifier: Intended Audience :: Developers
14
+ Classifier: Programming Language :: Python :: 3 :: Only
15
+ Classifier: Programming Language :: Python :: 3.11
16
+ Classifier: Programming Language :: Python :: 3.12
17
+ Classifier: Programming Language :: Python :: 3.13
18
+ Classifier: Topic :: Software Development :: Quality Assurance
19
+ Classifier: Topic :: Documentation
20
+ Requires-Python: >=3.11
21
+ Description-Content-Type: text/markdown
22
+ License-File: LICENSE
23
+ Requires-Dist: markdown-it-py>=3.0
24
+ Requires-Dist: pyyaml>=6.0
25
+ Provides-Extra: ingest
26
+ Requires-Dist: markitdown[docx]; extra == "ingest"
27
+ Provides-Extra: ingest-pdf
28
+ Requires-Dist: markitdown[pdf]; extra == "ingest-pdf"
29
+ Provides-Extra: ingest-office
30
+ Requires-Dist: markitdown[pptx,xls,xlsx]; extra == "ingest-office"
31
+ Provides-Extra: ingest-all
32
+ Requires-Dist: markitdown[docx,pdf,pptx,xls,xlsx]; extra == "ingest-all"
33
+ Provides-Extra: dev
34
+ Requires-Dist: pytest>=7.0; extra == "dev"
35
+ Requires-Dist: markitdown[docx,pdf,pptx,xls,xlsx]; extra == "dev"
36
+ Requires-Dist: python-docx; extra == "dev"
37
+ Requires-Dist: python-pptx; extra == "dev"
38
+ Requires-Dist: openpyxl; extra == "dev"
39
+ Requires-Dist: reportlab; extra == "dev"
40
+ Dynamic: license-file
41
+
42
+ # Requirements as Code
43
+
44
+ [![CI](https://github.com/tcballard/requirements-as-code/actions/workflows/ci.yml/badge.svg)](https://github.com/tcballard/requirements-as-code/actions/workflows/ci.yml)
45
+ [![PyPI](https://img.shields.io/pypi/v/requirements-as-code)](https://pypi.org/project/requirements-as-code/)
46
+
47
+ > **Treat product knowledge like source code.**
48
+
49
+ RAC is a command-line tool for managing requirements, decisions, roadmaps, prompts,
50
+ and design artifacts as plain Markdown, right inside your Git repository.
51
+
52
+ ```bash
53
+ pip install requirements-as-code
54
+ ```
55
+
56
+ ## What is RAC?
57
+
58
+ The code is structured, the tests are automated, the infrastructure is versioned —
59
+ but the *reasoning* behind what you build is scattered across documents, tickets,
60
+ chats, and AI conversations. RAC brings that knowledge back into the repository.
61
+
62
+ You write product thinking in Markdown; RAC validates it, inspects it, and connects
63
+ it — so it stays durable, reviewable, and usable as context for both humans and AI.
64
+ No proprietary formats, no hosted platform, no lock-in.
65
+
66
+ ## Who is it for?
67
+
68
+ - **Software and product teams** who want the *why* behind their software versioned
69
+ alongside the code.
70
+ - **AI-native teams** who need structured, durable context instead of more scattered
71
+ chat history.
72
+
73
+ ## Install
74
+
75
+ Requires Python 3.11+.
76
+
77
+ ```bash
78
+ pip install requirements-as-code
79
+ # or
80
+ uv tool install requirements-as-code
81
+ ```
82
+
83
+ ## Quick Start
84
+
85
+ ```bash
86
+ rac validate requirement.md # check one artifact
87
+ rac validate rac/ # check every artifact in a directory
88
+ rac inspect requirement.md # see its type and completeness
89
+ rac stats rac/ # summarize a directory of artifacts
90
+ rac review rac/ # full repository review, worst problems first
91
+ ```
92
+
93
+ New to RAC? Walk through your first artifact in five minutes:
94
+ **[docs/quickstart.md](docs/quickstart.md)**.
95
+
96
+ ## Supported Artifact Types
97
+
98
+ - **Requirements** — what needs to exist
99
+ - **Decisions** — why choices were made (ADRs)
100
+ - **Roadmaps** — where the product is heading
101
+ - **Prompts** — reusable AI collaboration patterns
102
+ - **Designs** — product experience thinking
103
+
104
+ Everything stays plain Markdown — see **[docs/artifacts.md](docs/artifacts.md)**.
105
+
106
+ ## Documentation
107
+
108
+ - [Quickstart](docs/quickstart.md) — install and try RAC in five minutes
109
+ - [CLI reference](docs/cli.md) — every command, flag, and exit code
110
+ - [Artifact types](docs/artifacts.md) — the five types and their sections
111
+ - [Relationships](docs/relationships.md) — link artifacts and validate the links
112
+ - [Repository workflow](docs/repo-workflow.md) — organize a repo with RAC
113
+ - [Testing & contributing](docs/testing.md) — local setup and verification
114
+ - [Examples](docs/examples.md) — small, realistic artifacts
115
+
116
+ ## How RAC earns trust
117
+
118
+ RAC asks you to trust it with your product knowledge, so it holds itself to the
119
+ same standard it applies to your repository:
120
+
121
+ - **It dogfoods itself.** RAC's own planning corpus under [`rac/`](rac/) is
122
+ validated by RAC in CI (`rac validate rac/`, `rac relationships rac/ --validate`,
123
+ `rac review rac/`) — if the tool's rules break the tool's own artifacts, the
124
+ build fails.
125
+ - **Output is a contract.** Golden tests pin the CLI's human and JSON output
126
+ byte-for-byte; any change to what RAC prints is reviewed as a product change.
127
+ - **JSON is versioned.** Machine-readable output carries a `schema_version` and
128
+ only changes additively.
129
+
130
+ ## Project Status
131
+
132
+ RAC is early and evolving quickly. A terminal Explorer for browsing your knowledge
133
+ base is planned. Contributions, ideas, and experiments are welcome — see
134
+ [CONTRIBUTING.md](CONTRIBUTING.md).
135
+
136
+ ## License
137
+
138
+ MIT
@@ -0,0 +1,97 @@
1
+ # Requirements as Code
2
+
3
+ [![CI](https://github.com/tcballard/requirements-as-code/actions/workflows/ci.yml/badge.svg)](https://github.com/tcballard/requirements-as-code/actions/workflows/ci.yml)
4
+ [![PyPI](https://img.shields.io/pypi/v/requirements-as-code)](https://pypi.org/project/requirements-as-code/)
5
+
6
+ > **Treat product knowledge like source code.**
7
+
8
+ RAC is a command-line tool for managing requirements, decisions, roadmaps, prompts,
9
+ and design artifacts as plain Markdown, right inside your Git repository.
10
+
11
+ ```bash
12
+ pip install requirements-as-code
13
+ ```
14
+
15
+ ## What is RAC?
16
+
17
+ The code is structured, the tests are automated, the infrastructure is versioned —
18
+ but the *reasoning* behind what you build is scattered across documents, tickets,
19
+ chats, and AI conversations. RAC brings that knowledge back into the repository.
20
+
21
+ You write product thinking in Markdown; RAC validates it, inspects it, and connects
22
+ it — so it stays durable, reviewable, and usable as context for both humans and AI.
23
+ No proprietary formats, no hosted platform, no lock-in.
24
+
25
+ ## Who is it for?
26
+
27
+ - **Software and product teams** who want the *why* behind their software versioned
28
+ alongside the code.
29
+ - **AI-native teams** who need structured, durable context instead of more scattered
30
+ chat history.
31
+
32
+ ## Install
33
+
34
+ Requires Python 3.11+.
35
+
36
+ ```bash
37
+ pip install requirements-as-code
38
+ # or
39
+ uv tool install requirements-as-code
40
+ ```
41
+
42
+ ## Quick Start
43
+
44
+ ```bash
45
+ rac validate requirement.md # check one artifact
46
+ rac validate rac/ # check every artifact in a directory
47
+ rac inspect requirement.md # see its type and completeness
48
+ rac stats rac/ # summarize a directory of artifacts
49
+ rac review rac/ # full repository review, worst problems first
50
+ ```
51
+
52
+ New to RAC? Walk through your first artifact in five minutes:
53
+ **[docs/quickstart.md](docs/quickstart.md)**.
54
+
55
+ ## Supported Artifact Types
56
+
57
+ - **Requirements** — what needs to exist
58
+ - **Decisions** — why choices were made (ADRs)
59
+ - **Roadmaps** — where the product is heading
60
+ - **Prompts** — reusable AI collaboration patterns
61
+ - **Designs** — product experience thinking
62
+
63
+ Everything stays plain Markdown — see **[docs/artifacts.md](docs/artifacts.md)**.
64
+
65
+ ## Documentation
66
+
67
+ - [Quickstart](docs/quickstart.md) — install and try RAC in five minutes
68
+ - [CLI reference](docs/cli.md) — every command, flag, and exit code
69
+ - [Artifact types](docs/artifacts.md) — the five types and their sections
70
+ - [Relationships](docs/relationships.md) — link artifacts and validate the links
71
+ - [Repository workflow](docs/repo-workflow.md) — organize a repo with RAC
72
+ - [Testing & contributing](docs/testing.md) — local setup and verification
73
+ - [Examples](docs/examples.md) — small, realistic artifacts
74
+
75
+ ## How RAC earns trust
76
+
77
+ RAC asks you to trust it with your product knowledge, so it holds itself to the
78
+ same standard it applies to your repository:
79
+
80
+ - **It dogfoods itself.** RAC's own planning corpus under [`rac/`](rac/) is
81
+ validated by RAC in CI (`rac validate rac/`, `rac relationships rac/ --validate`,
82
+ `rac review rac/`) — if the tool's rules break the tool's own artifacts, the
83
+ build fails.
84
+ - **Output is a contract.** Golden tests pin the CLI's human and JSON output
85
+ byte-for-byte; any change to what RAC prints is reviewed as a product change.
86
+ - **JSON is versioned.** Machine-readable output carries a `schema_version` and
87
+ only changes additively.
88
+
89
+ ## Project Status
90
+
91
+ RAC is early and evolving quickly. A terminal Explorer for browsing your knowledge
92
+ base is planned. Contributions, ideas, and experiments are welcome — see
93
+ [CONTRIBUTING.md](CONTRIBUTING.md).
94
+
95
+ ## License
96
+
97
+ MIT