codeforerunner 0.4.6__tar.gz → 0.4.8__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (65) hide show
  1. {codeforerunner-0.4.6/src/codeforerunner.egg-info → codeforerunner-0.4.8}/PKG-INFO +8 -7
  2. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/README.md +7 -6
  3. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/pyproject.toml +1 -1
  4. codeforerunner-0.4.8/src/codeforerunner/prompts/tasks/gaps.md +52 -0
  5. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/tasks.json +2 -1
  6. {codeforerunner-0.4.6 → codeforerunner-0.4.8/src/codeforerunner.egg-info}/PKG-INFO +8 -7
  7. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner.egg-info/SOURCES.txt +1 -0
  8. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_tasks.py +31 -1
  9. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/LICENSE.md +0 -0
  10. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/setup.cfg +0 -0
  11. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/__init__.py +0 -0
  12. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/bundle.py +0 -0
  13. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/check.py +0 -0
  14. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/cli.py +0 -0
  15. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/config.py +0 -0
  16. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/distribution.py +0 -0
  17. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/doctor.py +0 -0
  18. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/installer.py +0 -0
  19. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/mcp_server.py +0 -0
  20. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompt_session.py +0 -0
  21. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/partials/context-format.md +0 -0
  22. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/partials/output-rules.md +0 -0
  23. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/partials/stack-hints.md +0 -0
  24. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/system/base.md +0 -0
  25. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/api-docs.md +0 -0
  26. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/arch-review.md +0 -0
  27. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/audit.md +0 -0
  28. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/changelog.md +0 -0
  29. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/check.md +0 -0
  30. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/diagrams.md +0 -0
  31. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/flows.md +0 -0
  32. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/init-agent-onboarding.md +0 -0
  33. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/readme.md +0 -0
  34. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/refresh.md +0 -0
  35. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/review.md +0 -0
  36. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/scan.md +0 -0
  37. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/stack-docs.md +0 -0
  38. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/prompts/tasks/version-audit.md +0 -0
  39. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/release_surfaces.json +0 -0
  40. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/release_surfaces.py +0 -0
  41. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/skill_parity.py +0 -0
  42. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner/tasks.py +0 -0
  43. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner.egg-info/dependency_links.txt +0 -0
  44. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner.egg-info/entry_points.txt +0 -0
  45. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner.egg-info/requires.txt +0 -0
  46. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/src/codeforerunner.egg-info/top_level.txt +0 -0
  47. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_bundle.py +0 -0
  48. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_check.py +0 -0
  49. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_check_config_integration.py +0 -0
  50. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_check_versions.py +0 -0
  51. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_cli.py +0 -0
  52. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_config.py +0 -0
  53. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_distribution.py +0 -0
  54. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_doctor.py +0 -0
  55. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_examples.py +0 -0
  56. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_hooks_manifest.py +0 -0
  57. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_inspect_npm_package.py +0 -0
  58. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_installer.py +0 -0
  59. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_mcp_server.py +0 -0
  60. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_package_metadata.py +0 -0
  61. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_prompt_session.py +0 -0
  62. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_release_surfaces.py +0 -0
  63. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_skill_parity.py +0 -0
  64. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_validate_codex_marketplace.py +0 -0
  65. {codeforerunner-0.4.6 → codeforerunner-0.4.8}/tests/test_workflows_yaml.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeforerunner
3
- Version: 0.4.6
3
+ Version: 0.4.8
4
4
  Summary: Model-agnostic repository documentation tooling (prompt-first; thin CLI).
5
5
  Author: Derek Palmer
6
6
  License-Expression: LicenseRef-Codeforerunner-SAL-0.1
@@ -29,7 +29,7 @@ Dynamic: license-file
29
29
 
30
30
  # codeForerunner
31
31
 
