@jaybeeuu/agent-cortex 1.41.0 → 1.42.0

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 (71) hide show
  1. package/.github/workflows/ci.yml +5 -5
  2. package/CHANGELOG.md +60 -0
  3. package/agents/ralph-plan/agent.md +7 -3
  4. package/agents/ralph-plan.agent.md +7 -3
  5. package/claude-extras/scripts/statusline-command.sh +0 -0
  6. package/docs/ideas/ban-content-assertion-tests.md +3 -1
  7. package/docs/ideas/dedicated-review-tests-skill.md +71 -0
  8. package/docs/ideas/unify-the-ticket-and-task-decomposition-workflows.md +71 -0
  9. package/package.json +5 -2
  10. package/plugin.json +1 -1
  11. package/scripts/install-instructions.sh +0 -0
  12. package/scripts/sync-plugin-version.sh +0 -0
  13. package/skills/engineering/grill-with-docs/SKILL.md +3 -2
  14. package/skills/engineering/improve-codebase-architecture/REFERENCE.md +5 -0
  15. package/skills/engineering/improve-codebase-architecture/SKILL.md +2 -1
  16. package/skills/planning/create-task/REFERENCE.md +1 -1
  17. package/skills/planning/create-task/SKILL.md +9 -4
  18. package/skills/planning/create-task/scripts/create-chores.ts +8 -1
  19. package/skills/planning/prd-to-tasks/REFERENCE.md +2 -2
  20. package/skills/planning/prd-to-tasks/SKILL.md +9 -4
  21. package/skills/planning/request-refactor-plan/FORMAT.md +5 -0
  22. package/skills/planning/request-refactor-plan/SKILL.md +3 -2
  23. package/skills/planning/spec-to-tickets/REFERENCE.md +82 -0
  24. package/skills/planning/spec-to-tickets/SKILL.md +143 -0
  25. package/skills/planning/write-a-prd/FORMAT.md +6 -0
  26. package/skills/planning/write-a-prd/SKILL.md +9 -6
  27. package/skills/planning/write-a-ticket/EXAMPLES.md +133 -0
  28. package/skills/planning/write-a-ticket/SKILL.md +77 -59
  29. package/skills/productivity/bd-tool/SKILL.md +27 -2
  30. package/skills/productivity/grill-me/SKILL.md +11 -0
  31. package/skills/review/review-security/scripts/install-gitleaks.sh +0 -0
  32. package/skills/style/style-code/SKILL.md +4 -0
  33. package/skills/style/style-tests/EXAMPLES.md +548 -0
  34. package/skills/style/style-tests/SKILL.md +34 -35
  35. package/skills/workflow/plan/SKILL.md +20 -8
  36. package/skills/workflow/ralph/REFERENCE.md +3 -1
  37. package/skills/workflow/run-pipeline-stage/SKILL.md +6 -1
  38. package/skills/workflow/using-agent-skills/SKILL.md +1 -0
  39. package/test/create-chores.test.mjs +85 -0
  40. package/test/fake-bd.test.mjs +72 -0
  41. package/test/helpers/fake-bd.mjs +87 -0
  42. package/extensions/agent-guardrails/node_modules/.bin/pi +0 -21
  43. package/extensions/agent-guardrails/node_modules/.bin/tsc +0 -21
  44. package/extensions/agent-guardrails/node_modules/.bin/tsserver +0 -21
  45. package/extensions/agent-guardrails/node_modules/.bin/tsx +0 -21
  46. package/extensions/agent-modes/node_modules/.bin/pi +0 -21
  47. package/extensions/agent-modes/node_modules/.bin/tsc +0 -21
  48. package/extensions/agent-modes/node_modules/.bin/tsserver +0 -21
  49. package/extensions/agent-modes/node_modules/.bin/tsx +0 -21
  50. package/extensions/skill-stats/node_modules/.bin/pi +0 -21
  51. package/extensions/skill-stats/node_modules/.bin/tsc +0 -21
  52. package/extensions/skill-stats/node_modules/.bin/tsserver +0 -21
  53. package/extensions/skill-stats/node_modules/.bin/tsx +0 -21
  54. package/extensions/skill-stats/pnpm-lock.yaml +0 -329
  55. package/extensions/subagent/node_modules/.bin/pi +0 -21
  56. package/extensions/subagent/node_modules/.bin/pi-ai +0 -21
  57. package/extensions/subagent/node_modules/.bin/tsc +0 -21
  58. package/extensions/subagent/node_modules/.bin/tsserver +0 -21
  59. package/extensions/subagent/node_modules/.bin/tsx +0 -21
  60. package/skills/planning/create-task/scripts/node_modules/.bin/tsc +0 -21
  61. package/skills/planning/create-task/scripts/node_modules/.bin/tsserver +0 -21
  62. package/skills/planning/create-task/scripts/node_modules/.bin/tsx +0 -21
  63. package/skills/planning/create-task/scripts/pnpm-lock.yaml +0 -342
  64. package/skills/productivity/validate-agent-dir/scripts/node_modules/.bin/tsc +0 -21
  65. package/skills/productivity/validate-agent-dir/scripts/node_modules/.bin/tsserver +0 -21
  66. package/skills/productivity/validate-agent-dir/scripts/node_modules/.bin/tsx +0 -21
  67. package/skills/productivity/validate-agent-dir/scripts/pnpm-lock.yaml +0 -329
  68. package/skills/workflow/run-pipeline-stage/scripts/node_modules/.bin/tsc +0 -21
  69. package/skills/workflow/run-pipeline-stage/scripts/node_modules/.bin/tsserver +0 -21
  70. package/skills/workflow/run-pipeline-stage/scripts/node_modules/.bin/tsx +0 -21
  71. package/skills/workflow/run-pipeline-stage/scripts/pnpm-lock.yaml +0 -342
