requirements-as-code 0.4.2__tar.gz → 0.5.2__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.
- {requirements_as_code-0.4.2/requirements_as_code.egg-info → requirements_as_code-0.5.2}/PKG-INFO +156 -1
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/README.md +156 -1
- requirements_as_code-0.5.2/planning/adr/adr-016-relationships-as-structural-references.md +508 -0
- {requirements_as_code-0.4.2/planning/roadmap → requirements_as_code-0.5.2/planning/roadmap/archive}/v0.7-prompts.md +2 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/roadmap/v0.5.0-artifact-improvement.md +5 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/roadmap/v0.5.1-guided-improvement.md +29 -9
- requirements_as_code-0.5.2/planning/roadmap/v0.5.2-schema.md +546 -0
- requirements_as_code-0.5.2/planning/roadmap/v0.6.0-roadmap-artifacts.md +422 -0
- requirements_as_code-0.5.2/planning/roadmap/v0.6.1-roadmap-improvement.md +380 -0
- requirements_as_code-0.5.2/planning/roadmap/v0.6.2-prompt-artifact.md +380 -0
- requirements_as_code-0.5.2/planning/roadmap/v0.7.0-relationship-metadata.md +523 -0
- requirements_as_code-0.5.2/planning/roadmap/v0.7.1-relationship-inspection.md +415 -0
- requirements_as_code-0.5.2/planning/roadmap/v0.7.2-relationship-validation.md +398 -0
- requirements_as_code-0.5.2/planning/roadmap/v0.8.0-explorer-foundation.md +360 -0
- requirements_as_code-0.5.2/planning/roadmap/v0.8.1-explorer-experience.md +293 -0
- requirements_as_code-0.5.2/planning/roadmap/v0.8.2-knowledge-operations.md +290 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/artifacts.py +61 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/classification.py +24 -2
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/cli.py +113 -9
- requirements_as_code-0.5.2/rac/improve.py +101 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/outputs.py +139 -0
- requirements_as_code-0.5.2/rac/schema.py +152 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2/requirements_as_code.egg-info}/PKG-INFO +156 -1
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/SOURCES.txt +17 -4
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/test_cli.py +1 -0
- requirements_as_code-0.5.2/tests/test_improve.py +325 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/test_inspect.py +9 -3
- requirements_as_code-0.5.2/tests/test_schema.py +199 -0
- requirements_as_code-0.4.2/planning/roadmap/v0.6-roadmaps.md +0 -33
- requirements_as_code-0.4.2/planning/roadmap/v0.8-explorer.md +0 -392
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/.github/workflows/python-publish.yml +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/.gitignore +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/LICENSE +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/examples/example_dashboard_v1.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/examples/example_dashboard_v2.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-001-markdown-first.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-002-ai-optional.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-003-structured-outputs-first.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-004-artifact-model.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-005-cli-first.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-006-ingest-over-rewrite.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-007-json-contract-stability.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-008-agent-ready-architecture.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-009-ai-assisted-development.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-010-documents-are-not-artifacts.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-011-file-first-pipeline.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-012-open-core-strategy.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-013-leverage-existing-source-control-systems.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-014-viewer-agnostic-knowledge-artifacts.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/adr/adr-015-explorer-as-consumer.md +0 -0
- /requirements_as_code-0.4.2/planning/adr/adr-016-rac-managed-knowledge-not-work.md → /requirements_as_code-0.5.2/planning/adr/adr-017-rac-managed-knowledge-not-work.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/future/v1.0-workspace-analysis.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/future/v1.1-review-engine.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/future/v1.2-mcp-server.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/future/v1.4-claude-skills.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/future/v1.4-python-sdk.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/roadmap/archive/v0.5-decisions.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/roadmap/v0.2-stats.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/roadmap/v0.3-ingest.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/roadmap/v0.3.1-formats.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/roadmap/v0.4-inspect.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/roadmap/v0.4.1-expansion.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/roadmap/v0.4.1-inspect-expansion.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/planning/roadmap/v0.4.2-decision-metadata.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/pyproject.toml +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/__init__.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/diff.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/fs.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/ingest.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/inspect.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/models.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/parser.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/stats.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/rac/validate.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/dependency_links.txt +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/entry_points.txt +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/requires.txt +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/top_level.txt +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/setup.cfg +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/conftest.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/decision/bad_category.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/decision/bad_status.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/decision/minimal.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/decision/portfolio/01_accepted_arch.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/decision/portfolio/02_proposed_process.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/decision/portfolio/03_no_metadata.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/decision/with_metadata.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/diff/new.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/diff/old.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/ingest/sample.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/inspect/ambiguous.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/inspect/decision.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/inspect/nested/another_requirement.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/inspect/requirement.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/invalid/duplicate_ids.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/invalid/empty_req_text.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/invalid/malformed_id.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_id.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_problem.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_requirements.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_title.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/invalid/multiple_titles.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/broken.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/feature_a.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/feature_b.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/sub/feature_c.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/valid/bullet_requirements.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/valid/feature.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/valid/minimal.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/fixtures/valid/warnings.md +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/test_decision_metadata.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/test_diff.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/test_ingest.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/test_parser.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/test_stats.py +0 -0
- {requirements_as_code-0.4.2 → requirements_as_code-0.5.2}/tests/test_validate.py +0 -0
{requirements_as_code-0.4.2/requirements_as_code.egg-info → requirements_as_code-0.5.2}/PKG-INFO
RENAMED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
Metadata-Version: 2.4
|
|
2
2
|
Name: requirements-as-code
|
|
3
|
-
Version: 0.
|
|
3
|
+
Version: 0.5.2
|
|
4
4
|
Summary: RAC — lint and diff product requirements written in Markdown.
|
|
5
5
|
Author: tcballard
|
|
6
6
|
License-Expression: MIT
|
|
@@ -616,6 +616,161 @@ usage errors (file not found, or a non-Markdown file — convert it with
|
|
|
616
616
|
|
|
617
617
|
---
|
|
618
618
|
|
|
619
|
+
## Improve
|
|
620
|
+
|
|
621
|
+
Where `inspect` tells you *what an artifact is*, `improve` tells you *what to add
|
|
622
|
+
next* and how to think about completing it. It reports the required and
|
|
623
|
+
recommended sections an artifact is missing, plus schema-defined guidance for
|
|
624
|
+
those sections — **deterministically, from the schema, with no AI** (ADR-002).
|
|
625
|
+
`improve` is **advisory and read-only**: it never modifies your files and never
|
|
626
|
+
generates content beyond `_TODO_` placeholders and guidance comments.
|
|
627
|
+
|
|
628
|
+
```bash
|
|
629
|
+
rac improve requirement.md
|
|
630
|
+
rac improve requirement.md --template # Markdown skeletons for missing sections
|
|
631
|
+
rac improve requirement.md --json
|
|
632
|
+
cat requirement.md | rac improve - # stdin
|
|
633
|
+
rac ingest prd.docx --stdout | rac improve -
|
|
634
|
+
```
|
|
635
|
+
|
|
636
|
+
Default output:
|
|
637
|
+
|
|
638
|
+
```text
|
|
639
|
+
Artifact Type: Requirement
|
|
640
|
+
|
|
641
|
+
Missing Required:
|
|
642
|
+
(none)
|
|
643
|
+
|
|
644
|
+
Missing Recommended:
|
|
645
|
+
- Risks
|
|
646
|
+
• What could prevent successful delivery?
|
|
647
|
+
• What dependencies or unknowns exist?
|
|
648
|
+
- Assumptions
|
|
649
|
+
• What are you assuming to be true?
|
|
650
|
+
• What would change the approach if it turned out false?
|
|
651
|
+
```
|
|
652
|
+
|
|
653
|
+
`--template` turns the gaps into a ready-to-paste skeleton (required sections
|
|
654
|
+
first, then recommended), with deterministic guidance comments per section:
|
|
655
|
+
|
|
656
|
+
```markdown
|
|
657
|
+
## Risks
|
|
658
|
+
|
|
659
|
+
_TODO_
|
|
660
|
+
|
|
661
|
+
<!-- What could prevent successful delivery? -->
|
|
662
|
+
<!-- What dependencies or unknowns exist? -->
|
|
663
|
+
```
|
|
664
|
+
|
|
665
|
+
So you can go straight from `rac inspect requirement.md` to
|
|
666
|
+
`rac improve requirement.md --template` without consulting any documentation.
|
|
667
|
+
|
|
668
|
+
`--json` returns a stable contract (ADR-007):
|
|
669
|
+
|
|
670
|
+
```json
|
|
671
|
+
{
|
|
672
|
+
"type": "requirement",
|
|
673
|
+
"missing_required": [],
|
|
674
|
+
"missing_recommended": ["risks", "assumptions"],
|
|
675
|
+
"guidance": {
|
|
676
|
+
"risks": [
|
|
677
|
+
"What could prevent successful delivery?",
|
|
678
|
+
"What dependencies or unknowns exist?"
|
|
679
|
+
],
|
|
680
|
+
"assumptions": [
|
|
681
|
+
"What are you assuming to be true?",
|
|
682
|
+
"What would change the approach if it turned out false?"
|
|
683
|
+
]
|
|
684
|
+
}
|
|
685
|
+
}
|
|
686
|
+
```
|
|
687
|
+
|
|
688
|
+
`improve` generates suggestions for artifact types with complete schema guidance
|
|
689
|
+
coverage. Today that means **Requirement** and **Decision** artifacts. Unknown
|
|
690
|
+
documents return a short explanatory message instead. Future artifact types do
|
|
691
|
+
not become improvable until their schemas define guidance for every required and
|
|
692
|
+
recommended section.
|
|
693
|
+
|
|
694
|
+
Guidance is informational metadata only: it does not influence classification,
|
|
695
|
+
validation, confidence scoring, statistics, or repository analysis.
|
|
696
|
+
|
|
697
|
+
`improve` is advisory: it exits `0` for any completed analysis (with or without
|
|
698
|
+
suggestions) and `2` for usage errors. The presence of suggestions never changes
|
|
699
|
+
the exit code.
|
|
700
|
+
|
|
701
|
+
---
|
|
702
|
+
|
|
703
|
+
## Schema
|
|
704
|
+
|
|
705
|
+
Inspect RAC's registered artifact schemas without creating a file.
|
|
706
|
+
|
|
707
|
+
```bash
|
|
708
|
+
rac schema --list
|
|
709
|
+
rac schema --list --json
|
|
710
|
+
rac schema requirement
|
|
711
|
+
rac schema decision --json
|
|
712
|
+
rac schema requirement --template
|
|
713
|
+
```
|
|
714
|
+
|
|
715
|
+
`rac schema <type>` shows the full schema reference: required, recommended, and
|
|
716
|
+
optional sections; descriptions; guidance; and metadata values where applicable.
|
|
717
|
+
|
|
718
|
+
```text
|
|
719
|
+
Artifact Type: Decision
|
|
720
|
+
|
|
721
|
+
Required Sections:
|
|
722
|
+
- Context
|
|
723
|
+
- Decision
|
|
724
|
+
- Consequences
|
|
725
|
+
|
|
726
|
+
Recommended Sections:
|
|
727
|
+
- Status
|
|
728
|
+
- Category
|
|
729
|
+
- Alternatives Considered
|
|
730
|
+
|
|
731
|
+
Optional Sections:
|
|
732
|
+
- Supersedes
|
|
733
|
+
|
|
734
|
+
Metadata Fields:
|
|
735
|
+
- Status: Proposed | Accepted | Superseded | Deprecated
|
|
736
|
+
- Category: Architecture | Product | Process | Technical | Other
|
|
737
|
+
```
|
|
738
|
+
|
|
739
|
+
`--json` returns the same schema data as grouped arrays and maps:
|
|
740
|
+
|
|
741
|
+
```json
|
|
742
|
+
{
|
|
743
|
+
"type": "requirement",
|
|
744
|
+
"required": ["problem", "requirements"],
|
|
745
|
+
"recommended": ["success_metrics", "risks", "assumptions"],
|
|
746
|
+
"optional": [],
|
|
747
|
+
"descriptions": {},
|
|
748
|
+
"guidance": {},
|
|
749
|
+
"metadata": {}
|
|
750
|
+
}
|
|
751
|
+
```
|
|
752
|
+
|
|
753
|
+
`--template` emits a structurally valid Markdown starter. Templates are useful
|
|
754
|
+
starting points, not finished artifacts: users still replace TODO text with
|
|
755
|
+
meaningful product knowledge.
|
|
756
|
+
|
|
757
|
+
```bash
|
|
758
|
+
rac schema requirement --template > requirement.md
|
|
759
|
+
rac schema decision --template > decision.md
|
|
760
|
+
```
|
|
761
|
+
|
|
762
|
+
Generated templates are validation-safe:
|
|
763
|
+
|
|
764
|
+
```bash
|
|
765
|
+
rac schema requirement --template | rac validate -
|
|
766
|
+
rac schema decision --template | rac validate -
|
|
767
|
+
```
|
|
768
|
+
|
|
769
|
+
Unknown schemas fail with exit code `2` and list available schemas. Only
|
|
770
|
+
registered schemas are supported; custom schemas are out of scope.
|
|
771
|
+
|
|
772
|
+
---
|
|
773
|
+
|
|
619
774
|
## Review (Planned)
|
|
620
775
|
|
|
621
776
|
AI-assisted product review.
|
|
@@ -576,6 +576,161 @@ usage errors (file not found, or a non-Markdown file — convert it with
|
|
|
576
576
|
|
|
577
577
|
---
|
|
578
578
|
|
|
579
|
+
## Improve
|
|
580
|
+
|
|
581
|
+
Where `inspect` tells you *what an artifact is*, `improve` tells you *what to add
|
|
582
|
+
next* and how to think about completing it. It reports the required and
|
|
583
|
+
recommended sections an artifact is missing, plus schema-defined guidance for
|
|
584
|
+
those sections — **deterministically, from the schema, with no AI** (ADR-002).
|
|
585
|
+
`improve` is **advisory and read-only**: it never modifies your files and never
|
|
586
|
+
generates content beyond `_TODO_` placeholders and guidance comments.
|
|
587
|
+
|
|
588
|
+
```bash
|
|
589
|
+
rac improve requirement.md
|
|
590
|
+
rac improve requirement.md --template # Markdown skeletons for missing sections
|
|
591
|
+
rac improve requirement.md --json
|
|
592
|
+
cat requirement.md | rac improve - # stdin
|
|
593
|
+
rac ingest prd.docx --stdout | rac improve -
|
|
594
|
+
```
|
|
595
|
+
|
|
596
|
+
Default output:
|
|
597
|
+
|
|
598
|
+
```text
|
|
599
|
+
Artifact Type: Requirement
|
|
600
|
+
|
|
601
|
+
Missing Required:
|
|
602
|
+
(none)
|
|
603
|
+
|
|
604
|
+
Missing Recommended:
|
|
605
|
+
- Risks
|
|
606
|
+
• What could prevent successful delivery?
|
|
607
|
+
• What dependencies or unknowns exist?
|
|
608
|
+
- Assumptions
|
|
609
|
+
• What are you assuming to be true?
|
|
610
|
+
• What would change the approach if it turned out false?
|
|
611
|
+
```
|
|
612
|
+
|
|
613
|
+
`--template` turns the gaps into a ready-to-paste skeleton (required sections
|
|
614
|
+
first, then recommended), with deterministic guidance comments per section:
|
|
615
|
+
|
|
616
|
+
```markdown
|
|
617
|
+
## Risks
|
|
618
|
+
|
|
619
|
+
_TODO_
|
|
620
|
+
|
|
621
|
+
<!-- What could prevent successful delivery? -->
|
|
622
|
+
<!-- What dependencies or unknowns exist? -->
|
|
623
|
+
```
|
|
624
|
+
|
|
625
|
+
So you can go straight from `rac inspect requirement.md` to
|
|
626
|
+
`rac improve requirement.md --template` without consulting any documentation.
|
|
627
|
+
|
|
628
|
+
`--json` returns a stable contract (ADR-007):
|
|
629
|
+
|
|
630
|
+
```json
|
|
631
|
+
{
|
|
632
|
+
"type": "requirement",
|
|
633
|
+
"missing_required": [],
|
|
634
|
+
"missing_recommended": ["risks", "assumptions"],
|
|
635
|
+
"guidance": {
|
|
636
|
+
"risks": [
|
|
637
|
+
"What could prevent successful delivery?",
|
|
638
|
+
"What dependencies or unknowns exist?"
|
|
639
|
+
],
|
|
640
|
+
"assumptions": [
|
|
641
|
+
"What are you assuming to be true?",
|
|
642
|
+
"What would change the approach if it turned out false?"
|
|
643
|
+
]
|
|
644
|
+
}
|
|
645
|
+
}
|
|
646
|
+
```
|
|
647
|
+
|
|
648
|
+
`improve` generates suggestions for artifact types with complete schema guidance
|
|
649
|
+
coverage. Today that means **Requirement** and **Decision** artifacts. Unknown
|
|
650
|
+
documents return a short explanatory message instead. Future artifact types do
|
|
651
|
+
not become improvable until their schemas define guidance for every required and
|
|
652
|
+
recommended section.
|
|
653
|
+
|
|
654
|
+
Guidance is informational metadata only: it does not influence classification,
|
|
655
|
+
validation, confidence scoring, statistics, or repository analysis.
|
|
656
|
+
|
|
657
|
+
`improve` is advisory: it exits `0` for any completed analysis (with or without
|
|
658
|
+
suggestions) and `2` for usage errors. The presence of suggestions never changes
|
|
659
|
+
the exit code.
|
|
660
|
+
|
|
661
|
+
---
|
|
662
|
+
|
|
663
|
+
## Schema
|
|
664
|
+
|
|
665
|
+
Inspect RAC's registered artifact schemas without creating a file.
|
|
666
|
+
|
|
667
|
+
```bash
|
|
668
|
+
rac schema --list
|
|
669
|
+
rac schema --list --json
|
|
670
|
+
rac schema requirement
|
|
671
|
+
rac schema decision --json
|
|
672
|
+
rac schema requirement --template
|
|
673
|
+
```
|
|
674
|
+
|
|
675
|
+
`rac schema <type>` shows the full schema reference: required, recommended, and
|
|
676
|
+
optional sections; descriptions; guidance; and metadata values where applicable.
|
|
677
|
+
|
|
678
|
+
```text
|
|
679
|
+
Artifact Type: Decision
|
|
680
|
+
|
|
681
|
+
Required Sections:
|
|
682
|
+
- Context
|
|
683
|
+
- Decision
|
|
684
|
+
- Consequences
|
|
685
|
+
|
|
686
|
+
Recommended Sections:
|
|
687
|
+
- Status
|
|
688
|
+
- Category
|
|
689
|
+
- Alternatives Considered
|
|
690
|
+
|
|
691
|
+
Optional Sections:
|
|
692
|
+
- Supersedes
|
|
693
|
+
|
|
694
|
+
Metadata Fields:
|
|
695
|
+
- Status: Proposed | Accepted | Superseded | Deprecated
|
|
696
|
+
- Category: Architecture | Product | Process | Technical | Other
|
|
697
|
+
```
|
|
698
|
+
|
|
699
|
+
`--json` returns the same schema data as grouped arrays and maps:
|
|
700
|
+
|
|
701
|
+
```json
|
|
702
|
+
{
|
|
703
|
+
"type": "requirement",
|
|
704
|
+
"required": ["problem", "requirements"],
|
|
705
|
+
"recommended": ["success_metrics", "risks", "assumptions"],
|
|
706
|
+
"optional": [],
|
|
707
|
+
"descriptions": {},
|
|
708
|
+
"guidance": {},
|
|
709
|
+
"metadata": {}
|
|
710
|
+
}
|
|
711
|
+
```
|
|
712
|
+
|
|
713
|
+
`--template` emits a structurally valid Markdown starter. Templates are useful
|
|
714
|
+
starting points, not finished artifacts: users still replace TODO text with
|
|
715
|
+
meaningful product knowledge.
|
|
716
|
+
|
|
717
|
+
```bash
|
|
718
|
+
rac schema requirement --template > requirement.md
|
|
719
|
+
rac schema decision --template > decision.md
|
|
720
|
+
```
|
|
721
|
+
|
|
722
|
+
Generated templates are validation-safe:
|
|
723
|
+
|
|
724
|
+
```bash
|
|
725
|
+
rac schema requirement --template | rac validate -
|
|
726
|
+
rac schema decision --template | rac validate -
|
|
727
|
+
```
|
|
728
|
+
|
|
729
|
+
Unknown schemas fail with exit code `2` and list available schemas. Only
|
|
730
|
+
registered schemas are supported; custom schemas are out of scope.
|
|
731
|
+
|
|
732
|
+
---
|
|
733
|
+
|
|
579
734
|
## Review (Planned)
|
|
580
735
|
|
|
581
736
|
AI-assisted product review.
|
|
@@ -638,4 +793,4 @@ The project is intentionally focused on one goal:
|
|
|
638
793
|
|
|
639
794
|
# License
|
|
640
795
|
|
|
641
|
-
MIT
|
|
796
|
+
MIT
|