32
- [![Socket Badge](https://badge.socket.dev/npm/package/codeforerunner/0.4.6)](https://socket.dev/npm/package/codeforerunner)
32
+ [![Socket Badge](https://badge.socket.dev/npm/package/codeforerunner/0.4.8)](https://socket.dev/npm/package/codeforerunner)
33
33
 
34
34
  Model-agnostic repository documentation tooling. Ships a prompt pack for codebase analysis and doc generation, a thin Python CLI, an MCP server, drift-detection rules that keep docs honest — and native slash-command skills for Claude Code, Codex, Gemini CLI, and other agent CLIs.
35
35
 
@@ -91,10 +91,11 @@ Slash command availability depends on the agent CLI. Claude Code, Codex, and Gem
91
91
 
92
92
  | Flag | Effect |
93
93
  |------|--------|
94
- | `./install.sh` | Auto-detect all agents, prompt global vs local, install all skills |
95
- | `./install.sh --global` | Skip prompt, install to global agent dirs (all projects) |
96
- | `./install.sh --local` | Skip prompt, install to `.claude/skills/` and `.agents/skills/` in cwd |
97
- | `./install.sh --only claude` | Claude Code only |
94
+ | `./install.sh` | Auto-detect agents, prompt for global vs local, prompt which agents to install |
95
+ | `./install.sh --global` | Skip location prompt, install to global agent dirs (all projects) |
96
+ | `./install.sh --local` | Skip location prompt, install to `.claude/skills/` and `.agents/skills/` in cwd |
97
+ | `./install.sh --non-interactive` | Skip all prompts, install globally to all detected agents (useful in CI / curl\|bash) |
98
+ | `./install.sh --only claude` | Claude Code only (skips agent selection prompt) |
98
99
  | `./install.sh --only codex` | Codex only |
99
100
  | `./install.sh --only gemini` | Gemini CLI only |
100
101
  | `./install.sh --dry-run` | Preview, write nothing |
@@ -148,7 +149,7 @@ jobs:
148
149
  runs-on: ubuntu-latest
149
150
  steps:
150
151
  - uses: actions/checkout@v6.0.2
151
- - uses: derek-palmer/codeforerunner@v0.4.6
152
+ - uses: derek-palmer/codeforerunner@v0.4.8
152
153
  with:
153
154
  fail-on-drift: "true" # set "false" to warn-only
154
155
  ```
@@ -2,7 +2,7 @@
2
2
 
3
3
  # codeForerunner
4
4
 
5
- [![Socket Badge](https://badge.socket.dev/npm/package/codeforerunner/0.4.6)](https://socket.dev/npm/package/codeforerunner)
5
+ [![Socket Badge](https://badge.socket.dev/npm/package/codeforerunner/0.4.8)](https://socket.dev/npm/package/codeforerunner)
6
6
 
7
7
  Model-agnostic repository documentation tooling. Ships a prompt pack for codebase analysis and doc generation, a thin Python CLI, an MCP server, drift-detection rules that keep docs honest — and native slash-command skills for Claude Code, Codex, Gemini CLI, and other agent CLIs.
8
8
 
@@ -64,10 +64,11 @@ Slash command availability depends on the agent CLI. Claude Code, Codex, and Gem
64
64
 
65
65
  | Flag | Effect |
66
66
  |------|--------|
67
- | `./install.sh` | Auto-detect all agents, prompt global vs local, install all skills |
68
- | `./install.sh --global` | Skip prompt, install to global agent dirs (all projects) |
69
- | `./install.sh --local` | Skip prompt, install to `.claude/skills/` and `.agents/skills/` in cwd |
70
- | `./install.sh --only claude` | Claude Code only |
67
+ | `./install.sh` | Auto-detect agents, prompt for global vs local, prompt which agents to install |
68
+ | `./install.sh --global` | Skip location prompt, install to global agent dirs (all projects) |
69
+ | `./install.sh --local` | Skip location prompt, install to `.claude/skills/` and `.agents/skills/` in cwd |
70
+ | `./install.sh --non-interactive` | Skip all prompts, install globally to all detected agents (useful in CI / curl\|bash) |
71
+ | `./install.sh --only claude` | Claude Code only (skips agent selection prompt) |
71
72
  | `./install.sh --only codex` | Codex only |
72
73
  | `./install.sh --only gemini` | Gemini CLI only |
73
74
  | `./install.sh --dry-run` | Preview, write nothing |
@@ -121,7 +122,7 @@ jobs:
121
122
  runs-on: ubuntu-latest
122
123
  steps:
123
124
  - uses: actions/checkout@v6.0.2
124
- - uses: derek-palmer/codeforerunner@v0.4.6
125
+ - uses: derek-palmer/codeforerunner@v0.4.8
125
126
  with:
126
127
  fail-on-drift: "true" # set "false" to warn-only
127
128
  ```
@@ -4,7 +4,7 @@ build-backend = "setuptools.build_meta"
4
4
 
5
5
  [project]
6
6
  name = "codeforerunner"
7
- version = "0.4.6"
7
+ version = "0.4.8"
8
8
  description = "Model-agnostic repository documentation tooling (prompt-first; thin CLI)."
9
9
  readme = "README.md"
10
10
  requires-python = ">=3.11"
@@ -0,0 +1,52 @@
1
+ # Task: Surface Documentation and Scan Gaps
2
+
3
+ Reads cached forerunner state and surfaces two categories of gaps for the user to act on:
4
+ 1. **Doc gaps** — STALE or MISSING findings from the check report
5
+ 2. **Scan gaps** — fields the scan could not determine from available evidence
6
+
7
+ Does not generate docs. Routes the user to the right next step.
8
+
9
+ ## Input
10
+
11
+ - `.forerunner/scan.yaml` — cached scan result (check file modification time)
12
+ - `.forerunner/check-report.md` — cached staleness classifications (check file modification time)
13
+
14
+ ## Instructions
15
+
16
+ ### Step 1 — Check cache freshness
17
+
18
+ Read `.forerunner/scan.yaml` and `.forerunner/check-report.md`.
19
+
20
+ If either file is missing: report which file is absent and stop. Ask the user to run `forerunner doc scan` and/or `forerunner doc check` first.
21
+
22
+ If `scan.yaml` is older than 24 hours: warn the user and offer to continue with cached results or re-run scan first.
23
+
24
+ If `check-report.md` is older than `scan.yaml`: warn the user and offer to continue or re-run check first.
25
+
26
+ ### Step 2 — Surface doc gaps
27
+
28
+ Extract all rows from `check-report.md` where status is `STALE` or `MISSING`.
29
+
30
+ If none: report "All documented tasks are CURRENT." Proceed to step 3.
31
+
32
+ Present a summary table and offer: run `/forerunner-refresh` to regenerate all stale/missing docs, or invoke a specific task skill for individual items.
33
+
34
+ ### Step 3 — Surface scan gaps
35
+
36
+ Read the `gaps:` field from `scan.yaml`. If absent or empty: report "No scan gaps detected." Stop.
37
+
38
+ Otherwise, list each gap and ask the user how to fill them:
39
+
40
+ **A) Quick fill** — ask one question per gap and patch `scan.yaml` with user-provided values
41
+ **B) Full grill session** — deeper conversation that also updates `CONTEXT.md` and domain docs (requires `grill-with-docs` skill; fall back to A if not available)
42
+ **C) Skip**
43
+
44
+ For quick fill (A): ask one question per gap in sequence, update the corresponding field in `.forerunner/scan.yaml`, mark as `# user-provided` inline.
45
+
46
+ For grill session (B): invoke `grill-with-docs` with the gap list as the grilling focus.
47
+
48
+ ## Rules
49
+
50
+ - Never run a fresh scan or check automatically. Only read cached files.
51
+ - If `grill-with-docs` is not available when user selects B, fall back to A and inform the user.
52
+ - End with a summary: what was surfaced, what was filled, what remains open.
@@ -25,6 +25,7 @@
25
25
  {"name": "refresh", "scan_exempt": false, "skill_slug": "forerunner-refresh"},
26
26
  {"name": "review", "scan_exempt": false, "skill_slug": "forerunner-review"},
27
27
  {"name": "stack-docs", "scan_exempt": false, "skill_slug": "forerunner-stack-docs"},
28
- {"name": "version-audit", "scan_exempt": false, "skill_slug": "forerunner-version-audit"}
28
+ {"name": "version-audit", "scan_exempt": false, "skill_slug": "forerunner-version-audit"},
29
+ {"name": "gaps", "scan_exempt": true, "skill_slug": "forerunner-gaps"}
29
30
  ]