@@ -22,7 +22,7 @@ jobs:
22
22
  - name: Setup pnpm
23
23
  uses: pnpm/action-setup@v4
24
24
  with:
25
- version: 10
25
+ version: 12
26
26
  run_install: false
27
27
 
28
28
  - name: Cache pnpm store
@@ -103,7 +103,7 @@ jobs:
103
103
  - name: Setup pnpm
104
104
  uses: pnpm/action-setup@v4
105
105
  with:
106
- version: 10
106
+ version: 12
107
107
  run_install: false
108
108
 
109
109
  - name: Install dependencies
@@ -136,7 +136,7 @@ jobs:
136
136
  - name: Setup pnpm
137
137
  uses: pnpm/action-setup@v4
138
138
  with:
139
- version: 10
139
+ version: 12
140
140
  run_install: false
141
141
 
142
142
  - name: Install dependencies
@@ -169,7 +169,7 @@ jobs:
169
169
  - name: Setup pnpm
170
170
  uses: pnpm/action-setup@v4
171
171
  with:
172
- version: 10
172
+ version: 12
173
173
  run_install: false
174
174
 
175
175
  - name: Install dependencies
@@ -257,7 +257,7 @@ jobs:
257
257
  - name: Setup pnpm
258
258
  uses: pnpm/action-setup@v4
259
259
  with:
260
- version: 10
260
+ version: 12
261
261
  run_install: false
262
262
 
263
263
  - name: Install dependencies
package/CHANGELOG.md CHANGED
@@ -1,5 +1,65 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.42.0
4
+
5
+ ### Minor Changes
6
+
7
+ - 3da7e6e: Bead quality gate: required sections now drive the planning interview, and every substantive
8
+ bead is validated at creation with `bd create --validate` and reviewed with `bd lint`.
9
+
10
+ - The type's required sections are documented once in `bd-tool` and referenced by the
11
+ interview-driving skills (`write-a-prd`, `request-refactor-plan`, `prd-to-tasks`, `plan`,
12
+ `ralph-plan`) and the grilling primitives (`grill-me`, `grill-with-docs`). Planning is complete
13
+ only when there is enough agreed detail to fill every required section, and agents must confirm
14
+ inferred answers with the human instead of inventing them.
15
+ - Substantive `bd create` calls carry `--validate`; each bead-creating flow runs a scoped
16
+ `bd lint` review and fixes flagged beads.
17
+ - Templates now satisfy the contract: PRD and `prd-to-tasks` epics carry `## Success Criteria`;
18
+ the refactor and architecture templates, the PR gate, and the ralph-plan planning gates carry
19
+ `## Acceptance Criteria`. Chore beads stay exempt and instead point at the parent requirements
20
+ bead.
21
+ - The stateful fake `bd` test helper models `--validate`, with tests covering rejection of a
22
+ section-less bead and the PR gate's validated status.
23
+
24
+ - fdf8ead: Add `spec-to-tickets` for turning a PRD/RFC/spec into an agreed ticket map, then drafting each ticket body with the human in dependency order. Tighten `write-a-ticket` to a Context/Scope/Changes/Acceptance body with length budgets and a no-open-questions rule.
25
+
26
+ ## 1.41.1
27
+
28
+ ### Patch Changes
29
+
30
+ - 3991199: Fix the PR gate bead created by `create-task`'s `create-chores.ts` carrying two conflicting
31
+ `implementation-type` labels. The gate declares `implementation-type:hitl` explicitly, but
32
+ `bd create --parent` also inherited the parent's `implementation-type:afk`, leaving the one
33
+ bead whose job is to stop automated merges labelled as autonomous work. The gate now passes
34
+ `--no-inherit-labels`; stage chores keep inheriting `:afk` intentionally. A regression test
35
+ drives the script against a stateful fake `bd` and asserts the gate's label set exactly.
36
+ - c37b50a: Add a command/query-separation rule to `style-code`: a function either returns a value or
37
+ changes state — never both. Commands mutate and return nothing; queries are pure and return a
38
+ value. Two carve-outs: a command that can fail may return a typed result (`Result<T, E>`) rather
39
+ than throw, and a fluent builder may return `this` to chain. Returning data about a mutation —
40
+ the saved row, a count, the previous value — is no longer permitted. The existing result-object
41
+ guidance is unchanged.
42
+ - c29fe79: Split the `style-tests` example catalogue into a new `EXAMPLES.md` and broaden it into
43
+ `❌ Instead` / `✅ Write` code pairs across eight categories: behaviour over implementation,
44
+ test data (vital visible / incidental hidden), mocking at boundaries, targeted assertions,
45
+ structure and naming, determinism and async, isolation, and content assertions. Red Flags gains
46
+ the recurring anti-patterns — assertion-free and tautological tests, expected values recomputed
47
+ with the implementation's own logic, `.only`/focus left in, sleeps and real clocks, unawaited
48
+ promises, and log-output assertions — and the verification checklist gains matching gates.
49
+ `SKILL.md` drops back to a lean 146 lines so the principles still load with the skill while the
50
+ deepened examples live behind progressive disclosure. The `createSomething` factory example is
51
+ corrected: it had a missing comma (a syntax error), asserted `prop: 0` while overriding with
52
+ `prop: 1`, and reached for `DeepPartial` where `Partial` reads better for a flat type.
53
+ - c29fe79: Add integration and e2e layer conventions to `style-tests`. A new `## Integration and e2e`
54
+ section in `EXAMPLES.md` covers six sub-topics with `❌ Instead` / `✅ Write` pairs: what each
55
+ layer proves, real collaborators over fakes, isolation at the integration layer, bounded async
56
+ deadlines over sleeps, determinism at the edges, and what e2e should prove. `SKILL.md`
57
+ generalises the AWS-specific "Integration and e2e are realistic" principle to real-service
58
+ guidance, defines what unit, integration, and e2e each prove in workflow step 1, and adds two
59
+ Red Flags rows — an "integration" test that mocks the collaborator it exists to integrate with,
60
+ and e2e re-testing business rules already covered by unit tests — plus two matching checklist
61
+ items.
62
+
3
63
  ## 1.41.0
