feat(requirements): import OpenSpec requirement evidence#342
Conversation
📝 WalkthroughBundle and module surface
Manifest and integrity
Cross-repo
Docs
OpenSpec change and scenario coverage
WalkthroughThe requirements module adds native OpenSpec and Spec Kit imports, core-delegated validation and diagnostics, gate-finding counts, CLI documentation updates, and release metadata. The code-review module refines Typer callback analysis and updates its release artifacts. ChangesRequirements evidence runtime
Code review Radon rule update
Estimated code review effort: 4 (Complex) | ~45 minutes Possibly related issues
Possibly related PRs
Suggested labels: Suggested reviewers: 🚥 Pre-merge checks | ✅ 4 | ❌ 1❌ Failed checks (1 warning)
✅ Passed checks (4 passed)
✨ Finishing Touches📝 Generate docstrings
🧪 Generate unit tests (beta)
Comment |
|
Strix is installed on this repository, but we couldn't run this PR security review because this workspace's trial has ended. Add a card to resume code reviews here. |
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: c659c6a01b
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
There was a problem hiding this comment.
Actionable comments posted: 7
🧹 Nitpick comments (1)
tests/integration/specfact_requirements/test_command_apps.py (1)
146-170: 🎯 Functional Correctness | 🔵 Trivial | ⚡ Quick winAdd a CLI contract test for
--from-speckit.The new integration coverage exercises explicit and auto-detected OpenSpec only; a Spec Kit case is covered only at the lower runtime layer. A regression in Typer source selection or Spec Kit auto-detection could therefore pass this suite. Add at least the explicit
--from-speckitinvocation.As per path instructions, tests under
tests/**/*.pymust provide contract-first integration coverage and targeted coverage for adapter/bridge changes.🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the rest with a brief reason, keep changes minimal, and validate. In `@tests/integration/specfact_requirements/test_command_apps.py` around lines 146 - 170, Extend test_requirements_import_openspec_accepts_explicit_and_auto_detected_sources or add a nearby integration test to invoke the import CLI with an explicit --from-speckit source and assert successful JSON output with imported equal to 1. Build the required Spec Kit fixture using the existing test helpers or an equivalent minimal fixture, while preserving the existing OpenSpec explicit and auto-detected coverage.Source: Path instructions
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@docs/bundles/requirements/overview.md`:
- Line 21: Update the CLI prerequisite in the requirements overview to state the
supported range as SpecFact CLI >=0.52.0 and <1.0.0, matching the package
metadata; do not leave the wording as “0.52.0 or later.”
In `@llms.txt`:
- Line 102: Regenerate the llms.txt command artifact for specfact requirements
import so its args column exposes the optional positional source path accepted
with --from-openspec and --from-speckit, while preserving the existing options
and command metadata.
In `@openspec/changes/openspec-01-intent-trace/proposal.md`:
- Around line 40-41: Update the proposal’s validation gate diagnostic list to
remove unsupported-source-schema, keeping it scoped to native import output.
Preserve the existing import-time behavior documented in the nearby lines and
retain the other validation diagnostics and gate semantics.
In `@openspec/changes/openspec-01-intent-trace/tasks.md`:
- Around line 26-30: Mark tasks 3.1 through 3.3c as completed in the change task
list, since the import options, runtime delegation and error messaging,
validation and count reporting, layered profile resolution, required-field
advisories, and fail-closed unsupported-schema handling are implemented.
In `@openspec/changes/openspec-01-intent-trace/TDD_EVIDENCE.md`:
- Around line 12-13: Update the failing-before evidence in TDD_EVIDENCE to
reference the current test symbol import_native_requirements_to_bundle instead
of import_openspec_change_to_bundle. Regenerate the capture or revise the
recorded ImportError so it accurately reflects the reproducible
pre-implementation failure.
In `@packages/specfact-requirements/module-package.yaml`:
- Line 2: Select one intended semver release and regenerate the complete signed
artifact set consistently: update the manifest version and integrity metadata in
packages/specfact-requirements/module-package.yaml at lines 2 and 21-23, then
update registry/index.json lines 97-99 with the matching version, URL, and
checksum, and rename/recompute the checksum sidecar at
registry/modules/specfact-requirements-0.2.0.tar.gz.sha256 line 1 for that exact
package payload.
In
`@packages/specfact-requirements/src/specfact_requirements/requirements/commands.py`:
- Around line 72-77: Update _optional_source_path to validate the resolved
source path before returning it: reject a missing path or a regular file with
typer.BadParameter, while preserving the existing positional-argument and
--from-file checks. Ensure invalid native source paths fail as CLI usage errors
before import_native_requirements_to_bundle is dispatched.
---
Nitpick comments:
In `@tests/integration/specfact_requirements/test_command_apps.py`:
- Around line 146-170: Extend
test_requirements_import_openspec_accepts_explicit_and_auto_detected_sources or
add a nearby integration test to invoke the import CLI with an explicit
--from-speckit source and assert successful JSON output with imported equal to
1. Build the required Spec Kit fixture using the existing test helpers or an
equivalent minimal fixture, while preserving the existing OpenSpec explicit and
auto-detected coverage.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: 39b474aa-8e97-4e24-b4ec-4148652b0f80
⛔ Files ignored due to path filters (3)
docs/reference/commands.generated.jsonis excluded by!**/*.generated.*docs/reference/commands.generated.mdis excluded by!**/*.generated.*registry/modules/specfact-requirements-0.2.0.tar.gzis excluded by!**/*.gz
📒 Files selected for processing (16)
docs/bundles/requirements/overview.mdllms.txtopenspec/changes/openspec-01-intent-trace/CHANGE_VALIDATION.mdopenspec/changes/openspec-01-intent-trace/TDD_EVIDENCE.mdopenspec/changes/openspec-01-intent-trace/design.mdopenspec/changes/openspec-01-intent-trace/proposal.mdopenspec/changes/openspec-01-intent-trace/specs/requirements-module/spec.mdopenspec/changes/openspec-01-intent-trace/tasks.mdpackages/specfact-requirements/module-package.yamlpackages/specfact-requirements/src/specfact_requirements/requirements/commands.pypackages/specfact-requirements/src/specfact_requirements/requirements/runtime.pyregistry/index.jsonregistry/modules/specfact-requirements-0.2.0.tar.gz.sha256tests/integration/specfact_requirements/test_command_apps.pytests/unit/docs/test_bundle_overview_cli_examples.pytests/unit/specfact_requirements/test_requirements_runtime.py
🔗 Linked repositories identified
CodeRabbit considers these linked repositories for cross-repo context during reviews:
nold-ai/specfact-cli(manual) → reviewed against branchfeature/openspec-01-intent-traceinstead of the default branch
📜 Review details
⏰ Context from checks skipped due to timeout. (3)
- GitHub Check: quality (3.13)
- GitHub Check: quality (3.11)
- GitHub Check: quality (3.12)
🧰 Additional context used
📓 Path-based instructions (7)
registry/**
⚙️ CodeRabbit configuration file
registry/**: Registry and index consistency: bundle listings, version pins, and compatibility with
published module artifacts.
Files:
registry/modules/specfact-requirements-0.2.0.tar.gz.sha256registry/index.json
packages/**/module-package.yaml
⚙️ CodeRabbit configuration file
packages/**/module-package.yaml: Validate metadata: name, version, commands, dependencies, and parity with packaged src.
Call out semver and signing implications when manifests or payloads change.
Files:
packages/specfact-requirements/module-package.yaml
openspec/**/*.md
⚙️ CodeRabbit configuration file
openspec/**/*.md: Specification truth: proposal/tasks/spec deltas vs. bundle behavior, CHANGE_ORDER, and
drift vs. shipped modules or docs.
Files:
openspec/changes/openspec-01-intent-trace/TDD_EVIDENCE.mdopenspec/changes/openspec-01-intent-trace/CHANGE_VALIDATION.mdopenspec/changes/openspec-01-intent-trace/design.mdopenspec/changes/openspec-01-intent-trace/specs/requirements-module/spec.mdopenspec/changes/openspec-01-intent-trace/proposal.mdopenspec/changes/openspec-01-intent-trace/tasks.md
docs/**/*.md
⚙️ CodeRabbit configuration file
docs/**/*.md: User-facing and cross-site accuracy: Jekyll front matter, links per documentation-url-contract,
CLI examples matching bundled commands.
Files:
docs/bundles/requirements/overview.md
**/*.{js,ts,tsx,jsx,py,java,cs,go,rb,php,cpp,c,h}
📄 CodeRabbit inference engine (CLAUDE.md)
Preserve the clean-code compliance gate and its category references (naming, kiss, yagni, dry, and solid)
Files:
tests/integration/specfact_requirements/test_command_apps.pytests/unit/docs/test_bundle_overview_cli_examples.pytests/unit/specfact_requirements/test_requirements_runtime.pypackages/specfact-requirements/src/specfact_requirements/requirements/commands.pypackages/specfact-requirements/src/specfact_requirements/requirements/runtime.py
tests/**/*.py
⚙️ CodeRabbit configuration file
tests/**/*.py: Contract-first and integration tests: migration suites, bundle validation, and flakiness.
Ensure changes to adapters or bridges have targeted coverage.
Files:
tests/integration/specfact_requirements/test_command_apps.pytests/unit/docs/test_bundle_overview_cli_examples.pytests/unit/specfact_requirements/test_requirements_runtime.py
packages/**/src/**/*.py
⚙️ CodeRabbit configuration file
packages/**/src/**/*.py: Focus on adapter and bridge patterns: imports from specfact_cli (models, runtime, validators),
Typer/Rich command surfaces, and clear boundaries so core upgrades do not silently break bundles.
Flag breaking assumptions about registry loading, lazy imports, and environment/mode behavior.
Files:
packages/specfact-requirements/src/specfact_requirements/requirements/commands.pypackages/specfact-requirements/src/specfact_requirements/requirements/runtime.py
🪛 LanguageTool
docs/bundles/requirements/overview.md
[style] ~111-~111: Three successive sentences begin with the same word. Consider rewording the sentence or use a thesaurus to find a synonym.
Context: ...alidation findings and coverage gaps. - It delegates parsing, hashing, compatibili...
(ENGLISH_WORD_REPEAT_BEGINNING_RULE)
🔇 Additional comments (19)
docs/bundles/requirements/overview.md (1)
33-36: LGTM!Also applies to: 72-97, 111-111
packages/specfact-requirements/module-package.yaml (1)
17-17: LGTM!registry/index.json (1)
108-109: LGTM!packages/specfact-requirements/src/specfact_requirements/requirements/runtime.py (4)
23-80: LGTM!
161-230: LGTM!
233-296: LGTM!
330-330: LGTM!packages/specfact-requirements/src/specfact_requirements/requirements/commands.py (3)
15-70: LGTM!
145-161: LGTM!
202-204: LGTM!openspec/changes/openspec-01-intent-trace/proposal.md (1)
42-51: LGTM!Also applies to: 70-70
openspec/changes/openspec-01-intent-trace/specs/requirements-module/spec.md (1)
41-58: LGTM!openspec/changes/openspec-01-intent-trace/tasks.md (1)
20-23: LGTM!tests/unit/docs/test_bundle_overview_cli_examples.py (1)
63-78: LGTM!tests/unit/specfact_requirements/test_requirements_runtime.py (1)
18-21: LGTM!Also applies to: 51-99, 212-271
tests/integration/specfact_requirements/test_command_apps.py (1)
52-73: LGTM!Also applies to: 173-187
openspec/changes/openspec-01-intent-trace/CHANGE_VALIDATION.md (1)
3-34: LGTM!openspec/changes/openspec-01-intent-trace/TDD_EVIDENCE.md (1)
1-11: LGTM!Also applies to: 15-18, 20-45
openspec/changes/openspec-01-intent-trace/design.md (1)
58-76: LGTM!
There was a problem hiding this comment.
Actionable comments posted: 4
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@openspec/changes/openspec-01-intent-trace/TDD_EVIDENCE.md`:
- Around line 74-75: Reconcile the test totals reported in the PR objectives,
TDD evidence, and release summary by confirming the actual results of both hatch
commands. Update all relevant specification entries consistently to the verified
count, preserving the command outcomes and warning details.
In `@packages/specfact-code-review/module-package.yaml`:
- Around line 26-27: Update the checksum field in
packages/specfact-code-review/module-package.yaml to exactly match the SHA-256
value in registry/modules/specfact-code-review-0.47.49.tar.gz.sha256 at line 1;
no direct change is needed in the registry checksum file.
In
`@packages/specfact-code-review/src/specfact_code_review/tools/radon_runner.py`:
- Line 177: Update _has_typer_command_decorator() to recognize only Typer-owned
command and callback decorators, excluding unrelated decorators such as Click or
custom implementations. Add a negative regression test proving non-Typer
decorators do not bypass the parameter-count KISS check.
In `@tests/unit/specfact_code_review/tools/test_radon_runner.py`:
- Line 20: Update the assertions for run_radon in the affected tests to
explicitly require an empty list by comparing the result to []. Preserve the
existing test scenarios while ensuring falsey values such as None do not satisfy
the assertions.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: b89004ad-83c5-485a-a056-8cc3987fbbc5
⛔ Files ignored due to path filters (5)
docs/Gemfile.lockis excluded by!**/*.lockdocs/reference/commands.generated.jsonis excluded by!**/*.generated.*docs/reference/commands.generated.mdis excluded by!**/*.generated.*registry/modules/specfact-code-review-0.47.49.tar.gzis excluded by!**/*.gzregistry/modules/specfact-requirements-0.2.3.tar.gzis excluded by!**/*.gz
📒 Files selected for processing (20)
docs/bundles/requirements/overview.mdllms.txtopenspec/changes/openspec-01-intent-trace/TDD_EVIDENCE.mdopenspec/changes/openspec-01-intent-trace/design.mdopenspec/changes/openspec-01-intent-trace/proposal.mdopenspec/changes/openspec-01-intent-trace/specs/requirements-module/spec.mdopenspec/changes/openspec-01-intent-trace/tasks.mdpackages/specfact-code-review/module-package.yamlpackages/specfact-code-review/src/specfact_code_review/tools/radon_runner.pypackages/specfact-requirements/module-package.yamlpackages/specfact-requirements/src/specfact_requirements/requirements/commands.pypackages/specfact-requirements/src/specfact_requirements/requirements/runtime.pyregistry/index.jsonregistry/modules/specfact-code-review-0.47.49.tar.gz.sha256registry/modules/specfact-requirements-0.2.3.tar.gz.sha256scripts/generate-command-overview.pytests/integration/specfact_requirements/test_command_apps.pytests/unit/docs/test_llms_overview_freshness.pytests/unit/specfact_code_review/tools/test_radon_runner.pytests/unit/specfact_requirements/test_requirements_runtime.py
🔗 Linked repositories identified
CodeRabbit considers these linked repositories for cross-repo context during reviews:
nold-ai/specfact-cli(manual) → reviewed against branchfeature/openspec-01-intent-traceinstead of the default branch
🚧 Files skipped from review as they are similar to previous changes (7)
- packages/specfact-requirements/module-package.yaml
- openspec/changes/openspec-01-intent-trace/proposal.md
- tests/unit/specfact_requirements/test_requirements_runtime.py
- openspec/changes/openspec-01-intent-trace/design.md
- packages/specfact-requirements/src/specfact_requirements/requirements/commands.py
- packages/specfact-requirements/src/specfact_requirements/requirements/runtime.py
- openspec/changes/openspec-01-intent-trace/tasks.md
📜 Review details
🧰 Additional context used
📓 Path-based instructions (8)
registry/**
⚙️ CodeRabbit configuration file
registry/**: Registry and index consistency: bundle listings, version pins, and compatibility with
published module artifacts.
Files:
registry/modules/specfact-code-review-0.47.49.tar.gz.sha256registry/modules/specfact-requirements-0.2.3.tar.gz.sha256registry/index.json
packages/**/module-package.yaml
⚙️ CodeRabbit configuration file
packages/**/module-package.yaml: Validate metadata: name, version, commands, dependencies, and parity with packaged src.
Call out semver and signing implications when manifests or payloads change.
Files:
packages/specfact-code-review/module-package.yaml
**/*.{js,ts,tsx,jsx,py,java,cs,go,rb,php,cpp,c,h}
📄 CodeRabbit inference engine (CLAUDE.md)
Preserve the clean-code compliance gate and its category references (naming, kiss, yagni, dry, and solid)
Files:
packages/specfact-code-review/src/specfact_code_review/tools/radon_runner.pytests/unit/docs/test_llms_overview_freshness.pytests/integration/specfact_requirements/test_command_apps.pytests/unit/specfact_code_review/tools/test_radon_runner.pyscripts/generate-command-overview.py
packages/**/src/**/*.py
⚙️ CodeRabbit configuration file
packages/**/src/**/*.py: Focus on adapter and bridge patterns: imports from specfact_cli (models, runtime, validators),
Typer/Rich command surfaces, and clear boundaries so core upgrades do not silently break bundles.
Flag breaking assumptions about registry loading, lazy imports, and environment/mode behavior.
Files:
packages/specfact-code-review/src/specfact_code_review/tools/radon_runner.py
tests/**/*.py
⚙️ CodeRabbit configuration file
tests/**/*.py: Contract-first and integration tests: migration suites, bundle validation, and flakiness.
Ensure changes to adapters or bridges have targeted coverage.
Files:
tests/unit/docs/test_llms_overview_freshness.pytests/integration/specfact_requirements/test_command_apps.pytests/unit/specfact_code_review/tools/test_radon_runner.py
openspec/**/*.md
⚙️ CodeRabbit configuration file
openspec/**/*.md: Specification truth: proposal/tasks/spec deltas vs. bundle behavior, CHANGE_ORDER, and
drift vs. shipped modules or docs.
Files:
openspec/changes/openspec-01-intent-trace/TDD_EVIDENCE.mdopenspec/changes/openspec-01-intent-trace/specs/requirements-module/spec.md
docs/**/*.md
⚙️ CodeRabbit configuration file
docs/**/*.md: User-facing and cross-site accuracy: Jekyll front matter, links per documentation-url-contract,
CLI examples matching bundled commands.
Files:
docs/bundles/requirements/overview.md
scripts/**/*.py
⚙️ CodeRabbit configuration file
scripts/**/*.py: Deterministic tooling: signing, publishing, docs generation; subprocess and path safety.
Files:
scripts/generate-command-overview.py
🔇 Additional comments (13)
scripts/generate-command-overview.py (3)
163-166: LGTM!
211-214: LGTM!
157-159: 🎯 Functional CorrectnessNo fallback needed here
_command_options()only runs on realclick.Commandobjects fromget_command(app), so theclick.Optionbranch is sufficient. TheSimpleNamespacefixture intests/unit/test_check_prompt_commands_script.pytargetsscripts/check-prompt-commands.py, not this script.> Likely an incorrect or invalid review comment.llms.txt (1)
28-53: LGTM!Also applies to: 66-76, 93-93, 102-102
tests/unit/docs/test_llms_overview_freshness.py (1)
16-16: LGTM!Also applies to: 56-64
tests/integration/specfact_requirements/test_command_apps.py (1)
74-98: LGTM!Also applies to: 171-177, 180-205, 207-220, 222-235, 237-251
openspec/changes/openspec-01-intent-trace/specs/requirements-module/spec.md (1)
26-32: LGTM!Also applies to: 43-52, 53-61
openspec/changes/openspec-01-intent-trace/TDD_EVIDENCE.md (1)
1-19: LGTM!Also applies to: 20-34, 35-51, 52-65, 66-73, 76-77
docs/bundles/requirements/overview.md (1)
21-21: LGTM!Also applies to: 33-36, 72-97, 111-111
registry/index.json (2)
81-83: LGTM!
97-109: 🗄️ Data Integrity & IntegrationResolve the requirements release version across all artifacts.
The registry and checksum consistently reference
0.2.3, while the supplied PR objectives state0.2.0. Confirm the intended release before publishing.
registry/index.json#L97-L109: Align the version, artifact URL, package metadata, and checksum with the confirmed release.registry/modules/specfact-requirements-0.2.3.tar.gz.sha256#L1-L1: Regenerate the digest from the final tarball after the version is settled.Source: Path instructions
tests/unit/specfact_code_review/tools/test_radon_runner.py (1)
134-139: LGTM!packages/specfact-code-review/module-package.yaml (1)
2-2: LGTM!
There was a problem hiding this comment.
Actionable comments posted: 1
🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.
Inline comments:
In `@packages/specfact-code-review/module-package.yaml`:
- Around line 26-27: Update the manifest integrity block in module-package.yaml
to use the published tarball checksum matching registry/index.json and
registry/modules/specfact-code-review-0.47.51.tar.gz.sha256, then regenerate the
corresponding signature on the following line. Validate metadata and
packaged-src parity, and note any semver or signing implications caused by the
manifest or payload change.
🪄 Autofix (Beta)
Fix all unresolved CodeRabbit comments on this PR:
- Push a commit to this branch (recommended)
- Create a new PR with the fixes
ℹ️ Review info
⚙️ Run configuration
Configuration used: Path: .coderabbit.yaml
Review profile: CHILL
Plan: Pro
Run ID: c9f494e6-7873-447a-87f5-6a4a8e790c1d
⛔ Files ignored due to path filters (1)
registry/modules/specfact-code-review-0.47.51.tar.gzis excluded by!**/*.gz
📒 Files selected for processing (6)
openspec/changes/openspec-01-intent-trace/TDD_EVIDENCE.mdpackages/specfact-code-review/module-package.yamlpackages/specfact-code-review/src/specfact_code_review/tools/radon_runner.pyregistry/index.jsonregistry/modules/specfact-code-review-0.47.51.tar.gz.sha256tests/unit/specfact_code_review/tools/test_radon_runner.py
🔗 Linked repositories identified
CodeRabbit considers these linked repositories for cross-repo context during reviews:
nold-ai/specfact-cli(manual) → reviewed against branchfeature/openspec-01-intent-traceinstead of the default branch
🚧 Files skipped from review as they are similar to previous changes (1)
- openspec/changes/openspec-01-intent-trace/TDD_EVIDENCE.md
📜 Review details
🧰 Additional context used
📓 Path-based instructions (5)
packages/**/module-package.yaml
⚙️ CodeRabbit configuration file
packages/**/module-package.yaml: Validate metadata: name, version, commands, dependencies, and parity with packaged src.
Call out semver and signing implications when manifests or payloads change.
Files:
packages/specfact-code-review/module-package.yaml
registry/**
⚙️ CodeRabbit configuration file
registry/**: Registry and index consistency: bundle listings, version pins, and compatibility with
published module artifacts.
Files:
registry/modules/specfact-code-review-0.47.51.tar.gz.sha256registry/index.json
**/*.{js,ts,tsx,jsx,py,java,cs,go,rb,php,cpp,c,h}
📄 CodeRabbit inference engine (CLAUDE.md)
Preserve the clean-code compliance gate and its category references (naming, kiss, yagni, dry, and solid)
Files:
packages/specfact-code-review/src/specfact_code_review/tools/radon_runner.pytests/unit/specfact_code_review/tools/test_radon_runner.py
packages/**/src/**/*.py
⚙️ CodeRabbit configuration file
packages/**/src/**/*.py: Focus on adapter and bridge patterns: imports from specfact_cli (models, runtime, validators),
Typer/Rich command surfaces, and clear boundaries so core upgrades do not silently break bundles.
Flag breaking assumptions about registry loading, lazy imports, and environment/mode behavior.
Files:
packages/specfact-code-review/src/specfact_code_review/tools/radon_runner.py
tests/**/*.py
⚙️ CodeRabbit configuration file
tests/**/*.py: Contract-first and integration tests: migration suites, bundle validation, and flakiness.
Ensure changes to adapters or bridges have targeted coverage.
Files:
tests/unit/specfact_code_review/tools/test_radon_runner.py
🪛 ast-grep (0.44.1)
tests/unit/specfact_code_review/tools/test_radon_runner.py
[info] 20-20: use jsonify instead of json.dumps for JSON output
Context: json.dumps({str(file_path): []})
Note: [CWE-116] Improper Encoding or Escaping of Output.
(use-jsonify)
🔇 Additional comments (5)
packages/specfact-code-review/src/specfact_code_review/tools/radon_runner.py (1)
109-116: LGTM!Also applies to: 169-180, 193-268
tests/unit/specfact_code_review/tools/test_radon_runner.py (1)
8-35: LGTM!Also applies to: 78-79, 128-169
packages/specfact-code-review/module-package.yaml (1)
2-2: LGTM!registry/index.json (1)
81-83: LGTM!Also applies to: 97-99, 108-109
registry/modules/specfact-code-review-0.47.51.tar.gz.sha256 (1)
1-1: LGTM!
Summary
docs/Gemfile.lockto concurrent-ruby 1.3.7Scope
This PR delivers the requirements-module adapter work for #168. It also includes a small companion
specfact-code-reviewcorrection: the KISS parameter-count analyzer now identifies actual Typer applications before exempting their callbacks. That prevents the requirements CLI from producing a false-positive warning while retaining checks for unrelated*.commandand*.callbackdecorators.Bundle impact
nold-ai/specfact-requirementsreleased as0.2.3, with synchronized registry artifact and integrity metadata.nold-ai/specfact-code-reviewreleased as0.47.51, with synchronized registry artifact and integrity metadata.Validation
hatch run test— 884 passed, with 2 third-party deprecation warnings.hatch run smart-test— 884 passed.hatch run contract-test— 28 passed.openspec validate openspec-01-intent-trace --strict— passed.Documentation
llms.txtfor optional native-source paths.CI and checklist
Closes #168