30
31
  }
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.4
2
2
  Name: codeforerunner
3
- Version: 0.4.6
3
+ Version: 0.4.8
4
4
  Summary: Model-agnostic repository documentation tooling (prompt-first; thin CLI).
5
5
  Author: Derek Palmer
6
6
  License-Expression: LicenseRef-Codeforerunner-SAL-0.1
@@ -29,7 +29,7 @@ Dynamic: license-file
29
29
 
30
30
  # codeForerunner
31
31
 
32
- [![Socket Badge](https://badge.socket.dev/npm/package/codeforerunner/0.4.6)](https://socket.dev/npm/package/codeforerunner)
32
+ [![Socket Badge](https://badge.socket.dev/npm/package/codeforerunner/0.4.8)](https://socket.dev/npm/package/codeforerunner)
33
33
 
34
34
  Model-agnostic repository documentation tooling. Ships a prompt pack for codebase analysis and doc generation, a thin Python CLI, an MCP server, drift-detection rules that keep docs honest — and native slash-command skills for Claude Code, Codex, Gemini CLI, and other agent CLIs.
35
35
 
@@ -91,10 +91,11 @@ Slash command availability depends on the agent CLI. Claude Code, Codex, and Gem
91
91
 
92
92
  | Flag | Effect |
93
93
  |------|--------|
94
- | `./install.sh` | Auto-detect all agents, prompt global vs local, install all skills |
95
- | `./install.sh --global` | Skip prompt, install to global agent dirs (all projects) |
96
- | `./install.sh --local` | Skip prompt, install to `.claude/skills/` and `.agents/skills/` in cwd |
97
- | `./install.sh --only claude` | Claude Code only |
94
+ | `./install.sh` | Auto-detect agents, prompt for global vs local, prompt which agents to install |
95
+ | `./install.sh --global` | Skip location prompt, install to global agent dirs (all projects) |
96
+ | `./install.sh --local` | Skip location prompt, install to `.claude/skills/` and `.agents/skills/` in cwd |
97
+ | `./install.sh --non-interactive` | Skip all prompts, install globally to all detected agents (useful in CI / curl\|bash) |
98
+ | `./install.sh --only claude` | Claude Code only (skips agent selection prompt) |
98
99
  | `./install.sh --only codex` | Codex only |
99
100
  | `./install.sh --only gemini` | Gemini CLI only |
100
101
  | `./install.sh --dry-run` | Preview, write nothing |
@@ -148,7 +149,7 @@ jobs:
148
149
  runs-on: ubuntu-latest
149
150
  steps:
150
151
  - uses: actions/checkout@v6.0.2
151
- - uses: derek-palmer/codeforerunner@v0.4.6
152
+ - uses: derek-palmer/codeforerunner@v0.4.8
152
153
  with:
153
154
  fail-on-drift: "true" # set "false" to warn-only
154
155
  ```
@@ -33,6 +33,7 @@ src/codeforerunner/prompts/tasks/changelog.md
33
33
  src/codeforerunner/prompts/tasks/check.md
34
34
  src/codeforerunner/prompts/tasks/diagrams.md
35
35
  src/codeforerunner/prompts/tasks/flows.md
36
+ src/codeforerunner/prompts/tasks/gaps.md
36
37
  src/codeforerunner/prompts/tasks/init-agent-onboarding.md
37
38
  src/codeforerunner/prompts/tasks/readme.md
38
39
  src/codeforerunner/prompts/tasks/refresh.md
@@ -33,7 +33,7 @@ def test_get_unknown_raises():
33
33
 
34
34
 
35
35
  def test_scan_exempt_names():
36
- assert tasks.scan_exempt_names() == {"scan", "init-agent-onboarding"}
36
+ assert tasks.scan_exempt_names() == {"scan", "init-agent-onboarding", "gaps"}
37
37
 
38
38
 
39
39
  def test_refresh_tasks_ordered():
@@ -75,6 +75,36 @@ def test_cli_rejects_unregistered_task(tmp_path, capsys):
75
75
  assert "unknown task" in capsys.readouterr().err
76
76
 
77
77
 
78
+ def test_gaps_task_registered():
79
+ t = tasks.get("gaps")
80
+ assert t.scan_exempt is True
81
+ assert t.skill_slug == "forerunner-gaps"
82
+
83
+
84
+ def test_gaps_excluded_from_refresh_sequence():
85
+ names = [t.name for t in tasks.refresh_tasks()]
86
+ assert "gaps" not in names
87
+
88
+
89
+ def test_gaps_installable_slug_present():
90
+ assert "forerunner-gaps" in tasks.installable_slugs()
91
+
92
+
93
+ def test_gaps_skill_files_exist():
94
+ from pathlib import Path
95
+ root = Path(__file__).resolve().parent.parent
96
+ assert (root / "skills" / "forerunner-gaps" / "SKILL.md").is_file()
97
+ assert (root / "plugins" / "codeforerunner" / "skills" / "forerunner-gaps" / "SKILL.md").is_file()
98
+
99
+
100
+ def test_gaps_skill_copies_in_sync():
101
+ from pathlib import Path
102
+ root = Path(__file__).resolve().parent.parent
103
+ installed = (root / "skills" / "forerunner-gaps" / "SKILL.md").read_text(encoding="utf-8")
104
+ plugin = (root / "plugins" / "codeforerunner" / "skills" / "forerunner-gaps" / "SKILL.md").read_text(encoding="utf-8")
105
+ assert installed == plugin
106
+
107
+
78
108
  def test_mcp_tools_list_matches_registry():
79
109
  from codeforerunner.mcp_server import _tools
80
110
  import codeforerunner
File without changes