4
64
 
5
65
  ### Minor Changes
@@ -39,7 +39,7 @@ Dispatch parallel **explore** sub-agents — one per independent research area.
39
39
  - If the task requires designing a new module API or interface, invoke **design-an-interface** to generate and compare options. Write the output to `.agent-cortex/working-docs/interface-design.md`.
40
40
 
41
41
  ### 4. Grill the user
42
- After reviewing exploration findings, invoke the **grill-me** skill to surface and resolve outstanding design questions. Keep grilling until there are no open questions that would block implementation. Record answers in `.agent-cortex/working-docs/decisions.md`.
42
+ After reviewing exploration findings, invoke the **grill-me** skill to surface and resolve outstanding design questions. Keep grilling until there are no open questions that would block implementation. The grill is complete only when there is enough agreed detail to fill every required section of the target bead type (task/feature → `## Acceptance Criteria`; epic → `## Success Criteria`; see the beads skill). Never invent an answer — surface it as an assumption and confirm it. Record answers in `.agent-cortex/working-docs/decisions.md`.
43
43
 
44
44
  ### 5. Write the plan
45
45
  Update the top-level bead's `design` field with a high-level implementation plan. Invoke the **style-comms** skill first so the plan matches the project's communication style.
@@ -56,14 +56,18 @@ For each new feature bead and each new task bead, create a HITL planning gate be
56
56
  Every planning gate description must be cold-start-ready so another person can pick it up without prior chat context. Include all of: (1) what is being built and why, (2) decisions already made, (3) open questions/risks, and (4) references (bead IDs, files, or docs) used during planning.
57
57
 
58
58
  ```bash
59
- gate_id=$(bd create "Plan: <feature title>" --type task --description "<planning context, decisions, open questions, and references>")
59
+ gate_id=$(bd create "Plan: <feature title>" --type task --description "<planning context, decisions, open questions, and references>
60
+
61
+ ## Acceptance Criteria
62
+
63
+ - [ ] User confirms planning is sufficient for this feature/task." --validate)
60
64
  bd tag <planning-gate-id> implementation-type:hitl
61
65
  bd dep add <feature-or-task-id> <planning-gate-id> # feature/task depends on planning gate (gate blocks implementation)
62
66
  ```
63
67
 
64
68
  Do not close planning gates in bulk. Only close a gate after the user explicitly confirms that exact feature/task is ready to implement; leave all unconfirmed gates open and blocking.
65
69
 
66
- Before handing off, ensure every bead created in this step carries an `implementation-type` label — check `bd label list <id>` yourself. Do not spawn `classify-bead` here: planning gates were tagged inline above and `create-task` classifies its beads internally. Only invoke it for a bead that genuinely lacks both the label and a `## Type` field.
70
+ Before handing off, ensure every bead created in this step carries an `implementation-type` label — check `bd label list <id>` yourself. Do not spawn `classify-bead` here: planning gates were tagged inline above and `create-task` classifies its beads internally. Only invoke it for a bead that genuinely lacks both the label and a `## Type` field. Then run `bd lint <id>` for every bead created in this step and fix any missing sections before handoff.
67
71
 
68
72
  Tag every bead created in this step with `workflow:ralph`:
69
73
 
@@ -47,7 +47,7 @@ Dispatch parallel **explore** sub-agents — one per independent research area.
47
47
  - If the task requires designing a new module API or interface, invoke **design-an-interface** to generate and compare options. Write the output to `.agent-cortex/working-docs/interface-design.md`.
48
48
 
49
49
  ### 4. Grill the user
50
- After reviewing exploration findings, invoke the **grill-me** skill to surface and resolve outstanding design questions. Keep grilling until there are no open questions that would block implementation. Record answers in `.agent-cortex/working-docs/decisions.md`.
50
+ After reviewing exploration findings, invoke the **grill-me** skill to surface and resolve outstanding design questions. Keep grilling until there are no open questions that would block implementation. The grill is complete only when there is enough agreed detail to fill every required section of the target bead type (task/feature → `## Acceptance Criteria`; epic → `## Success Criteria`; see the beads skill). Never invent an answer — surface it as an assumption and confirm it. Record answers in `.agent-cortex/working-docs/decisions.md`.
51
51
 
52
52
  ### 5. Write the plan
53
53
  Update the top-level bead's `design` field with a high-level implementation plan. Invoke the **style-comms** skill first so the plan matches the project's communication style.
@@ -64,14 +64,18 @@ For each new feature bead and each new task bead, create a HITL planning gate be
64
64
  Every planning gate description must be cold-start-ready so another person can pick it up without prior chat context. Include all of: (1) what is being built and why, (2) decisions already made, (3) open questions/risks, and (4) references (bead IDs, files, or docs) used during planning.
65
65
 
