requirements-as-code 0.5.0__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.5.0/requirements_as_code.egg-info → requirements_as_code-0.5.2}/PKG-INFO +104 -10
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/README.md +104 -10
- requirements_as_code-0.5.2/planning/adr/adr-016-relationships-as-structural-references.md +508 -0
- {requirements_as_code-0.5.0/planning/roadmap → requirements_as_code-0.5.2/planning/roadmap/archive}/v0.7-prompts.md +2 -0
- {requirements_as_code-0.5.0 → 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.5.0 → requirements_as_code-0.5.2}/rac/artifacts.py +50 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/cli.py +73 -3
- requirements_as_code-0.5.2/rac/improve.py +101 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/outputs.py +77 -8
- requirements_as_code-0.5.2/rac/schema.py +152 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2/requirements_as_code.egg-info}/PKG-INFO +104 -10
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/SOURCES.txt +15 -4
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_cli.py +1 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_improve.py +124 -12
- {requirements_as_code-0.5.0 → 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.5.0/planning/roadmap/v0.6-roadmaps.md +0 -33
- requirements_as_code-0.5.0/planning/roadmap/v0.8-explorer.md +0 -392
- requirements_as_code-0.5.0/rac/improve.py +0 -84
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/.github/workflows/python-publish.yml +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/.gitignore +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/LICENSE +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/examples/example_dashboard_v1.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/examples/example_dashboard_v2.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-001-markdown-first.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-002-ai-optional.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-003-structured-outputs-first.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-004-artifact-model.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-005-cli-first.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-006-ingest-over-rewrite.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-007-json-contract-stability.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-008-agent-ready-architecture.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-009-ai-assisted-development.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-010-documents-are-not-artifacts.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-011-file-first-pipeline.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-012-open-core-strategy.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-013-leverage-existing-source-control-systems.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-014-viewer-agnostic-knowledge-artifacts.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/adr/adr-015-explorer-as-consumer.md +0 -0
- /requirements_as_code-0.5.0/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.5.0 → requirements_as_code-0.5.2}/planning/future/v1.0-workspace-analysis.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/future/v1.1-review-engine.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/future/v1.2-mcp-server.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/future/v1.4-claude-skills.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/future/v1.4-python-sdk.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/archive/v0.5-decisions.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.2-stats.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.3-ingest.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.3.1-formats.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.4-inspect.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.4.1-expansion.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.4.1-inspect-expansion.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.4.2-decision-metadata.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/planning/roadmap/v0.5.0-artifact-improvement.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/pyproject.toml +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/__init__.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/classification.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/diff.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/fs.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/ingest.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/inspect.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/models.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/parser.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/stats.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/rac/validate.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/dependency_links.txt +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/entry_points.txt +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/requires.txt +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/requirements_as_code.egg-info/top_level.txt +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/setup.cfg +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/conftest.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/bad_category.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/bad_status.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/minimal.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/portfolio/01_accepted_arch.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/portfolio/02_proposed_process.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/portfolio/03_no_metadata.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/decision/with_metadata.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/diff/new.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/diff/old.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/ingest/sample.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/inspect/ambiguous.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/inspect/decision.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/inspect/nested/another_requirement.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/inspect/requirement.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/duplicate_ids.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/empty_req_text.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/malformed_id.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_id.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_problem.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_requirements.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/missing_title.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/invalid/multiple_titles.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/broken.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/feature_a.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/feature_b.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/portfolio/sub/feature_c.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/valid/bullet_requirements.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/valid/feature.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/valid/minimal.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/fixtures/valid/warnings.md +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_decision_metadata.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_diff.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_ingest.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_parser.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_stats.py +0 -0
- {requirements_as_code-0.5.0 → requirements_as_code-0.5.2}/tests/test_validate.py +0 -0
{requirements_as_code-0.5.0/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.5.
|
|
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
|
|
@@ -619,10 +619,11 @@ usage errors (file not found, or a non-Markdown file — convert it with
|
|
|
619
619
|
## Improve
|
|
620
620
|
|
|
621
621
|
Where `inspect` tells you *what an artifact is*, `improve` tells you *what to add
|
|
622
|
-
next
|
|
623
|
-
|
|
624
|
-
|
|
625
|
-
|
|
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.
|
|
626
627
|
|
|
627
628
|
```bash
|
|
628
629
|
rac improve requirement.md
|
|
@@ -642,18 +643,23 @@ Missing Required:
|
|
|
642
643
|
|
|
643
644
|
Missing Recommended:
|
|
644
645
|
- Risks
|
|
646
|
+
• What could prevent successful delivery?
|
|
647
|
+
• What dependencies or unknowns exist?
|
|
645
648
|
- Assumptions
|
|
649
|
+
• What are you assuming to be true?
|
|
650
|
+
• What would change the approach if it turned out false?
|
|
646
651
|
```
|
|
647
652
|
|
|
648
653
|
`--template` turns the gaps into a ready-to-paste skeleton (required sections
|
|
649
|
-
first, then recommended), with
|
|
654
|
+
first, then recommended), with deterministic guidance comments per section:
|
|
650
655
|
|
|
651
656
|
```markdown
|
|
652
657
|
## Risks
|
|
653
658
|
|
|
654
659
|
_TODO_
|
|
655
660
|
|
|
656
|
-
<!--
|
|
661
|
+
<!-- What could prevent successful delivery? -->
|
|
662
|
+
<!-- What dependencies or unknowns exist? -->
|
|
657
663
|
```
|
|
658
664
|
|
|
659
665
|
So you can go straight from `rac inspect requirement.md` to
|
|
@@ -665,18 +671,106 @@ So you can go straight from `rac inspect requirement.md` to
|
|
|
665
671
|
{
|
|
666
672
|
"type": "requirement",
|
|
667
673
|
"missing_required": [],
|
|
668
|
-
"missing_recommended": ["risks", "assumptions"]
|
|
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
|
+
}
|
|
669
685
|
}
|
|
670
686
|
```
|
|
671
687
|
|
|
672
|
-
|
|
673
|
-
|
|
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
|
+
|
|
674
697
|
`improve` is advisory: it exits `0` for any completed analysis (with or without
|
|
675
698
|
suggestions) and `2` for usage errors. The presence of suggestions never changes
|
|
676
699
|
the exit code.
|
|
677
700
|
|
|
678
701
|
---
|
|
679
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
|
+
|
|
680
774
|
## Review (Planned)
|
|
681
775
|
|
|
682
776
|
AI-assisted product review.
|
|
@@ -579,10 +579,11 @@ usage errors (file not found, or a non-Markdown file — convert it with
|
|
|
579
579
|
## Improve
|
|
580
580
|
|
|
581
581
|
Where `inspect` tells you *what an artifact is*, `improve` tells you *what to add
|
|
582
|
-
next
|
|
583
|
-
|
|
584
|
-
|
|
585
|
-
|
|
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.
|
|
586
587
|
|
|
587
588
|
```bash
|
|
588
589
|
rac improve requirement.md
|
|
@@ -602,18 +603,23 @@ Missing Required:
|
|
|
602
603
|
|
|
603
604
|
Missing Recommended:
|
|
604
605
|
- Risks
|
|
606
|
+
• What could prevent successful delivery?
|
|
607
|
+
• What dependencies or unknowns exist?
|
|
605
608
|
- Assumptions
|
|
609
|
+
• What are you assuming to be true?
|
|
610
|
+
• What would change the approach if it turned out false?
|
|
606
611
|
```
|
|
607
612
|
|
|
608
613
|
`--template` turns the gaps into a ready-to-paste skeleton (required sections
|
|
609
|
-
first, then recommended), with
|
|
614
|
+
first, then recommended), with deterministic guidance comments per section:
|
|
610
615
|
|
|
611
616
|
```markdown
|
|
612
617
|
## Risks
|
|
613
618
|
|
|
614
619
|
_TODO_
|
|
615
620
|
|
|
616
|
-
<!--
|
|
621
|
+
<!-- What could prevent successful delivery? -->
|
|
622
|
+
<!-- What dependencies or unknowns exist? -->
|
|
617
623
|
```
|
|
618
624
|
|
|
619
625
|
So you can go straight from `rac inspect requirement.md` to
|
|
@@ -625,18 +631,106 @@ So you can go straight from `rac inspect requirement.md` to
|
|
|
625
631
|
{
|
|
626
632
|
"type": "requirement",
|
|
627
633
|
"missing_required": [],
|
|
628
|
-
"missing_recommended": ["risks", "assumptions"]
|
|
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
|
+
}
|
|
629
645
|
}
|
|
630
646
|
```
|
|
631
647
|
|
|
632
|
-
|
|
633
|
-
|
|
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
|
+
|
|
634
657
|
`improve` is advisory: it exits `0` for any completed analysis (with or without
|
|
635
658
|
suggestions) and `2` for usage errors. The presence of suggestions never changes
|
|
636
659
|
the exit code.
|
|
637
660
|
|
|
638
661
|
---
|
|
639
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
|
+
|
|
640
734
|
## Review (Planned)
|
|
641
735
|
|
|
642
736
|
AI-assisted product review.
|
|
@@ -699,4 +793,4 @@ The project is intentionally focused on one goal:
|
|
|
699
793
|
|
|
700
794
|
# License
|
|
701
795
|
|
|
702
|
-
MIT
|
|
796
|
+
MIT
|