Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
452 commits
Select commit Hold shift + click to select a range
37d8475
Merge branch 'main' into dev
djm81 Feb 27, 2026
8be301e
feat(backlog): normalize daily summarize Markdown output (#323)
djm81 Feb 27, 2026
a6dcab0
Update version
djm81 Feb 27, 2026
0b99c6c
Merge branch 'dev' of https://github.com/nold-ai/specfact-cli into dev
djm81 Feb 27, 2026
073ae36
Merge branch 'main' into dev
djm81 Feb 27, 2026
2f13173
Add github skills
djm81 Feb 27, 2026
1e743b5
Add new marketplace changes
djm81 Feb 27, 2026
da80932
feat(cli): category groups and flat shims using real module Typer (#331)
djm81 Feb 28, 2026
c480e19
Update docs regarding module migration change
djm81 Feb 28, 2026
039da8b
feat: module-migration-02 bundle extraction (#332)
djm81 Mar 2, 2026
f4ae6b0
Implement blockers to prepare for module-migration-03 change. (#336)
djm81 Mar 2, 2026
efadc08
feat: module-migration-03 core slimming closeout and registry fixes (…
djm81 Mar 3, 2026
aeeaab0
Finalize module-migration-02 change
djm81 Mar 3, 2026
e1a90be
docs(backlog-auth): update auth docs and OpenSpec task status (#342)
djm81 Mar 3, 2026
d7d7c68
chore(openspec): archive completed changes and sync main specs
djm81 Mar 3, 2026
27ef25a
docs(openspec): prefix module migration proposal titles with IDs
djm81 Mar 3, 2026
594b0fa
Add bug change for ado required fields setting and update change order
djm81 Mar 4, 2026
10c1d6c
Update change order
djm81 Mar 4, 2026
f86b516
feat(core): finalize migration-03 auth removal and 3-core slim packag…
djm81 Mar 4, 2026
8b0e0d8
Archive module-migration-03 change
djm81 Mar 4, 2026
b1e9245
feat: remove flat command shims (category-only CLI) (#344)
djm81 Mar 4, 2026
5f9b537
Archived module-migration-04 and updated specs
djm81 Mar 4, 2026
ebb6e61
docs(openspec): finalize module-migration-05 tracking after modules P…
djm81 Mar 4, 2026
29df29c
Archive module-migration-05 change and update specs
djm81 Mar 4, 2026
1811f68
test(migration-06): move legacy sync tests out of core (#346)
djm81 Mar 5, 2026
61352f7
Archived module-migration-06 change and updated specs
djm81 Mar 5, 2026
9483fea
test: module-migration-07 core test ownership cleanup (#347)
djm81 Mar 5, 2026
c48fadb
Archived backlog-core-07 change and updated specs
djm81 Mar 5, 2026
2dd42f8
Update some docs and archive latest finished changes and specs
djm81 Mar 5, 2026
1e11e0a
Add docs update change
djm81 Mar 5, 2026
1578c6c
feat: add agile-01-feature-hierarchy change and update CHANGE_ORDER.m…
djm81 Mar 5, 2026
32c6fc1
docs: align core docs and sync pending changes (#377)
djm81 Mar 5, 2026
6b518b6
fix: stabilize release test suite after module migration
djm81 Mar 6, 2026
39409c5
Update module
djm81 Mar 6, 2026
675277f
Merge origin/main into dev for v0.40.0 release
djm81 Mar 6, 2026
acb3f88
Fix module install
djm81 Mar 6, 2026
04e96c5
Fix module install
djm81 Mar 6, 2026
4616064
Fix failed tests
djm81 Mar 6, 2026
53ed3a0
Merge branch 'main' into dev
djm81 Mar 6, 2026
e1a239e
Fix marketplace client regression
djm81 Mar 6, 2026
23ef66c
Merge branch 'main' into dev
djm81 Mar 6, 2026
d578657
Fix install regression for specfact-cli (#380)
djm81 Mar 6, 2026
5c8b661
Merge branch 'main' into dev
djm81 Mar 6, 2026
3de7b1c
Merge branch 'dev' of https://github.com/nold-ai/specfact-cli into dev
djm81 Mar 6, 2026
40e9695
Add changes to improve runtime validation and backlog module remainin…
djm81 Mar 6, 2026
978cc82
refactor: remove backlog ownership from core cli (#384)
djm81 Mar 6, 2026
00658a3
Add new command alignment change
djm81 Mar 6, 2026
f8e5af1
Merge branch 'dev' of https://github.com/nold-ai/specfact-cli into dev
djm81 Mar 6, 2026
08f028a
Merge branch 'main' into dev
djm81 Mar 6, 2026
332949e
fix: finalize cli runtime validation regressions (#387)
djm81 Mar 9, 2026
2a4a0ab
docs: archive cli-val-07 change
djm81 Mar 9, 2026
d031281
Archive changes and update specs
djm81 Mar 9, 2026
d21e157
Merge branch 'main' into dev
djm81 Mar 9, 2026
216f03f
Add code-review change proposals
djm81 Mar 10, 2026
e979938
test: align command surface regression coverage
djm81 Mar 10, 2026
9612cff
docs: add OpenSpec change for backlog-core commands migration (#390)
djm81 Mar 10, 2026
bd5badd
fix: use POST instead of PATCH for ADO work item creation (#391)
djm81 Mar 11, 2026
0448022
docs: archive backlog-02-migrate-core-commands change
djm81 Mar 11, 2026
e91e672
feat: document code-review module scaffold (#410)
djm81 Mar 11, 2026
aa494ff
Add change for project codebase ownership
djm81 Mar 11, 2026
b62292c
Merge branch 'main' into dev
djm81 Mar 11, 2026
67aaf31
Realign code import ownership surface (#412)
djm81 Mar 12, 2026
1f4d236
Update code review changes
djm81 Mar 16, 2026
516b4c7
docs: update reward ledger OpenSpec tracking (#413)
djm81 Mar 16, 2026
8579fe5
Track house-rules skill OpenSpec changes (#414)
djm81 Mar 16, 2026
ff8d041
docs: Update change-proposal for code-review-07 (#415)
djm81 Mar 16, 2026
b524f3a
Finalize code-review-07 status
djm81 Mar 16, 2026
097d8ef
Finalize code-review-08 status
djm81 Mar 16, 2026
37efea0
feat: apply code-review-09 pre-commit integration
djm81 Mar 17, 2026
fa503da
fix: fall back when cached hatch test env is broken
djm81 Mar 17, 2026
6e828e7
fix: avoid hatch env for coverage xml export
djm81 Mar 17, 2026
0aa178f
fix: install type-check and lint tools directly in CI
djm81 Mar 17, 2026
9f6a749
fix: install pytest fallback deps in test job
djm81 Mar 17, 2026
c451134
fix: install pytest-cov for test fallback path
djm81 Mar 17, 2026
f328223
Merge branch 'main' into dev
djm81 Mar 17, 2026
9146118
Merge branch 'main' into dev
djm81 Mar 17, 2026
0aa017d
Finalize code-review-09 status
djm81 Mar 17, 2026
f067288
[Change] Align core docs with modules site ownership (#419)
djm81 Mar 17, 2026
e456d46
fix: harden docs parity URL assertions
djm81 Mar 17, 2026
41052e6
Archive finished changes and update specs
djm81 Mar 17, 2026
05e81bb
Merge branch 'main' into dev
djm81 Mar 17, 2026
0648162
docs: fix command syntax parity after lean-core/modules split (v0.42.…
djm81 Mar 17, 2026
a6978a2
Archive finished changes and update specs
djm81 Mar 17, 2026
0273f1a
Update evidence
djm81 Mar 17, 2026
8ec2c11
Potential fix for pull request finding 'Unused global variable'
djm81 Mar 17, 2026
7d63dd8
Merge branch 'main' into dev
djm81 Mar 18, 2026
a77e5fd
docs: align core docs ownership and parity (#424)
djm81 Mar 20, 2026
664d4e4
docs: fix quickstart install guidance
djm81 Mar 20, 2026
09688de
docs: remove generated project plan docs
djm81 Mar 20, 2026
f7cca1e
Merge branch 'main' into dev
djm81 Mar 20, 2026
f4e91be
Add code-review change
djm81 Mar 20, 2026
37dfecb
fix: preserve native backlog import payloads (#429)
djm81 Mar 20, 2026
b54aaa6
fix: add docs review workflow and repair docs links (#428)
djm81 Mar 20, 2026
ae7f05c
fix: keep imported change ids stable across title changes (#431)
djm81 Mar 20, 2026
7449714
Merge branch 'main' into dev
djm81 Mar 20, 2026
65726fb
fix: remove conflicting pages file copies
djm81 Mar 20, 2026
fbb3b83
Merge branch 'main' into dev
djm81 Mar 20, 2026
c6c47fc
Add docs sync changs
djm81 Mar 20, 2026
eaa87ac
docs: update openspec clean-code planning
djm81 Mar 22, 2026
f602dba
Update change status
djm81 Mar 22, 2026
58314e5
fix: code-review-zero-findings dogfood remediation (v0.42.3) (#435)
djm81 Mar 23, 2026
fb3c5fd
Merge branch 'main' into dev
djm81 Mar 23, 2026
2809390
Add docs refactoring changes
djm81 Mar 23, 2026
215df59
Add bug change tracking for encoding and resources
djm81 Mar 24, 2026
2a60f15
docs: restructure core site IA to 6-section progressive nav (#442)
djm81 Mar 24, 2026
81bca26
fix: harden cross-platform runtime and IDE resource discovery (#443)
djm81 Mar 24, 2026
852f446
fix: resolve review type-safety findings
djm81 Mar 24, 2026
2bbde33
Merge branch 'main' into dev
djm81 Mar 24, 2026
8272233
Improve clarity and scope of ide prompt change
djm81 Mar 25, 2026
2f0675c
feat(init): IDE prompt source catalog, --prompts, namespaced exports …
djm81 Mar 25, 2026
278142e
fix tests
djm81 Mar 25, 2026
38a9d21
release: bump version to 0.42.5 and update CHANGELOG
djm81 Mar 25, 2026
f552107
Fix review findings
djm81 Mar 25, 2026
dab2ffe
feat(init): selective IDE prompt export cleanup and VS Code recommend…
djm81 Mar 25, 2026
fbb2307
Fix review findings
djm81 Mar 25, 2026
71e760b
Merge branch 'main' into dev
djm81 Mar 25, 2026
41dc0db
Add missing import
djm81 Mar 25, 2026
2b26098
Bump patch version and changelog
djm81 Mar 25, 2026
90da7da
Fix failed tests
djm81 Mar 25, 2026
1eca7a9
Fix review findings
djm81 Mar 25, 2026
07c19b4
Merge branch 'main' into dev
djm81 Mar 26, 2026
db4ddc3
docs: core vs modules URL contract and OpenSpec alignment (#448)
djm81 Mar 26, 2026
96f35d7
feat(docs-12): docs command validation and cross-site link checks (#449)
djm81 Mar 26, 2026
f11cb9e
fix(scripts): CliRunner without mix_stderr for Click 8.3+ compatibili…
djm81 Mar 26, 2026
7ccb122
fix: review gates (semgrep print, radon CC, icontract, questionary ty…
djm81 Mar 26, 2026
d516657
Merge branch 'main' into dev
djm81 Mar 26, 2026
86bdc7c
Add speckit adapter alignment change and update affected change specs
djm81 Mar 27, 2026
f92c820
feat(adapters): spec-kit v0.4.x adapter alignment (#454)
djm81 Mar 27, 2026
dd1e359
chore: bump version to 0.43.0 for spec-kit v0.4.x alignment (#455)
djm81 Mar 27, 2026
eec640e
fix(packaging): remove workflow prompts from core wheel (packaging-02…
djm81 Mar 27, 2026
f7fefdd
Potential fix for pull request finding 'Empty except'
djm81 Mar 28, 2026
280d158
Merge branch 'main' into dev
djm81 Mar 28, 2026
0cc2c3c
Fix changelog version
djm81 Mar 28, 2026
c1c2e47
docs: unify core docs portal UX (#459)
djm81 Mar 28, 2026
ce49cd5
Harden docs home URL test assertion
djm81 Mar 28, 2026
cb08cbb
Merge branch 'main' into dev
djm81 Mar 29, 2026
715d472
feat: doc frontmatter validation, v0.43.2 review JSON gate, and pre-c…
djm81 Mar 29, 2026
edc89a7
docs: archive doc-frontmatter-schema openspec change
djm81 Mar 29, 2026
85572f2
Apply suggestions from code review
djm81 Mar 29, 2026
117d568
fix: restore protocol stubs for type checking
djm81 Mar 29, 2026
582a53c
Add frontamtter check
djm81 Mar 29, 2026
4c4ef24
fix: harden protocol stubs for code quality
djm81 Mar 29, 2026
52ee695
Add PR test hardening change
djm81 Mar 29, 2026
644474a
fix: remediate review findings and harden review gates
djm81 Mar 30, 2026
3eff782
fix: rebuild review report model for pydantic
djm81 Mar 30, 2026
e44f15a
Merge branch 'main' into dev
djm81 Mar 30, 2026
93ff11e
Add story and onboarding change
djm81 Mar 30, 2026
506679e
Update change tracking
djm81 Mar 30, 2026
f84aa39
Improve scope for ci/cd requirements
djm81 Mar 30, 2026
11391c9
docs: sharpen first-contact story and onboarding (#467)
djm81 Mar 30, 2026
0fc5f1f
fix: harden review blockers and bump patch version
djm81 Mar 30, 2026
ab42fd0
test: harden modules docs url assertions
djm81 Mar 30, 2026
93b6dee
Merge branch 'main' into dev
djm81 Mar 30, 2026
c5efee3
fix: harden trustworthy green checks (#469)
djm81 Mar 30, 2026
30c70f3
fix: address CodeRabbit review findings for ci-02 (#471)
djm81 Mar 30, 2026
7709718
fix: propagate docker actionlint exit code instead of masking failure…
djm81 Mar 30, 2026
1ffdace
fix: assert hook id stability and cd to repo root for local actionlin…
djm81 Mar 30, 2026
4dcf207
Merge branch 'main' into dev
djm81 Mar 30, 2026
9dbe9d4
feat: clean-code-01-principle-gates — 7-principle charter gates, v0.4…
djm81 Mar 31, 2026
9855d35
feat: archive completed openspec changes and update main specs
djm81 Mar 31, 2026
e9e75d4
Merge branch 'main' into dev
djm81 Mar 31, 2026
6663324
Add new user onboarding change
djm81 Apr 1, 2026
b4a7ecf
docs & tooling: new user onboarding + smart-test and pre-commit revie…
djm81 Apr 2, 2026
e87058b
fix: code-review gate (Typer params), typer<0.24 vs semgrep, module u…
djm81 Apr 3, 2026
9696489
docs: restructure README for star conversion (#480)
djm81 Apr 3, 2026
8fe4a26
Merge branch 'main' into dev
djm81 Apr 3, 2026
903b131
Merge branch 'main' into dev
djm81 Apr 5, 2026
f1f1919
archived implemented changes
djm81 Apr 5, 2026
17ac397
Archive and remove outdated changes
djm81 Apr 5, 2026
9900b72
Split and refactor change proposals between both repos
djm81 Apr 8, 2026
2a73434
Merge remote-tracking branch 'origin/main' into dev
djm81 Apr 8, 2026
e8c3848
Archive alignment change
djm81 Apr 8, 2026
98cf86e
Merge branch 'main' into dev
djm81 Apr 8, 2026
5b5bac7
Add changes and github hierarchy scripts
djm81 Apr 9, 2026
280ac57
feat: add GitHub hierarchy cache sync (#492)
djm81 Apr 9, 2026
1b314a1
[codex] Compact agent governance loading (#493)
djm81 Apr 10, 2026
647ce0c
Archived github hierarchy change
djm81 Apr 10, 2026
338aa92
Update from dev
djm81 Apr 10, 2026
c5083cf
Update rules for openspec archive
djm81 Apr 10, 2026
74c566b
Potential fix for pull request finding 'Unused local variable'
djm81 Apr 10, 2026
685bd4e
Add wiki update notes
djm81 Apr 10, 2026
fdcc51a
Merge branch 'dev' of https://github.com/nold-ai/specfact-cli into dev
djm81 Apr 10, 2026
6c9f03b
Archive governance-03 change, format markdown, add wiki instructions …
djm81 Apr 10, 2026
de48d48
Fix review findings
djm81 Apr 10, 2026
186120e
Fix type errors
djm81 Apr 10, 2026
73b8f48
Merge branch 'main' into dev
djm81 Apr 10, 2026
951f3ae
fix: safe VS Code settings merge and project artifact writes (#490) (…
djm81 Apr 12, 2026
14f3b41
Fix review findings (#498)
djm81 Apr 12, 2026
6096c3c
feat(openspec): add marketplace-06-ci-module-signing change proposal
djm81 Apr 13, 2026
448328b
chore(pre-commit): modular hooks + branch-aware module verify (#501)
djm81 Apr 14, 2026
f7e3fd2
apply code review fixes
djm81 Apr 14, 2026
96879a9
apply code review fixes
djm81 Apr 14, 2026
cdf7e4d
merge: integrate origin/dev with local PyPI pre-commit and type-check…
djm81 Apr 14, 2026
29fdca8
merge: integrate origin/main into dev (conflicts resolved favoring dev)
djm81 Apr 14, 2026
3ffec56
fix(pre-commit): include staged deletions in staged_files() for Block 2
djm81 Apr 14, 2026
95ccde3
Fix review findings
djm81 Apr 14, 2026
c8a1116
Fix code review findings
djm81 Apr 14, 2026
b9b8691
feat(ci): module signing on PR approval and manual workflow_dispatch …
djm81 Apr 14, 2026
01e7351
Feature/ci module sign on approval (#504)
djm81 Apr 14, 2026
b2cc72f
feat(ci): workflow_dispatch for sign-modules-on-approval (#505)
djm81 Apr 14, 2026
a1dda6d
fix(ci): module signing workflows, PyPI version check, and review gate
djm81 Apr 14, 2026
85e7b5a
fix(modules): bump init to 0.1.28 for enforce-version-bump on dev
djm81 Apr 14, 2026
e7efd7d
Merge branch 'main' into dev
djm81 Apr 14, 2026
e61a8a2
chore(release): v0.46.2 — require signatures on all PRs to main
djm81 Apr 14, 2026
1ceddab
sign changed package
djm81 Apr 14, 2026
48ea131
fix(modules): bump init to 0.1.29 for dev→main PR version gate
djm81 Apr 14, 2026
7e9504e
Signed modules and bumped version
djm81 Apr 14, 2026
b34f9fb
Signed modules and bumped version
djm81 Apr 14, 2026
55c4c97
Fix sign flow
djm81 Apr 14, 2026
7091747
Merge branch 'main' into dev
djm81 Apr 15, 2026
5d0d82f
feat: dep-security-cleanup (license gate, pycg, commentjson, review e…
djm81 Apr 16, 2026
01d1bb1
apply review findings
djm81 Apr 16, 2026
5125725
Fix publish module and security gate findings
djm81 Apr 16, 2026
4df303c
Fix findings and publish bug
djm81 Apr 16, 2026
bbea309
Fix review findings and publish modules flow
djm81 Apr 16, 2026
1c1624d
Update publish and sign flows
djm81 Apr 16, 2026
e69ea29
Update publish and sign flows
djm81 Apr 16, 2026
ef07858
chore(modules): auto-sign bundled manifests [skip ci] (#510)
github-actions[bot] Apr 16, 2026
daa73c6
Apply code review findings
djm81 Apr 16, 2026
e62d223
Merge branch 'dev' of https://github.com/nold-ai/specfact-cli into dev
djm81 Apr 16, 2026
1e255e5
Fix failed tests
djm81 Apr 16, 2026
ce3bbb4
[codex] Add five-pillar governance OpenSpec wave (#531)
djm81 Apr 19, 2026
f48b156
[codex] stabilize module install and init state (#535)
djm81 Apr 28, 2026
0200ba5
chore(modules): auto-sign bundled manifests [skip ci] (#536)
github-actions[bot] Apr 28, 2026
b6505f4
Merge branch 'main' into dev
djm81 Apr 28, 2026
d0eb4a4
fix: remove unused checksum tuple in verifier
djm81 Apr 28, 2026
be171d3
chore: reduce low-signal coderabbit review noise
djm81 Apr 28, 2026
73741e4
fix: address codex review findings
djm81 Apr 28, 2026
d209150
fix: tighten local gate scope and module verification
djm81 Apr 28, 2026
01702e6
Merge branch 'main' into dev
djm81 Apr 28, 2026
9b7d968
Make `specfact upgrade` install-method-aware (uv/uvx support, pipx/pi…
djm81 May 3, 2026
3f349fc
chore(modules): auto-sign bundled manifests [skip ci] (#540)
github-actions[bot] May 3, 2026
7179e77
fix(upgrade): prefer pipx before uv tool detection
djm81 May 3, 2026
6e65c7d
fix(upgrade): address PR 541 review findings
djm81 May 3, 2026
88f3d90
fix(cli,upgrade): address PR 541 critical findings
djm81 May 3, 2026
082dc06
Update module manifest from main
djm81 May 3, 2026
990d1e8
chore(modules): auto-sign bundled manifests [skip ci] (#546)
github-actions[bot] May 3, 2026
cb00a4b
Fix module upgrade signature and version bump
djm81 May 3, 2026
27afdb5
Fix signature
djm81 May 3, 2026
d470837
chore(modules): auto-sign bundled manifests [skip ci] (#548)
github-actions[bot] May 3, 2026
86e7e70
fix(ci): terminate module publish output list
djm81 May 3, 2026
8a0aa0d
Merge branch 'main' into dev
djm81 May 3, 2026
bed4721
fix(cli): forward bare lazy subcommands (#549)
djm81 May 3, 2026
11a5e1e
Merge branch 'main' into dev
djm81 May 3, 2026
7724ea6
chore(openspec): park 21 deferred proposals + simplify CHANGE_ORDER (…
djm81 May 6, 2026
197c0d1
Ignore claude settings.json
djm81 May 6, 2026
8000f06
docs: refine telemetry change to active opt-in (#555)
djm81 May 6, 2026
a7a5336
Merge branch 'main' into dev
djm81 May 6, 2026
469af46
fix runtime module discovery reliability (#558)
djm81 May 7, 2026
fab4fa6
chore(modules): auto-sign bundled manifests [skip ci] (#559)
github-actions[bot] May 7, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 6 additions & 0 deletions .github/workflows/pr-orchestrator.yml
Original file line number Diff line number Diff line change
Expand Up @@ -306,6 +306,12 @@ jobs:
run: |
mkdir -p logs/tests/junit logs/tests/coverage logs/tests/workflows

- name: Runtime discovery smoke test
if: needs.changes.outputs.skip_tests_dev_to_main != 'true'
shell: bash
run: |
python scripts/runtime_discovery_smoke.py --launcher direct --launcher pip-editable --launcher uvx

- name: Set run_unit_coverage (or skip for dev→main)
id: detect-unit
shell: bash
Expand Down
18 changes: 18 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,24 @@ All notable changes to this project will be documented in this file.

---

## [0.46.19] - 2026-05-07

### Added

- **IDE initialization environment selection**: `specfact init ide --env-manager <auto|uv|hatch|poetry|pip>`
now lets users explicitly select the environment manager used for IDE setup.

### Fixed

- **Runtime module discovery**: load installed module dependency `src` roots
reliably, classify load failures in availability diagnostics, and detect
environment managers in rootless monorepos.
- **Runtime discovery CI smoke**: add direct, pip-editable, and uvx install
path coverage for module install, upgrade command availability, init, and
installed `specfact code` command loading.

---

## [0.46.18] - 2026-05-04

### Fixed
Expand Down
1 change: 1 addition & 0 deletions openspec/CHANGE_ORDER.md
Original file line number Diff line number Diff line change
Expand Up @@ -77,6 +77,7 @@ User-facing CLI behavior assertions and acceptance-test surface.

| Order | Change | Issue | Blocked by |
|---|---|---|---|
| 0 | `runtime-01-discovery-reliability` | [#552](https://github.com/nold-ai/specfact-cli/issues/552), [#553](https://github.com/nold-ai/specfact-cli/issues/553), [#554](https://github.com/nold-ai/specfact-cli/issues/554) | — |
| 1 | `cli-val-03-misuse-safety-proof` | [#281](https://github.com/nold-ai/specfact-cli/issues/281) | — |
| 2 | `cli-val-04-acceptance-test-runner` | [#282](https://github.com/nold-ai/specfact-cli/issues/282) | cli-val-03 |

Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
schema: spec-driven
created: 2026-05-07
43 changes: 43 additions & 0 deletions openspec/changes/runtime-01-discovery-reliability/TDD_EVIDENCE.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
# TDD Evidence: runtime-01-discovery-reliability

## Scope Decision

- `#552` and `#554` remain in `nold-ai/specfact-cli`: the installed `specfact-codebase` artifact is present, but core runtime loading and diagnostics decide whether `specfact code` is registered and importable.
- `#553` remains in `nold-ai/specfact-cli`: environment-manager detection and `specfact init ide` option handling are core CLI behavior.
- No transfer to `nold-ai/specfact-cli-modules` is required unless implementation proves signed module manifests or payloads must change.

## GitHub Readiness

- Parent feature: `#353 [Feature] Marketplace Module Distribution`.
- Change user story: `#557 [Story] Runtime Discovery Reliability for Installed Modules and Monorepos`.
- Source bug reports: `#552`, `#553`, and `#554`.
- Labels and SpecFact CLI project assignment were present on the reported issues; `#557` was created with `openspec`, `change-proposal`, `marketplace`, `dependencies`, and `module-system` labels and assigned to the SpecFact CLI project with `Todo` status.
- Corrected hierarchy on 2026-05-07: removed direct sub-issue links from bug reports to epic `#285`; linked `#557` under feature `#353`; linked `#557` as blocking `#552`, `#553`, and `#554`; commented source tracking back to all three bug reports.

## Failing Evidence

- `hatch run pytest tests/unit/specfact_cli/registry/test_module_packages.py::test_installed_group_loader_adds_enabled_dependency_module_src_roots tests/unit/specfact_cli/registry/test_module_packages.py::test_lazy_loader_failure_is_recorded_for_availability_diagnostics tests/unit/utils/test_env_manager.py::TestDetectEnvManager::test_detect_uv_from_path_when_no_project_markers tests/unit/utils/test_env_manager.py::TestDetectEnvManager::test_detect_uv_from_rootless_monorepo_pyproject tests/unit/utils/test_env_manager.py::TestDetectEnvManager::test_detect_uv_from_second_level_monorepo_lock tests/e2e/test_init_command.py::TestInitCommandE2E::test_init_no_warning_with_explicit_uv_env_manager tests/e2e/test_init_command.py::TestInitCommandE2E::test_init_no_warning_with_rootless_monorepo_uv -q`
- Result before production edits: 7 failed. Failures covered installed module dependency `src/` importability, lazy loader failure diagnostics, PATH/monorepo environment detection, and explicit `init ide --env-manager uv`.

## Passing Evidence

- `hatch run pytest tests/unit/specfact_cli/registry/test_module_packages.py::test_installed_group_loader_adds_enabled_dependency_module_src_roots tests/unit/specfact_cli/registry/test_module_packages.py::test_lazy_loader_failure_is_recorded_for_availability_diagnostics tests/unit/utils/test_env_manager.py::TestDetectEnvManager::test_detect_uv_from_path_when_no_project_markers tests/unit/utils/test_env_manager.py::TestDetectEnvManager::test_detect_uv_from_rootless_monorepo_pyproject tests/unit/utils/test_env_manager.py::TestDetectEnvManager::test_detect_uv_from_second_level_monorepo_lock tests/e2e/test_init_command.py::TestInitCommandE2E::test_init_no_warning_with_explicit_uv_env_manager tests/e2e/test_init_command.py::TestInitCommandE2E::test_init_no_warning_with_rootless_monorepo_uv -q` -> 7 passed.
- `hatch run pytest tests/unit/specfact_cli/registry/test_module_packages.py tests/unit/specfact_cli/registry/test_module_availability.py -q` -> 50 passed.
- `hatch run pytest tests/e2e/test_init_command.py -q` -> 20 passed, 2 warnings.
- `hatch run pytest tests/unit/utils/test_env_manager.py -q` -> 34 passed.
- `hatch run pytest tests/integration/test_bundle_install.py::test_installing_spec_bundle_auto_installs_project_dependency tests/integration/test_bundle_install.py::test_installing_spec_bundle_skips_dependency_when_already_present tests/unit/modules/module_registry/test_commands.py::test_install_command_project_scope_reenable_uses_selected_repo tests/unit/modules/module_registry/test_commands.py::test_install_command_project_scope_installs_to_project_modules_root tests/unit/modules/module_registry/test_official_tier_display.py::test_module_install_reports_verified_official_tier -q` -> 5 passed.
- `hatch run env HOME=/tmp/specfact-test-home-runtime-01 pytest tests/integration/test_core_slimming.py::test_fresh_install_cli_app_registered_commands_only_three_core tests/integration/test_core_slimming.py::test_stale_flat_shim_plan_exits_with_install_instructions tests/unit/cli/test_lean_help_output.py::test_stale_lazy_flat_shim_prints_install_guidance tests/unit/registry/test_category_groups.py::test_bootstrap_with_category_grouping_enabled_registers_group_commands tests/unit/registry/test_category_groups.py::test_bootstrap_with_category_grouping_disabled_still_has_no_flat_shims -q` -> 5 passed.
- Added `scripts/runtime_discovery_smoke.py` and Hatch script `runtime-discovery-smoke` for CI-capable real-world coverage. The script creates an isolated HOME, builds a rootless monorepo fixture from `specfact-cli-demo` when available, adds multiple package-level `pyproject.toml`/lock markers, serves a local file-backed marketplace from `specfact-cli-modules`, installs `nold-ai/specfact-project`, `nold-ai/specfact-codebase`, and `nold-ai/specfact-code-review`, checks upgrade command availability, runs `specfact init ide` with auto and explicit `--env-manager uv`, and verifies installed `specfact code`, `code review run`, and `code import` command loading.
- `.github/workflows/pr-orchestrator.yml` now runs `python scripts/runtime_discovery_smoke.py --launcher direct --launcher pip-editable --launcher uvx` so installer, module discovery, init, and environment-manager regressions fail fast in CI across Hatch/current-interpreter, pip editable, and uvx launch paths.
- `hatch run pytest tests/integration/scripts/test_runtime_discovery_smoke.py -q` -> 1 passed.
- `hatch run runtime-discovery-smoke --modules-repo /home/dom/git/nold-ai/specfact-cli-modules --demo-repo /home/dom/git/nold-ai/specfact-demo-repo --launcher direct` -> passed against a real demo-repo copy and sibling module artifacts.
- `hatch run runtime-discovery-smoke --modules-repo /home/dom/git/nold-ai/specfact-cli-modules --demo-repo /home/dom/git/nold-ai/specfact-demo-repo --launcher pip-editable` -> passed with a temporary editable install and isolated module HOME.
- `hatch run runtime-discovery-smoke --modules-repo /home/dom/git/nold-ai/specfact-cli-modules --demo-repo /home/dom/git/nold-ai/specfact-demo-repo --launcher uvx` -> passed with `uvx --from <repo>` and isolated module HOME.
- `openspec validate runtime-01-discovery-reliability --strict` -> valid.
- `hatch run format` -> all checks passed.
- `hatch run type-check` -> 0 errors, 1572 existing repository-wide warnings.
- Touched-file `ruff format --check`, `ruff check`, and `pylint` -> clean; Pylint rated touched files 10.00/10.
- `hatch run workflows-lint` -> passed.
- `hatch run contract-test` -> no modified files detected; cached results used.
- `hatch run smart-test-auto` attempted a full baseline because no incremental baseline existed; it failed in the local developer HOME due pre-existing installed user modules being discovered by clean-runtime tests. The same failed subset passed with an isolated HOME, and all change-targeted suites passed.
- SpecFact code review: `SPECFACT_MODULES_ROOTS=/home/dom/git/nold-ai/specfact-cli-modules/packages hatch run python -m specfact_cli.cli code review run --json --out .specfact/code-review.runtime-01.changed.json --scope changed` -> 0 blocking findings; 499 warnings remain, dominated by existing repository-wide type-safety warnings. New contract warnings introduced by this change were fixed before the final run.
46 changes: 46 additions & 0 deletions openspec/changes/runtime-01-discovery-reliability/proposal.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,46 @@
## Why

Three user bug reports show clean installed-runtime discovery gaps in SpecFact CLI 0.46.18:

- `#552` and `#554`: `nold-ai/specfact-codebase` is installed and enabled, but `specfact code` can report that the module is not installed or can show only timing output instead of command help.
- `#553`: `specfact init ide` reports no compatible environment manager in rootless monorepos even when `uv` is available on `PATH` and package-level `pyproject.toml` files exist.

The failures are core runtime issues, not module ownership issues. Installed module command loading, missing-command diagnostics, and environment-manager detection live in `specfact-cli`.

## What Changes

- **EXTEND** installed module runtime loading so lazy command import makes all enabled discovered module `src/` roots importable before loading a module command app.
- **EXTEND** missing command diagnostics so an installed-but-unloadable module reports the real runtime/import cause instead of a false "not installed" message.
- **NEW** environment-manager detection behavior for rootless monorepos and PATH-only tool availability.
- **EXTEND** `specfact init ide` with `--env-manager <auto|uv|hatch|poetry|pip>` while keeping automatic detection as the default.

## Capabilities

### Modified Capabilities

- `installed-runtime-module-discovery`
- `module-installation`
- `module-owned-ide-prompts`

### New Capabilities

- `environment-manager-detection`

## Impact

- Affected code: module discovery/command loading, module availability diagnostics, environment-manager detection, and `init ide` option wiring.
- Affected tests: targeted unit/e2e tests for installed module runtime loading, missing command diagnostics, monorepo environment detection, and `init ide --env-manager`.
- GitHub scope: fixes `#552`, `#553`, and `#554`; all remain in `nold-ai/specfact-cli` and are blocked by dedicated user-story issue `#557`, which is tracked under feature parent `#353`.

---

## Source Tracking

<!-- source_repo: nold-ai/specfact-cli -->
- **Parent Feature**: [#353](https://github.com/nold-ai/specfact-cli/issues/353)
- **Change User Story**: [#557](https://github.com/nold-ai/specfact-cli/issues/557)
- **GitHub Issues**: [#552](https://github.com/nold-ai/specfact-cli/issues/552), [#553](https://github.com/nold-ai/specfact-cli/issues/553), [#554](https://github.com/nold-ai/specfact-cli/issues/554)
- **Issue Relationships**: `#557` blocks `#552`, `#553`, and `#554`; no direct user bug report is nested under an epic or feature.
- **Repository**: nold-ai/specfact-cli
- **Last Synced Status**: GitHub story and dependencies synced
- **Sanitized**: false
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
## ADDED Requirements

### Requirement: Environment Manager Detection Supports Rootless Monorepos

The system SHALL detect supported Python environment managers in repositories that do not have a root-level Python project file but do contain package-level project files.

#### Scenario: Rootless monorepo with uv package files

- **GIVEN** a repository root has no `pyproject.toml`
- **AND** a first-level package directory contains `pyproject.toml`
- **AND** `uv` is available on `PATH`
- **WHEN** environment manager detection runs for the repository root
- **THEN** the detected manager is `uv`
- **AND** the command prefix is `uv run`
- **AND** `specfact init ide` does not report "No Compatible Environment Manager Detected"

#### Scenario: Rootless monorepo with nested uv lock

- **GIVEN** a repository root has no `pyproject.toml`
- **AND** a first-level or second-level package directory contains `uv.lock` or `uv.toml`
- **AND** `uv` is available on `PATH`
- **WHEN** environment manager detection runs for the repository root
- **THEN** the detected manager is `uv`

### Requirement: Environment Manager Detection Falls Back To PATH Tools

When no project marker identifies an environment manager, the system SHALL detect supported tools available on `PATH` before returning `unknown`.

#### Scenario: PATH-only uv detection

- **GIVEN** a repository has no supported root or package-level Python project marker
- **AND** `uv` is available on `PATH`
- **WHEN** environment manager detection runs
- **THEN** the detected manager is `uv`
- **AND** the command prefix is `uv run`

#### Scenario: No markers or tools remain unknown

- **GIVEN** a repository has no supported Python project marker
- **AND** no supported environment manager executable is available on `PATH`
- **WHEN** environment manager detection runs
- **THEN** the detected manager remains `unknown`
- **AND** existing direct-invocation fallback behavior is preserved
Original file line number Diff line number Diff line change
@@ -0,0 +1,22 @@
## MODIFIED Requirements

### Requirement: Module Discovery Roots

The system SHALL discover and load module packages consistently between development and installed runtime contexts.

#### Scenario: Installed runtime loads dependent module packages

- **GIVEN** user-scope modules `nold-ai/specfact-project` and `nold-ai/specfact-codebase` are installed and enabled
- **AND** no sibling `specfact-cli-modules` source checkout contributes bundle paths to `sys.path`
- **WHEN** the user invokes `specfact code --help`
- **THEN** the codebase module command app loads from the installed module artifact
- **AND** imports of installed dependency packages such as `specfact_project` resolve without manual `PYTHONPATH`
- **AND** the command help includes codebase subcommands such as `import`, `analyze`, `drift`, `validate`, and `repro`

#### Scenario: Development source paths do not mask installed-runtime validation

- **GIVEN** tests configure explicit installed module roots
- **AND** development-only sibling module source paths are disabled for that runtime
- **WHEN** module command loading is validated
- **THEN** success depends on the installed module artifacts under the configured roots
- **AND** missing installed dependencies fail the validation instead of being satisfied by a sibling checkout
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
## MODIFIED Requirements

### Requirement: Missing Command Diagnostics Explain Installed-Unavailable Causes

When a known module-provided command group is not registered, the system SHALL distinguish an absent module from an installed module that is unavailable for another local reason.

#### Scenario: Missing command provider fails during lazy command load

- **GIVEN** a known command group is provided by an installed and enabled module
- **AND** the module command app cannot be imported because a runtime dependency or module package import is missing
- **WHEN** the user invokes the command group
- **THEN** the CLI SHALL report that the module is installed but unavailable
- **AND** the diagnostic SHALL include the failing load reason when it can be captured without retrying destructive installation
- **AND** the diagnostic SHALL NOT report only that the module is not installed
Original file line number Diff line number Diff line change
@@ -0,0 +1,12 @@
## MODIFIED Requirements

### Requirement: IDE prompt export SHALL use installed module resources

`specfact init ide` SHALL discover prompt templates from installed module packages and their packaged resource directories. The export flow SHALL not depend on workflow prompt files stored under the core CLI package for bundle-owned commands.

#### Scenario: IDE setup accepts explicit environment manager

- **GIVEN** prompt templates are available for export
- **WHEN** the user runs `specfact init ide --env-manager uv`
- **THEN** IDE prompt export uses the selected `uv` environment manager metadata for dependency setup decisions
- **AND** the command does not emit the "No Compatible Environment Manager Detected" warning for that explicit manager
33 changes: 33 additions & 0 deletions openspec/changes/runtime-01-discovery-reliability/tasks.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,33 @@
# Tasks: runtime-01-discovery-reliability

## 1. Readiness and spec validation

- [x] 1.1 Confirm issues `#552`, `#553`, and `#554` are correctly scoped to `specfact-cli`, not `specfact-cli-modules`, and record that decision in `TDD_EVIDENCE.md`.
- [x] 1.2 Confirm public GitHub metadata is complete: dedicated user-story issue `#557`, feature parent `#353`, labels, project assignment, issue dependencies, and Todo/not-in-progress status.
- [x] 1.3 Validate the OpenSpec change with `openspec validate runtime-01-discovery-reliability --strict`.

## 2. Failing-first tests

- [x] 2.1 Add tests for clean installed module runtime loading with temp installed `specfact-project` and `specfact-codebase` modules, no sibling module source path, and `specfact code` exposing `import`, `analyze`, `drift`, `validate`, and `repro`.
- [x] 2.2 Add tests proving module load/import failures are classified as installed-unavailable instead of absent.
- [x] 2.3 Add tests for rootless monorepo environment detection with `uv` on `PATH`, package-level `pyproject.toml`/`uv.lock`, and explicit `init ide --env-manager uv`.
- [x] 2.4 Run the targeted tests before production edits and record failing evidence in `TDD_EVIDENCE.md`.

## 3. Runtime discovery fixes

- [x] 3.1 Add a focused helper that prepends enabled discovered module `src/` roots to `sys.path` before lazy-loading installed module command apps.
- [x] 3.2 Preserve existing development behavior but prevent sibling `specfact-cli-modules` source paths from hiding installed-runtime test failures.
- [x] 3.3 Capture lazy loader failures in availability diagnostics so known module commands distinguish absent, disabled, skipped, and load-failed providers.

## 4. Environment manager fixes

- [x] 4.1 Extend environment-manager detection to scan rootless monorepo package directories up to two levels deep.
- [x] 4.2 Add PATH fallback detection for supported tools, preferring `uv`, then `hatch`, `poetry`, and `pip`.
- [x] 4.3 Add `specfact init ide --env-manager <auto|uv|hatch|poetry|pip>` and use the explicit manager when provided.

## 5. Passing evidence and quality gates

- [x] 5.1 Re-run targeted tests and record passing evidence in `TDD_EVIDENCE.md`.
- [x] 5.2 Run required quality gates for touched scope: formatting, type-check, lint, contract-test, smart-test or targeted equivalent, and SpecFact code review JSON.
- [x] 5.3 Add a CI-capable runtime discovery smoke script that exercises module install, upgrade/init-adjacent discovery, rootless monorepo environment-manager detection, and installed `specfact code` command loading against a real demo checkout.
- [x] 5.4 Update task checkboxes and prepare the branch for PR to `dev`.
Loading
Loading