66
66
  ```bash
67
- gate_id=$(bd create "Plan: <feature title>" --type task --description "<planning context, decisions, open questions, and references>")
67
+ gate_id=$(bd create "Plan: <feature title>" --type task --description "<planning context, decisions, open questions, and references>
68
+
69
+ ## Acceptance Criteria
70
+
71
+ - [ ] User confirms planning is sufficient for this feature/task." --validate)
68
72
  bd tag <planning-gate-id> implementation-type:hitl
69
73
  bd dep add <feature-or-task-id> <planning-gate-id> # feature/task depends on planning gate (gate blocks implementation)
70
74
  ```
71
75
 
72
76
  Do not close planning gates in bulk. Only close a gate after the user explicitly confirms that exact feature/task is ready to implement; leave all unconfirmed gates open and blocking.
73
77
 
74
- Before handing off, ensure every bead created in this step carries an `implementation-type` label — check `bd label list <id>` yourself. Do not spawn `classify-bead` here: planning gates were tagged inline above and `create-task` classifies its beads internally. Only invoke it for a bead that genuinely lacks both the label and a `## Type` field.
78
+ Before handing off, ensure every bead created in this step carries an `implementation-type` label — check `bd label list <id>` yourself. Do not spawn `classify-bead` here: planning gates were tagged inline above and `create-task` classifies its beads internally. Only invoke it for a bead that genuinely lacks both the label and a `## Type` field. Then run `bd lint <id>` for every bead created in this step and fix any missing sections before handoff.
75
79
 
76
80
  Tag every bead created in this step with `workflow:ralph`:
77
81
 
File without changes
@@ -1,7 +1,9 @@
1
1
  # Idea: ban-content-assertion-tests
2
2
 
3
3
  ## Status
4
- Backlog idea (not implementation-ready) — priority P1 (high)
4
+ Filed as epic `agnt-ctx-h9gt` (2026-10-06) — awaiting `prd-to-tasks`. Slice 1 (the
5
+ `style-tests` ban) shipped earlier in `daa77c8` (PR #143); this epic covers the review-gate
6
+ enforcement and the skill sweep.
5
7
 
6
8
  ## Created
7
9
  2026-08-30
@@ -0,0 +1,71 @@
1
+ # Idea: Dedicated review-tests skill
2
+
3
+ ## Status
4
+ Backlog idea (not implementation-ready) — priority P2 (moderate), timing: follows `agnt-ctx-h9gt`
5
+
6
+ ## Created
7
+ 2026-10-06
8
+
9
+ ## Problem
10
+ Test review has no home of its own in the ralph pipeline. The review stage invokes
11
+ `review-security` for a dedicated security pass, then falls back to `style-code` and
12
+ `style-tests` for everything else. `style-tests` is a *writing* skill — it states conventions
13
+ before tests are authored — so a reviewer reading it has to invert authoring guidance into
14
+ review findings. The result is that test defects are caught by whatever the reviewer happens to
15
+ notice rather than by an explicit checklist, and each new class of defect (the content-assertion
16
+ ban being the first) has to be bolted onto the review template individually.
17
+
18
+ ## Who benefits
19
+ - **The author**, who stops triaging test defects that a structured review should have caught.
20
+ - **Ralph stage runners**, who get an explicit finding checklist instead of inferring one from a
21
+ writing-conventions skill.
22
+ - **Future skill authors**, who get one place to add a test-review rule rather than editing the
23
+ review template, the review playbook, and `style-tests` in lockstep.
24
+
25
+ ## Proposed outcome
26
+ A `review-tests` skill — a peer to `review-security` — that specifies what a reviewer checks in
27
+ a test suite: assertion quality (does each assertion prove the behaviour under test),
28
+ mock discipline (boundaries only, never internals), test-data construction (vital data inline,
29
+ fresh per test, no shared mutable fixtures), determinism (no sleeps, no real clocks, every async
30
+ interaction awaited), and coverage gaps against the task's stated behaviours.
31
+
32
+ Broad scope, narrow use: the skill is generic test-review guidance, invoked as a stage step by
33
+ the ralph review playbook (and available to a human reviewer or a `git-workflow` PR review).
34
+ Once it exists, the content-assertion check added by `agnt-ctx-h9gt` becomes one row inside it
35
+ rather than a standing instruction in the review template.
36
+
37
+ ## Validity check
38
+ - Evidence we already have: the review stage already delegates to skills for every other
39
+ concern (`review-security` for security, `style-code` for code shape, `style-documentation`
40
+ for docs) — test review is the gap in an otherwise uniform pattern. The content-assertion
41
+ ban was bolted onto the review template precisely because no skill owned test review.
42
+ - Riskiest assumption: that a *review* checklist is meaningfully different from `style-tests`
43
+ read critically. If a reviewer can derive the findings from the existing authoring skill with
44
+ no loss, this becomes a second statement of the same rules — exactly the two-homes problem
45
+ `agnt-ctx-h9gt` avoids by keeping `style-tests` canonical.
46
+ - What would invalidate this idea: if `agnt-ctx-h9gt`'s review-gate change turns out to be
47
+ sufficient — if the review stage, with the content-assertion check in hand, stops missing
48
+ test defects — then the dedicated skill earns nothing and should be dropped.
49
+
50
+ ## Constraints
51
+ - `style-tests` stays the canonical statement of test conventions; `review-tests` must cite it
52
+ and add only the reviewer's framing, or the two will drift.
53
+ - Must not duplicate `review-security`'s ground or re-run the test suite (that is the verify
54
+ stage's job).
55
+ - Invoked from the review playbook, so it must be cheap to load — no expansion of the review
56
+ stage's token budget beyond one skill read.
57
+ - Follows `agnt-ctx-h9gt`; the content-assertion rule must not be restated in a second place
58
+ until this skill exists to hold it.
59
+
60
+ ## Next validation step
61
+ After `agnt-ctx-h9gt` has run through the pipeline at least once, collect the test-related
62
+ findings its review stage actually produces across a few PRs. If reviewers keep requesting
63
+ changes on test grounds that the template does not name, that list is the skill's first
64
+ checklist and the idea is confirmed; if the template covers them, drop the idea.
65
+
66
+ ## Notes
67
+ Floated by the author on 2026-10-06 while scoping `agnt-ctx-h9gt`. Stance locked in the
68
+ interview: broad scope (generic test review, not a pipeline-specific gate), used in the ralph
69
+ pipeline, priority P2 with the trigger being `agnt-ctx-h9gt`'s real-world review findings.
70
+ Deliberately kept as an idea rather than folded into `agnt-ctx-h9gt` so it passes the same
71
+ validity check as every other backlog entry.
@@ -0,0 +1,71 @@
1
+ # Idea: Unify the ticket and task decomposition workflows
2
+
3
+ ## Status
4
+ Backlog idea (not implementation-ready)
5
+
6
+ ## Created
7
+ 2026-10-13
8
+
9
+ ## Problem
10
+ The planning skills assume a fixed split between tickets and tasks, and implement
11
+ decomposition in three places that do not agree:
12
+
13
+ - `prd-to-tasks` slices a PRD into epics and task beads, then expands each task through
14
+ `create-task` into pipeline chore beads for ralph.
15
+ - `spec-to-tickets` slices a spec into a ticket map, drafts bodies, and creates tickets in
16
+ a tracker (Jira, GitLab, GitHub, or beads).
17
+ - `plan` Phase 2 re-implements the slicing logic inline rather than delegating.
18
+
19
+ There is no model for a ticket that itself needs breaking into tasks, and no single place
20
+ that owns decomposition. Which skill to use depends on the tracker rather than on the work.
21
+
22
+ ## Who benefits
23
+ The author, and any agent running the planning skills. One decomposition path replaces
24
+ three overlapping ones, and a ticket in any tracker can be created and then broken into
25
+ tasks without switching skills.
26
+
27
+ ## Proposed outcome
28
+ A single coherent model in which a ticket — in any tracker, including beads — can be
29
+ created and then decomposed into tasks, with the tracker acting as an adapter rather than
30
+ defining a separate skill. The exact shape is deliberately undecided; this record captures
31
+ the problem, not a design.
32
+
33
+ ## Validity check
34
+ - Evidence we already have: three implementations of spec-to-units slicing (`plan` Phase 2
35
+ inline, `prd-to-tasks`, `spec-to-tickets`); `prd-to-tasks` has eight dependents plus a
36
+ generated agent file; the only substantive difference between the two decomposition
37
+ skills is the creation contract — `create-task` expands AFK tasks into ralph's chore
38
+ tree, while `spec-to-tickets` uses a generic tracker adapter.
39
+ - Riskiest assumption: not yet identified — this needs a thinking-through pass. Candidates
40
+ to test: (a) the ticket/task split can be unified without losing ralph's execution
41
+ contract; (b) the refactor is affordable given its blast radius; (c) the duplication is
42
+ causing enough harm to justify it at all.
43
+ - What would invalidate this idea: if ralph's requirements — chore-tree expansion via
44
+ `create-chores.ts`/`pipeline.json`, epic branches, AFK/HITL classification — cannot be
45
+ expressed as a tracker adapter behind one slicing skill, then the split is load-bearing
46
+ and should stay. It would also be invalidated if the duplication never produces concrete
47
+ drift.
48
+
49
+ ## Constraints
50
+ - Ralph's execution contract is fixed and must keep working: chore expansion, the epic PR
51
+ flow, and AFK/HITL classification.
52
+ - Open beads `agnt-ctx-s5xd.4` and `agnt-ctx-s5xd.4.4` are already rewriting
53
+ `prd-to-tasks` and `plan`'s tagging for the `execution:` label model. Any refactor has to
54
+ land after that epic or it will collide.
55
+ - Skills target ~150 lines, so a unified decomposition skill would need its tracker
56
+ adapters and formats split into support files.
57
+
58
+ ## Next validation step
59
+ Once the s5xd two-axis epic lands, enumerate exactly what `create-task` and ralph require
60
+ from a decomposition — classification, chore tree, epic hierarchy, labels — and test
61
+ whether each can be expressed as a tracker adapter behind one slicing skill. That is the
62
+ cheapest step that would firm up or kill the idea.
63
+
64
+ ## Notes
65
+ - The open question at the heart of it: are "ticket" and "task" the same thing at different
66
+ granularities, or genuinely different things? Related: is a ticket a ralph task, or
67
+ something a ralph task is created from?
68
+ - Priority P3 by the author's call — it blocks other planning work rather than being
69
+ polish.
70
+ - Filed during the `write-a-ticket` / `spec-to-tickets` work (bead `agnt-ctx-vgzj`), where
71
+ the overlap first became concrete.
package/package.json CHANGED
@@ -1,12 +1,15 @@
1
1
  {
2
2
  "name": "@jaybeeuu/agent-cortex",
3
- "version": "1.41.0",
3
+ "version": "1.42.0",
4
4
  "description": "Personal PI package with custom agents, skills, and extensions",
5
5
  "keywords": [
6
6
  "pi-package"
7
7
  ],
8
8
  "license": "MIT",
9
- "repository": "https://github.com/jaybeeuu/agent-cortex",
9
+ "repository": {
10
+ "type": "git",
11
+ "url": "https://github.com/jaybeeuu/agent-cortex"
12
+ },
10
13
  "bin": {
11
14
  "agent-cortex": "./bin/agent-cortex.mjs"
12
15
  },
package/plugin.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "agent-cortex",
3
3
  "description": "Personal Copilot CLI plugin with custom agents and skills",
4
- "version": "1.41.0",
4
+ "version": "1.42.0",
5
5
  "author": {
6
6
  "name": "jaybeeuu"
7
7
  },
File without changes
File without changes
@@ -27,7 +27,7 @@ description: "Grilling session that challenges your plan against the existing do
27
27
  5. **Cross-reference with code.** When the user states how something works, check whether the code agrees. Surface contradictions the moment you find them.
28
28
  6. **Update `CONTEXT.md` inline.** When a term resolves, write the entry right there — do not batch. Keep it a pure glossary: no implementation details, no specs, no scratch notes. Entry format and file-discovery rules live in `REFERENCE.md`.
29
29
  7. **Offer ADRs sparingly.** Propose an ADR only when all three hold: hard to reverse, surprising without context, and the result of a real trade-off. If any is missing, skip it. ADR format lives in `REFERENCE.md`.
30
- 8. **Close when shared understanding is reached.** Confirm every design-tree branch is resolved or explicitly deferred, and that the glossary diff captures the session's new language.
30
+ 8. **Close when shared understanding is reached.** Confirm every design-tree branch is resolved or explicitly deferred, that the glossary diff captures the session's new language, and — when the session feeds a bead — that there is enough agreed detail to fill every required section of the target bead type (see `bd-tool` → Required sections). Never invent section content; surface assumptions and confirm them.
31
31
 
32
32
  ## Red Flags
33
33
 
@@ -88,4 +88,5 @@ which voids an order before fulfilment. See cancellation.
88
88
  - [ ] Terminology conflicts and vague terms called out the moment they appeared
89
89
  - [ ] Claims cross-referenced against code; contradictions surfaced
90
90
  - [ ] ADRs offered only when all three criteria held (offering none is a valid outcome)
91
- - [ ] All design-tree branches resolved or explicitly deferred before closing
91
+ - [ ] All design-tree branches resolved or explicitly deferred before closing
92
+ - [ ] When feeding a bead, enough agreed detail to fill every required section; no fabricated answers
@@ -43,6 +43,11 @@ Describe the architectural friction:
43
43
  - What integration risk exists in the seams between them
44
44
  - Why this makes the codebase harder to navigate and maintain
45
45
 
46
+ ## Acceptance Criteria
47
+
48
+ - [ ] <verifiable outcome 1>
49
+ - [ ] <verifiable outcome 2>
50
+
46
51
  ## Proposed Interface
47
52
 
48
53
  The chosen interface design:
@@ -43,7 +43,7 @@ A **deep module** (John Ousterhout, "A Philosophy of Software Design") has a sma
43
43
 
44
44
  6. **User picks an interface** (or accepts the recommendation).
45
45
 
46
- 7. **Create the refactor bead.** Run the `create-task` skill with a concise title, the description from the template in [REFERENCE.md](REFERENCE.md), and priority P2. Always use `create-task` — never `bd create` directly — because it classifies the bead and expands AFK work into pipeline stages ralph can execute. Do not ask the user to review before creating; share the bead ID.
46
+ 7. **Create the refactor bead.** Run the `create-task` skill with a concise title, the description from the template in [REFERENCE.md](REFERENCE.md), and priority P2. The template's `## Acceptance Criteria` is required (enforced by `create-task`'s `--validate`) and must reflect outcomes the user agreed, not assumptions. Always use `create-task` — never `bd create` directly — because it classifies the bead and expands AFK work into pipeline stages ralph can execute. Do not ask the user to review before creating; share the bead ID.
47
47
 
48
48
  ## Red Flags
49
49
 
@@ -95,5 +95,6 @@ Output: numbered deepening candidates (cluster, coupling, dependency category, t
95
95
  - [ ] At least two radically different designs, each with signature, usage example, hidden complexity, dependency strategy, and trade-offs
96
96
  - [ ] Recommendation given in prose, with a hybrid proposed where elements combine well
97
97
  - [ ] Refactor bead created via `create-task` at P2 using the REFERENCE.md description template
98
+ - [ ] Description carries agreed `## Acceptance Criteria`; the bead lints clean
98
99
  - [ ] Bead ID reported and no review gate imposed before creation
99
100
  - [ ] No unrelated areas explored or refactors proposed outside the chosen candidate
@@ -24,7 +24,7 @@ One per stage in `pipeline.json` (currently `code`, `verify`, `review`, `documen
24
24
 
25
25
  - **Type**: `task`
26
26
  - **Title**: `[<parent-id>] PR Review and Merge`
27
- - **Labels**: `implementation-type:hitl`, `lifecycle:feature-pr`
27
+ - **Labels**: `implementation-type:hitl`, `lifecycle:feature-pr` — exactly one `implementation-type` label. The gate declares its own labels, so the script passes `--no-inherit-labels` and it never picks up the parent's `implementation-type:afk`. Stage chores do **not** opt out; they keep inheriting `:afk`.
28
28
  - **Dependencies**: `parent-child` to the parent bead; `blocks` on the final document stage chore (`document`, falling back to the last stage in `pipeline.json`).
29
29
  - **Purpose**: human review of the agent PR (agent branch → feature branch) before the feature closes.
30
30
 
@@ -5,7 +5,7 @@ description: Create a task bead, classify it as AFK or HITL, and if AFK expand i
5
5
 
6
6
  # Create Task
7
7
 
8
- Turn a piece of work into a tracked bead, classify it for autonomous (AFK) or human-in-the-loop (HITL) execution, and — when AFK — expand it into the standard pipeline: one chore bead per stage plus a HITL PR gate task so a human always reviews the finished branch. Parameters: `title` (required), `description` (required), `priority` (0–3, default 2), `parent` (epic bead ID, optional — sets a `parent-child` dependency).
8
+ Turn a piece of work into a tracked bead, classify it for autonomous (AFK) or human-in-the-loop (HITL) execution, and — when AFK — expand it into the standard pipeline: one chore bead per stage plus a HITL PR gate task so a human always reviews the finished branch. Parameters: `title` (required), `description` (required), `priority` (0–3, default 2), `parent` (epic bead ID, optional — sets a `parent-child` dependency). The description must carry the task's required section — `## Acceptance Criteria` — which `--validate` enforces; fill it from agreed answers, not assumptions (see `bd-tool` → Required sections).
9
9
 
10
10
  ## When to use
11
11
 
@@ -21,10 +21,13 @@ Turn a piece of work into a tracked bead, classify it for autonomous (AFK) or hu
21
21
 
22
22
  ## Workflow
23
23
 
24
- 1. **Create the parent bead.**
24
+ 1. **Create the parent bead.** The description must contain the task's required section —
25
+ `## Acceptance Criteria` — or `--validate` rejects creation. Fill it from agreed answers, not
26
+ assumptions (see `bd-tool` → Required sections).
25
27
 
26
28
  ```bash
27
- bd create "<title>" --description "<description>" --priority <priority>
29
+ bd create "<title>" --description "<description>" --priority <priority> --validate
30
+ bd lint <new-id>
28
31
  ```
29
32
 
30
33
  If a `parent` epic was provided, record the dependency:
@@ -65,6 +68,7 @@ Turn a piece of work into a tracked bead, classify it for autonomous (AFK) or hu
65
68
 
66
69
  ## Red Flags
67
70
 
71
+ - **Filling acceptance criteria with assumptions.** Fabricated criteria pass `--validate` but mislead the pipeline. The description is the interview's output — confirm it with the human instead.
68
72
  - **Running the script from the wrong directory.** Chores land in whatever `.beads` tree `bd` resolves from cwd — the target project's root is the only safe cwd.
69
73
  - **Spawning the `classify-bead` subagent when the classifier already resolved the bead.** The deterministic script is the short-circuit; a subagent is only for `escalate: true`.
70
74
  - **Skipping the classifier and classifying by hand.** The rubric is a subagent's job; a hand-rolled guess drifts from it.
@@ -101,9 +105,10 @@ The full bead-property contract (titles, labels, dependencies per chore and for
101
105
  ## Verification checklist
102
106
 
103
107
  - [ ] Parent bead exists with the correct title, description, and priority.
108
+ - [ ] Parent bead created with `--validate`, and `bd lint <id>` reports no missing sections.
104
109
  - [ ] `parent-child` dependency added when a parent epic was supplied.
105
110
  - [ ] `implementation-type` label present on the parent bead (`bd label list <id>`) — resolved by the classifier or, on escalation, the rubric subagent.
106
111
  - [ ] HITL path: no pipeline chores created, caller told the classification. AFK path: script ran from the target project's cwd and its JSON contains every stage ID plus `featurePrReview`.
107
112
  - [ ] Chore titles/labels/dependencies match the contract (`[<parent-id>] <stage title>`, `stage:<id>`, `parent-child` to parent, `blocks` per `dependsOn`), verified against `REFERENCE.md`.
108
- - [ ] PR gate task exists with `implementation-type:hitl` + `lifecycle:feature-pr` labels and blocks the final document stage chore.
113
+ - [ ] PR gate task exists and blocks the final document stage chore, carrying **exactly one** `implementation-type` label — `implementation-type:hitl` (never an inherited `implementation-type:afk` alongside it) — plus `lifecycle:feature-pr`.
109
114
  - [ ] Report returned the parent bead ID, classification, and all child bead IDs.
@@ -101,11 +101,18 @@ const prGateBeadId = run([
101
101
  'bd', 'create', JSON.stringify(`[${parentId}] PR Review and Merge`),
102
102
  '--type', 'task',
103
103
  '--description', JSON.stringify(
104
- 'Human review gate: review and merge the agent PR into the feature branch before closing this feature.',
104
+ 'Human review gate: review and merge the agent PR into the feature branch before closing this feature.\n\n## Acceptance Criteria\n\n- [ ] Agent PR reviewed and merged into the feature branch.',
105
105
  ),
106
+ // The gate is type `task`, so `--validate` enforces its `## Acceptance Criteria`
107
+ // section. Stage chores require no sections and deliberately omit the flag.
108
+ '--validate',
106
109
  '--priority', priority,
107
110
  '--labels', 'implementation-type:hitl,lifecycle:feature-pr',
108
111
  '--parent', parentId,
112
+ // The gate declares its own labels; opt out of bd's create-time parent-label
113
+ // inheritance so its explicit :hitl is never joined by an inherited :afk.
114
+ // Stage chores deliberately keep inheriting :afk -- do not add this there.
115
+ '--no-inherit-labels',
109
116
  '--silent',
110
117
  ]);
111
118
  run(['bd', 'dep', 'add', prGateBeadId, documentStageBeadId, '--type', 'blocks']);
@@ -7,7 +7,7 @@ Body templates used in the Phase 3 and Phase 4 workflow steps of `SKILL.md`.
7
7
  Passed as the `--description` when creating an epic bead:
8
8
 
9
9
  ```bash
10
- bd create "<Phase Title>" --type epic --description "<epic body below>"
10
+ bd create "<Phase Title>" --type epic --description "<epic body below>" --validate
11
11
  ```
12
12
 
13
13
  ```markdown
@@ -23,7 +23,7 @@ A concise description of this phase. Scope and goal, not implementation details.
23
23
 
24
24
  End-to-end behaviour for this phase. What a demo would show.
25
25
 
26
- ## Acceptance criteria
26
+ ## Success Criteria
27
27
 
28
28
  - [ ] Criterion 1
29
29
  - [ ] Criterion 2
@@ -50,17 +50,21 @@ execute. The epic bead is the source of truth — no intermediate plan file.
50
50
  complete through all integration layers, demoable or verifiable on its own, and
51
51
  covering a specific set of user stories.
52
52
  5. For each phase define its **title**, **user stories covered**, **what to build**
53
- (end-to-end behaviour, not layer-by-layer), and **acceptance criteria**.
53
+ (end-to-end behaviour, not layer-by-layer), and **success criteria** — the epic's required
54
+ `## Success Criteria`. The interview is complete only when every phase has agreed criteria;
55
+ never invent them.
54
56
  6. Present the proposed phases and ask about granularity, merges or splits, and which
55
57
  phases can run in parallel. Iterate until the user approves.
56
58
 
57
59
  ### Phase 3 — Create epics (one per phase)
58
60
 
59
61
  7. Create epics in dependency order (blockers first) so you can reference real bead IDs,
60
- using the epic body template in [REFERENCE.md](./REFERENCE.md):
62
+ using the epic body template in [REFERENCE.md](./REFERENCE.md). The body must carry
63
+ `## Success Criteria`; `--validate` rejects it otherwise:
61
64
 
62
65
  ```bash
63
- bd create "<Phase Title>" --type epic --description "<epic body from REFERENCE.md>"
66
+ bd create "<Phase Title>" --type epic --description "<epic body from REFERENCE.md>" --validate
67
+ bd lint <epic-id>
64
68
  ```
65
69
 
66
70
  8. Tag each epic with a priority (`p3` default; adjust for p4/p5), and `workflow:ralph`
@@ -127,7 +131,7 @@ Epic: "Phase 2 — Dashboard" (#127) — AFK (blocked by #123)
127
131
  - [ ] Phase 1 complete: PRD confirmed, codebase explored, architectural decisions captured.
128
132
  - [ ] Phase 2 complete: phases drafted and approved by the user.
129
133
  - [ ] Phase 3 complete: epics created in dependency order and tagged (priority, plus
130
- `workflow:ralph` under ralph-plan/ralph).
134
+ `workflow:ralph` under ralph-plan/ralph), and `bd lint` clean.
131
135
  - [ ] Phase 4 complete: tasks created via `create-task`; epics carry the aggregate
132
136
  `implementation-type` tag.
133
137
  - [ ] Phase 5 complete: full bead tree presented and confirmed.
@@ -137,6 +141,7 @@ Epic: "Phase 2 — Dashboard" (#127) — AFK (blocked by #123)
137
141
  - [ ] Every phase is a vertical slice covering all layers, not a horizontal layer.
138
142
  - [ ] Every task is independently grabbable by a single agent.
139
143
  - [ ] All epics are tagged with a priority (and `workflow:ralph` when under ralph).
144
+ - [ ] Epics created with `--validate`; `bd lint` reports no missing sections for the created tree.
140
145
  - [ ] All tasks are classified AFK/HITL via `create-task`.
141
146
  - [ ] Parent epics carry the aggregate `implementation-type` tag.
142
147
  - [ ] No intermediate plan file was created — epics are the source of truth.
@@ -10,6 +10,11 @@ The problem that the developer is facing, from the developer's perspective.
10
10
 
11
11
  The solution to the problem, from the developer's perspective.
12
12
 
13
+ ## Acceptance Criteria
14
+
15
+ - [ ] <criterion 1>
16
+ - [ ] <criterion 2>
17
+
13
18
  ## Commits
14
19
 
15
20
  A long, detailed implementation plan in plain English, broken into the tiniest commits possible. Each commit should leave the codebase in a working state.
@@ -32,7 +32,7 @@ description: Create a detailed refactor plan via user interview, split into tiny
32
32
  - **description**: the refactor plan formatted with the template in `FORMAT.md`
33
33
  - **priority**: P2
34
34
 
35
- Always invoke `create-task` — never `bd create` directly. `create-task` classifies the bead and expands AFK tasks into pipeline stage beads for ralph.
35
+ Always invoke `create-task` — never `bd create` directly. `create-task` classifies the bead and expands AFK tasks into pipeline stage beads for ralph. The description must include the template's `## Acceptance Criteria` — the plan's definition of done, agreed in the interview rather than invented — or `create-task`'s `--validate` gate rejects it.
36
36
 
37
37
  ## Red Flags
38
38
 
@@ -81,4 +81,5 @@ Output: a P2 bead filed via `create-task` whose description follows the `FORMAT.
81
81
  - [ ] Test coverage assessed; testing plan recorded when coverage is insufficient.
82
82
  - [ ] Commit plan written with every commit leaving the codebase working.
83
83
  - [ ] Decision Document contains decisions only — no file paths or code snippets.
84
- - [ ] Bead filed via `create-task` with concise title, `FORMAT.md`-formatted description, priority P2.
84
+ - [ ] Bead filed via `create-task` with concise title, `FORMAT.md`-formatted description, priority P2.
85
+ - [ ] Description carries agreed `## Acceptance Criteria`; the bead was created with `--validate` and lints clean.