claude-dev-env 8.15.0 → 8.15.1

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 (106) hide show
  1. package/.agents/agents/test_agent_frontmatter.py +0 -72
  2. package/.agents/agents-archived/code-quality-agent.md +16 -16
  3. package/.agents/skills/_shared/end-of-run-gotcha-recommendations.md +5 -21
  4. package/.agents/skills/e-code-review/SKILL.md +1 -3
  5. package/.agents/skills/e-simplify/SKILL.md +6 -6
  6. package/.agents/skills/eli5/SKILL.md +4 -14
  7. package/.agents/skills/eli5/reference/task-seeds.md +3 -4
  8. package/.agents/skills/everything-search/SKILL.md +2 -2
  9. package/.agents/skills/fresh-branch/SKILL.md +2 -3
  10. package/.agents/skills/grok-spawn/SKILL.md +3 -8
  11. package/.agents/skills/issue-tracker/SKILL.md +4 -6
  12. package/.agents/skills/orchestrator-refresh/SKILL.md +7 -7
  13. package/.agents/skills/plugin-eval-standalone-skill/SKILL.md +3 -3
  14. package/.agents/skills/privacy-hygiene/SKILL.md +6 -10
  15. package/.agents/skills/privacy-hygiene/reference/sweep-procedure.md +1 -1
  16. package/.agents/skills/pull-request/SKILL.md +11 -14
  17. package/.agents/skills/pull-request/reference/publication-tasks.md +2 -4
  18. package/.agents/skills/recovering-codex-startup/SKILL.md +3 -6
  19. package/.agents/skills/recovering-codex-startup/reference/task-seeds.md +1 -1
  20. package/.agents/skills/repairing-hook-boundaries/SKILL.md +4 -7
  21. package/.agents/skills/repairing-hook-boundaries/reference/task-seeds.md +1 -2
  22. package/.agents/skills/syncing-submodules/SKILL.md +7 -17
  23. package/.agents/skills/syncing-submodules/reference/run-tasks.md +1 -1
  24. package/.agents/skills/task-build/SKILL.md +1 -1
  25. package/.agents/skills/task-build/reference/tool-routing.md +1 -1
  26. package/.agents/skills/team-advisor/SKILL.md +2 -4
  27. package/.agents/skills/usage-pause/SKILL.md +1 -1
  28. package/.agents/skills/windows-scheduled-task/SKILL.md +1 -1
  29. package/AGENTS.md +1 -1
  30. package/_shared/advisor/advisor-protocol.md +4 -4
  31. package/_shared/advisor/reference/consult-format.md +1 -1
  32. package/_shared/advisor/reference/identity.md +2 -2
  33. package/_shared/advisor/reference/warm-up.md +1 -1
  34. package/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md +1 -1
  35. package/audit-rubrics/prompts/category-o-docstring-vs-impl-drift.md +2 -16
  36. package/bin/install.mjs +1 -0
  37. package/bin/install.prompt-context.test.mjs +7 -3
  38. package/bin/install.test.mjs +3 -2
  39. package/commands/sr-loop.md +2 -2
  40. package/docs/CODE_RULES.md +2 -2
  41. package/docs/DJANGO_PATTERNS.md +3 -3
  42. package/docs/REACT_PATTERNS.md +6 -6
  43. package/docs/TEST_QUALITY.md +10 -16
  44. package/docs/agent-spawn-protocol.md +4 -4
  45. package/docs/codex-compatibility.md +4 -33
  46. package/docs/references/team-advisor-skill.md +0 -1
  47. package/docs/worker-completion-gate.md +0 -1
  48. package/hooks/advisory/migration_safety_advisor.py +3 -2
  49. package/hooks/advisory/refactor_guard.py +3 -3
  50. package/hooks/hooks.json +1 -1
  51. package/hooks/hooks_constants/issue_tracker_session_starter_constants.py +1 -2
  52. package/hooks/hooks_constants/orchestrator_auto_starter_constants.py +1 -2
  53. package/package.json +1 -1
  54. package/rules/explore-thoroughly.md +0 -1
  55. package/rules/filesystem-search.md +1 -1
  56. package/rules/git-workflow.md +5 -5
  57. package/rules/long-horizon-autonomy.md +1 -5
  58. package/rules/re-stage-before-commit.md +0 -2
  59. package/rules/shell-invocation.md +1 -1
  60. package/scripts/dev_env_scripts_constants/grok_worker_constants.py +8 -2
  61. package/scripts/policy_lint/config/constants.py +1 -0
  62. package/scripts/policy_lint/engine.py +5 -2
  63. package/scripts/repository_checks/config/constants.py +1 -1
  64. package/scripts/spawn_grok_batch.py +12 -1
  65. package/scripts/test_spawn_grok_batch.py +22 -0
  66. package/scripts/tests/test_banned_prose_words.py +1 -1
  67. package/scripts/tests/test_policy_lint_rules_archive.py +16 -0
  68. package/scripts/tests/test_policy_lint_rules_engine.py +2 -2
  69. package/scripts/tests/test_rules.py +9 -9
  70. package/system-prompts/software-engineer.xml +15 -30
  71. package/audit-rubrics/audit-categories.json +0 -700
  72. package/audit-rubrics/category_rubrics/category-a-api-contracts.md +0 -90
  73. package/audit-rubrics/category_rubrics/category-b-selector-engine-compat.md +0 -36
  74. package/audit-rubrics/category_rubrics/category-c-resource-cleanup.md +0 -35
  75. package/audit-rubrics/category_rubrics/category-d-scoping-and-ordering.md +0 -35
  76. package/audit-rubrics/category_rubrics/category-e-dead-code.md +0 -40
  77. package/audit-rubrics/category_rubrics/category-f-silent-failures.md +0 -41
  78. package/audit-rubrics/category_rubrics/category-g-bounds-and-overflow.md +0 -38
  79. package/audit-rubrics/category_rubrics/category-h-security-boundaries.md +0 -40
  80. package/audit-rubrics/category_rubrics/category-i-concurrency.md +0 -38
  81. package/audit-rubrics/category_rubrics/category-j-code-rules-compliance.md +0 -59
  82. package/audit-rubrics/category_rubrics/category-k-codebase-conflicts.md +0 -66
  83. package/audit-rubrics/category_rubrics/category-l-behavior-equivalence.md +0 -48
  84. package/audit-rubrics/category_rubrics/category-m-producer-consumer-cardinality.md +0 -44
  85. package/audit-rubrics/category_rubrics/category-n-test-name-scenario-verifier.md +0 -54
  86. package/audit-rubrics/category_rubrics/category-p-name-vs-behavior-contract.md +0 -59
  87. package/audit-rubrics/category_rubrics/category-q-cross-surface-claims.md +0 -46
  88. package/audit-rubrics/prompts/category-a-api-contracts.md +0 -407
  89. package/audit-rubrics/prompts/category-b-selector-engine-compat.md +0 -401
  90. package/audit-rubrics/prompts/category-c-resource-cleanup.md +0 -420
  91. package/audit-rubrics/prompts/category-d-scoping-and-ordering.md +0 -414
  92. package/audit-rubrics/prompts/category-e-dead-code.md +0 -434
  93. package/audit-rubrics/prompts/category-f-silent-failures.md +0 -432
  94. package/audit-rubrics/prompts/category-g-bounds-and-overflow.md +0 -383
  95. package/audit-rubrics/prompts/category-h-security-boundaries.md +0 -423
  96. package/audit-rubrics/prompts/category-i-concurrency.md +0 -429
  97. package/audit-rubrics/prompts/category-j-code-rules-compliance.md +0 -458
  98. package/audit-rubrics/prompts/category-k-codebase-conflicts.md +0 -338
  99. package/audit-rubrics/prompts/category-l-behavior-equivalence.md +0 -131
  100. package/audit-rubrics/prompts/category-m-producer-consumer-cardinality.md +0 -129
  101. package/audit-rubrics/prompts/category-n-test-name-scenario-verifier.md +0 -139
  102. package/audit-rubrics/prompts/category-p-name-vs-behavior-contract.md +0 -89
  103. package/audit-rubrics/prompts/category-q-cross-surface-claims.md +0 -51
  104. package/hooks/hooks_constants/style_reminder_prompt_constants.py +0 -9
  105. package/hooks/session/style_reminder_prompt.py +0 -55
  106. package/hooks/session/test_style_reminder_prompt.py +0 -86
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: recovering-codex-startup
3
3
  description: >-
4
- Diagnose Windows Codex desktop/CLI startup with fresh read-only process evidence. Triggers: Codex will not start, Codex desktop/CLI stuck, suspended Codex process, stale Codex process, Windows Codex startup.
4
+ Diagnose Windows Codex desktop/CLI startup with fresh read-only process evidence. Use when Codex will not start on Windows, or a Codex process looks stuck, stale, or suspended.
5
5
  ---
6
6
 
7
7
  # Recovering Codex startup
@@ -17,7 +17,6 @@ Report only what that listing supports. Do not change process or installation st
17
17
  - Report the executable path, process name, start time, and owner. Mark unavailable fields as unavailable.
18
18
  - Do not inspect other applications, process trees, or change process state.
19
19
  - Do not call a process stale or suspended without fresh supporting evidence.
20
- - Route installation issues to `/run-claude-dev-env`.
21
20
  - Run `/privacy-hygiene` before durable output.
22
21
 
23
22
  ## When this applies
@@ -29,14 +28,13 @@ For a non-Windows run, return exactly:
29
28
 
30
29
  ## Process
31
30
 
32
- 1. Register the tasks in `reference/task-seeds.md`.
31
+ 1. When the session exposes a task tool, register the tasks in `reference/task-seeds.md`.
33
32
  2. Read `../../../rules/verify-runtime-state.md`.
34
33
  3. Confirm Windows and collect a fresh timestamp.
35
34
  4. Use read-only Windows tools to inspect Codex processes only.
36
35
  5. Record process name, executable path, start time, and owner.
37
36
  6. Separate observation from diagnosis and state when no match exists.
38
- 7. Route installation evidence to `/run-claude-dev-env`.
39
- 8. Run `/privacy-hygiene` before saving or publishing a report.
37
+ 7. Run `/privacy-hygiene` before saving or publishing a report.
40
38
 
41
39
  Do not change process or installation state. A human must authorize any later
42
40
  process or installation change.
@@ -45,7 +43,6 @@ process or installation change.
45
43
 
46
44
  | Skill | Use | Produces |
47
45
  | --- | --- | --- |
48
- | `/run-claude-dev-env` | Installation evidence | Installation diagnosis |
49
46
  | `/privacy-hygiene` | Before durable output | Privacy-reviewed output |
50
47
 
51
48
  ## Files
@@ -2,5 +2,5 @@
2
2
  2. Read `../../../rules/verify-runtime-state.md`.
3
3
  3. Collect fresh, read-only Codex process evidence and a timestamp.
4
4
  4. Record the exact path, name, start time, and owner.
5
- 5. Report observation separately from diagnosis and route installation evidence.
5
+ 5. Report observation separately from diagnosis.
6
6
  6. Run `/privacy-hygiene` before durable output and record that future action needs human authorization.
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: repairing-hook-boundaries
3
3
  description: >-
4
- Repair Claude and Codex hook failures at their first failing boundary. Triggers: Claude/Codex hook failure, blocked hook, hook timeout, invalid hook output, SessionStart, PreToolUse, PostToolUse, UserPromptSubmit, Stop, hooks.json, settings.json, import path, launcher, payload, output envelope, exit status.
4
+ Repair Claude and Codex hook failures at their first failing boundary. Use when a hook fails, blocks, times out, or emits invalid output, including a registration, launcher, import path, payload, or exit status fault.
5
5
  ---
6
6
 
7
7
  # Repairing hook boundaries
@@ -17,7 +17,6 @@ output envelope, and exit status as separate boundaries.
17
17
  - A correct source entry does not prove the installed configuration matches it.
18
18
  - A valid launcher can receive an invalid payload or emit an invalid envelope.
19
19
  - State exact source, installed, and repository-root paths for each claim.
20
- - Route installer-only work to `/run-claude-dev-env`.
21
20
  - Get explicit approval before changing live configuration.
22
21
  - Run `/privacy-hygiene` before durable output.
23
22
  - Reuse project validators. Do not copy their commands or implementation here.
@@ -31,20 +30,18 @@ For installer-only work, say: `Installer work with no hook-boundary failure belo
31
30
 
32
31
  ## Process
33
32
 
34
- 1. Register the tasks in `reference/task-seeds.md`.
33
+ 1. When the session exposes a task tool, register the tasks in `reference/task-seeds.md`.
35
34
  2. Record expected and observed behavior. Record exact source, installed, and repository-root paths.
36
35
  3. Check each boundary in order and identify the first mismatch.
37
36
  4. Repair only that boundary. Leave unrelated hooks and user settings unchanged.
38
37
  5. Recheck the boundary and its direct consumer with existing project validators.
39
- 6. Use `/run-claude-dev-env` when packaging is involved.
40
- 7. Get explicit approval before a live configuration change.
41
- 8. Run `/privacy-hygiene` before a durable report or publication.
38
+ 6. Get explicit approval before a live configuration change.
39
+ 7. Run `/privacy-hygiene` before a durable report or publication.
42
40
 
43
41
  ## Sub-skills
44
42
 
45
43
  | Skill | Use | Produces |
46
44
  | --- | --- | --- |
47
- | `/run-claude-dev-env` | Packaging or install work | Install result |
48
45
  | `/privacy-hygiene` | Durable-output privacy review | Privacy result |
49
46
 
50
47
  ## Files
@@ -3,5 +3,4 @@
3
3
  3. Find the first failing hook boundary.
4
4
  4. Repair only that boundary.
5
5
  5. Recheck the boundary and direct consumer.
6
- 6. Route installer-only work to `/run-claude-dev-env`.
7
- 7. Get live-change approval and run `/privacy-hygiene` before durable output.
6
+ 6. Get live-change approval and run `/privacy-hygiene` before durable output.
@@ -1,11 +1,9 @@
1
1
  ---
2
2
  name: syncing-submodules
3
3
  description: >-
4
- Records a submodule's current commit in its parent repository.
5
- Triggers: submodule sync, /submodule-sync, sync parent submodule,
6
- update parent pointer, record submodule commit, commit submodule pointer,
7
- sync superproject, update superproject pointer, parent repo submodule update,
8
- finish submodule commit. Does not handle clone, checkout, update main,
4
+ Records a submodule's current commit in its parent repository. Use after a
5
+ commit inside a submodule when the parent repository or superproject should
6
+ record the new pointer. Does not handle clone, checkout, update main,
9
7
  or ordinary commits.
10
8
  ---
11
9
 
@@ -22,7 +20,7 @@ A submodule commit changes the child repository first. Change the parent pointer
22
20
  - `git diff --cached --quiet` uses exit 1 for a changed pointer. Any higher exit is a failure.
23
21
  - The parent repository may already contain staged work. The path-only commit must leave it staged.
24
22
  - A repository without a superproject is a successful `not_submodule` result.
25
- - The old hook returned success after a failed parent commit. This command returns a nonzero exit.
23
+ - A failed parent commit returns a nonzero exit.
26
24
 
27
25
  ## When this applies
28
26
 
@@ -32,13 +30,13 @@ Refusals use the first matching line:
32
30
 
33
31
  - Clone, initialize, or check out a submodule: `Use Git's submodule commands. This skill records an existing submodule commit in its parent.`
34
32
  - Fast-forward `main`: `Use Git directly. This skill changes one parent submodule pointer.`
35
- - Make an ordinary commit or push: `Use /source-command-commit. This skill commits only a parent submodule pointer.`
33
+ - Make an ordinary commit or push: `Use Git directly. This skill commits only a parent submodule pointer.`
36
34
 
37
35
  ## Process
38
36
 
39
37
  ### Seed the run tasks
40
38
 
41
- Register every item in `reference/run-tasks.md` as a session task with the host task tool. Complete each task with an exit code, JSON field, or repository readback. If the host has no task tool, stop with `A task tool is required to track this repository-changing operation.`
39
+ When the host exposes a task tool, register every item in `reference/run-tasks.md` as a session task and complete each one with an exit code, JSON field, or repository readback. Otherwise work the items in order.
42
40
 
43
41
  ### Run the command
44
42
 
@@ -57,9 +55,7 @@ The script writes one JSON object to standard output. Exit 0 permits `updated`,
57
55
  - `updated`: report `parent_repository`, `submodule_path`, `commit`, and `parent_commit`.
58
56
  - `unchanged`: report that the parent already records `commit`.
59
57
  - `not_submodule`: report that no parent repository changed.
60
- - `pull_request_url`: invoke `/pr-title-description` with that URL after reporting the sync result.
61
-
62
- If `/pr-title-description` is not installed, report `pull_request_url` and finish the successful sync.
58
+ - `pull_request_url`: report the open pull request URL after the sync result.
63
59
 
64
60
  ## Constraints
65
61
 
@@ -75,12 +71,6 @@ If `/pr-title-description` is not installed, report `pull_request_url` and finis
75
71
  - No superproject: `status` is `not_submodule`; every parent and commit field is null.
76
72
  - Failed stage: exit 1, `status` is `error`, and standard error starts with `syncing-submodules:`.
77
73
 
78
- ## Sub-skills
79
-
80
- | Skill | When | Produces | Missing behavior |
81
- |---|---|---|---|
82
- | `/pr-title-description` | The result includes `pull_request_url` | A title and description based on the full pull request diff | Report the URL and keep the completed sync |
83
-
84
74
  ## File index
85
75
 
86
76
  | File | Purpose |
@@ -6,4 +6,4 @@
6
6
  - Fix any reported failure and rerun until the command exits 0.
7
7
  - Read back the parent pointer and unrelated staged paths when the status is `updated`.
8
8
  - Report the result fields.
9
- - Route an open pull request URL to `/pr-title-description` or report the URL when that skill is missing.
9
+ - Report an open pull request URL.
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: task-build
3
- description: "Gather open session tasks and register them with the best available task or plan tool. Triggers: '/task-build', 'build my task list', 'capture these tasks', 'add open tasks to the task list', 'track these', task list, update plan."
3
+ description: "Gather open session tasks and register them with the best available task or plan tool. Use when the user asks to capture, track, or list the session's open tasks."
4
4
  argument-hint: "[optional: a list of tasks to capture, or omit to scan the session]"
5
5
  ---
6
6
 
@@ -18,5 +18,5 @@ Do not invent a tool name. Tool availability means the callable tool is exposed
18
18
 
19
19
  State the selected tool, the number of new items, the number already tracked, and the new task subjects. If the fallback path was used, name the unavailable preferred tools briefly.
20
20
 
21
- 4. **File ledger fallback** — when no host task/plan tool is exposed, register work in the durable `grok_run_ledger` under the run-state directory so orchestration stays reconcilable across hosts.
21
+ 4. **File ledger fallback.** During an orchestrator run with no host task or plan tool, register work in the durable `grok_run_ledger` under the run-state directory so orchestration stays reconcilable across hosts.
22
22
 
@@ -2,10 +2,8 @@
2
2
  name: team-advisor
3
3
  description: >-
4
4
  Bind one advisor, the built-in advisor tool or a warm `pstack:poteto-agent`, and
5
- consult it before substantive work, completion, commits, or when stuck.
6
- Triggers:
7
- 'team-advisor', 'team advisor', 'second opinion', 'consult the advisor',
8
- 'get an advisor', 'check my approach with an advisor'.
5
+ consult it before substantive work, completion, commits, or when stuck. Use
6
+ when the user asks for an advisor or a second opinion on the approach.
9
7
  ---
10
8
 
11
9
  # Team Advisor
@@ -1,6 +1,6 @@
1
1
  ---
2
2
  name: usage-pause
3
- description: 5-hour usage window, agent context warm, weekly limit is near its cap. Triggers: '/usage-pause', 'pause until the usage window resets', 'wait out the usage limit', 'usage limit pause', 'usage limit', 'pause usage', 'usage pause'.
3
+ description: Pause work until the 5-hour usage window resets, keeping agent contexts warm through staged wakeups. Stops with a warning when the weekly limit is near its cap. Use when the user asks to pause for or wait out a usage limit.
4
4
  argument-hint: "[reset time like 10:20pm | duration like 74m]"
5
5
  ---
6
6
 
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: windows-scheduled-task
3
3
  description: >-
4
- Register a repeating headless Windows scheduled task from PowerShell, with endless repetition, an S4U or Interactive principal, absolute action paths, and a documented teardown. Triggers: register a scheduled task, repeating task, headless task, S4U, Task Scheduler, RepetitionDuration, task will not register, scheduled task access denied, Unregister-ScheduledTask.
4
+ Register a repeating headless Windows scheduled task from PowerShell, with endless repetition, an S4U or Interactive principal, absolute action paths, and a documented teardown. Use when creating, repairing, or removing a repeating Task Scheduler task, including a task that fails to register.
5
5
  ---
6
6
 
7
7
  # Windows scheduled task
package/AGENTS.md CHANGED
@@ -1,6 +1,6 @@
1
1
  Status
2
2
 
3
- Changed / proof / blocked. No narration.
3
+ Changed / proof / blocked.
4
4
 
5
5
  Diffs
6
6
 
@@ -65,7 +65,7 @@ On Codex: Astra is the in-session default. The `ADVISOR_ASTRA` flag is not requi
65
65
  When `advisor` is in the session's tool list, the built-in advisor tool is the advisor. The user turns it on with `/advisor`, the `advisorModel` setting, or `--advisor`. Spawn nothing and call `advisor()` at each consult point. The tool forwards the whole transcript, so a consult needs no packet. Its reply is free text, so the four signal words do not apply; weigh it per `docs/references/advisor-tool.md` **How to treat advice**. It is a server tool, so hooks and the spawn-walk log do not see it. An Opus advisor returns an encrypted result that a log cannot read. When a readable record matters, use the warm agent below.
66
66
 
67
67
  When `advisor` is not in the tool list, use the **Model floor** ladder below (Opus first, then Astra when Opus is out of usage).
68
- Warm-up spawns `subagent_type: session-advisor` via the Agent tool for Opus; consults go through `SendMessage` to that warm agent. Astra uses the Codex helper.
68
+ Warm-up spawns `subagent_type: pstack:poteto-agent` at Opus via the Agent tool, with the advisor response contract in the charter; consults go through `SendMessage` to that warm agent. Astra uses the Codex helper.
69
69
  Assemble and paste each executor's Advisor block per the **Advisor block** section.
70
70
 
71
71
  ### Codex host
@@ -90,8 +90,8 @@ Executors report to the orchestrating session; that session consults the bound a
90
90
  The built-in advisor tool sits outside this ladder. Claude Code and the API accept it only when the advisor is at least as capable as the main model, and that check is its floor.
91
91
  On Claude and ThirdParty the advisor ladder is `Opus` first, then Astra (flag-gated, Codex CLI) when Opus is out of usage.
92
92
  On Codex the walk is Astra only, in-session.
93
- Opus is not an advisor candidate. `Sonnet` and `Haiku` are executor tiers only.
94
- Consumer `own_tier` is recorded on the spawn-walk log; it does not add Opus to the advisor walk.
93
+ `Sonnet` and `Haiku` are executor tiers only.
94
+ Consumer `own_tier` is recorded on the spawn-walk log; it does not change the advisor walk.
95
95
  Tier names are canonical Title Case; the validator accepts any letter case and normalizes to Title Case.
96
96
  Try binds top-down. Opus resolves to the short model alias in [`reference/cli-chain.md`](reference/cli-chain.md); Astra resolves through `resolve_codex_model_id("Astra")` to `gpt-6-astra`.
97
97
  The advisor is created at `selected_tier`, the first ladder tier that binds.
@@ -107,7 +107,7 @@ The validator checks ladder shape only; host policy sits on top.
107
107
  ## Warm-up (once per session)
108
108
 
109
109
  On a **Claude host** with `advisor` in the tool list, skip the warm-up; the built-in tool needs none.
110
- On a **Claude host** without it, spawn `session-advisor` at the Opus alias with the charter as its prompt. When Opus is out of usage and the Astra rung is open, bind Astra through the Codex helper instead.
110
+ On a **Claude host** without it, spawn `pstack:poteto-agent` at the Opus alias with the charter as its prompt. When Opus is out of usage and the Astra rung is open, bind Astra through the Codex helper instead.
111
111
  Full spawn fields and the charter template: [`reference/warm-up.md`](reference/warm-up.md).
112
112
 
113
113
  On a **Codex host**, spawn a native in-session Astra subagent with the same charter. Bind fields: [`reference/identity.md`](reference/identity.md) and [`reference/warm-up.md`](reference/warm-up.md).
@@ -39,5 +39,5 @@ Address a CORRECTION before treating the plan or the work as done, whether it na
39
39
 
40
40
  `/team-advisor` is the skill that binds one warm advisor for the session that ran it. That lead session sends every consult. The bound advisor (`team-advisor-agent` on Claude) replies only to the lead session. If the lead session later spawns worker subagents, those workers do not consult the bound advisor, and the bound advisor does not reply to them. When the reply is STOP, or the bound advisor cannot be reached, the lead session tells the human. The lead session has no parent session to report to.
41
41
 
42
- When the advisor becomes unreachable, report that to the session that owns its lifecycle ([`lifecycle.md`](lifecycle.md)); that session alone decides whether to respawn (Claude Agent, Codex native Sol, or third-party CLI re-bind).
42
+ When the advisor becomes unreachable, report that to the session that owns its lifecycle ([`lifecycle.md`](lifecycle.md)); that session alone decides whether to respawn (Claude Agent, Codex native Astra, or third-party CLI re-bind).
43
43
  A third-party host that cannot re-bind follows the fail-closed rule in [`third-party-bind.md`](third-party-bind.md).
@@ -10,14 +10,14 @@ Call `resolve_session_identity` from `$HOME/.claude/_shared/advisor/scripts/tier
10
10
  | Identity text | Host profile | Bind path |
11
11
  |---|---|---|
12
12
  | a `codex` token | Codex | In-session Astra spawn |
13
- | a `claude` token | Claude | In-session Opus spawn of `session-advisor` |
13
+ | a `claude` token | Claude | In-session Opus spawn of `pstack:poteto-agent` |
14
14
  | any other identity | ThirdParty | Headless CLI chain |
15
15
 
16
16
  When both `codex` and `claude` tokens appear, Codex wins. Empty text is ThirdParty.
17
17
 
18
18
  ## Bind path
19
19
 
20
- **Claude.** Spawn `subagent_type: session-advisor` at Opus through the Agent tool. When Opus is out of usage, bind Astra through the Codex helper if `ADVISOR_ASTRA` is on. Fail closed when neither binds.
20
+ **Claude.** Spawn `subagent_type: pstack:poteto-agent` at Opus through the Agent tool. When Opus is out of usage, bind Astra through the Codex helper if `ADVISOR_ASTRA` is on. Fail closed when neither binds.
21
21
 
22
22
  **Codex.** Spawn a native in-session Astra subagent at `resolve_codex_model_id("Astra")` (`gpt-6-astra`). Walk `candidate_tiers = ["Astra"]`. When the spawn tool has a `flags` field, pass `flags: ["--advisor"]` and record `fallback.advisor_flag: "passed"`. When it has none, as in `codex exec`, spawn `gpt-6-astra` plainly and record `fallback.advisor_flag: "unavailable"`. Both count as a bind. Record `{tier: "Astra", result: "spawned"}` on success. The `ADVISOR_ASTRA` flag is not required. Fail closed when Astra does not bind, or when the spawn skips a flag the host offers. Do not walk Opus on a Codex host.
23
23
 
@@ -7,7 +7,7 @@ Open this when binding the warm advisor on a Claude host or a Codex host, and fo
7
7
 
8
8
  The consuming skill's session tries Opus first. Spawn with:
9
9
 
10
- - `subagent_type: session-advisor` (see [`agents/session-advisor.md`](../../../agents/session-advisor.md) for the full signal contract).
10
+ - `subagent_type: pstack:poteto-agent`. The charter below carries the signal contract.
11
11
  - `model`: the short alias via `resolve_cli_model_id("Opus")` (alias table: [`cli-chain.md`](cli-chain.md)): `opus`. When Opus is out of usage and the Astra rung is open, continue with the Codex helper in [`astra-rung.md`](astra-rung.md) as the Astra fallback.
12
12
  - `name`: a name the session and every consumer will use to reach it (e.g. `team-advisor-agent`).
13
13
  - `run_in_background: true`.
@@ -19,7 +19,7 @@ This file is the **single thick source** for Category O judgment (sub-buckets O1
19
19
  |---|---|
20
20
  | `packages/claude-dev-env/rules/docstring-prose-matches-implementation.md` | Always-on write-time policy: the policy sentence, a compact checklist a writer applies at Write/Edit, and a pointer here. |
21
21
  | **This rubric** | On-demand thick home. The code-quality agent loads it per category. Holds every judgment standard, gate inventory, and worked example. |
22
- | `packages/claude-dev-env/audit-rubrics/prompts/category-o-docstring-vs-impl-drift.md` | Variant C audit template: source-material slots, forced-exhaustion protocol, adversarial probes, cross-bucket questions, output shape, and a PR worked example. Points here for the judgment standard. |
22
+ | `packages/claude-dev-env/audit-rubrics/prompts/category-o-docstring-vs-impl-drift.md` | Variant C audit template: source-material slots, forced-exhaustion protocol, adversarial probes, cross-bucket questions, and output shape. Points here for the judgment standard. |
23
23
 
24
24
  Plainness for a general developer (diagram-first shape) also lives under O9; the write-time companion rule for that slice is `packages/claude-dev-env/rules/plain-illustrative-docstrings.md`.
25
25
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  **Judgment standard (thick source):** `packages/claude-dev-env/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md`
4
4
 
5
- This file is the audit **template** only: source-material slots, forced-exhaustion protocol, adversarial probes, cross-bucket questions, output shape, and a worked example. For every sub-bucket's judgment standard, gate inventory, and free-form checklist, read the thick rubric above. Do not treat this prompt as a second full copy of the standard.
5
+ This file is the audit **template** only: source-material slots, forced-exhaustion protocol, adversarial probes, cross-bucket questions, and output shape. For every sub-bucket's judgment standard, gate inventory, and free-form checklist, read the thick rubric above. Do not treat this prompt as a second full copy of the standard.
6
6
 
7
7
  ## Division of labor
8
8
 
@@ -81,18 +81,4 @@ Q3: Of the changed docstrings, which one most clearly shows a refactor was incom
81
81
 
82
82
  ## Output
83
83
 
84
- Lead: `Total: N (P0=N, P1=N, P2=N)`. For each sub-bucket O1-O9, produce Shape A or Shape B (with ≥3 probes). Each Shape A finding must cite (a) the docstring file:line, (b) the body file:line that contradicts it, and (c) one sentence describing the contradiction in concrete terms. Cross-bucket Q1-Q3 answers after the per-sub-bucket walk. Adversarial second pass: "assume your first pass missed at least 3 module-level docstring claims whose implementation left during a refactor — find them." Open Questions section for ambiguities. Read-only. No edits, no commits.
85
-
86
- ---
87
-
88
- # Worked example: jl-cmd/claude-dev-env PR #522
89
-
90
- Audit jl-cmd/claude-dev-env PR #522 for **Category O only** (docstring / fixture-prose vs implementation drift). Skip A-N, P. Sub-bucket forced-exhaustion mode: Category O is decomposed into 9 sub-buckets below.
91
-
92
- PR #522 split `pr_description_command_parser.py` into two modules — the original parser and a new `pr_description_pr_number.py` — but the originating module's docstring still claims the PR-number recovery responsibility. A sibling change to `pr_description_body_audit.py` introduced a module docstring whose verb (`detects vague language`) overstates the module's responsibility (it only exposes `_extract_vague_scan_text()`; detection runs elsewhere).
93
-
94
- Expected findings on PR #522:
95
- - **O1 finding:** `pr_description_body_audit.py:8` docstring uses verb `detects`, but the only exported symbol prepares input for a regex scan that fires in a different module. Body line(s) showing `_extract_vague_scan_text` returning normalized text without a detection call.
96
- - **O7 finding:** `pr_description_command_parser.py` module docstring still names PR-number recovery as a responsibility; the split placed that in `pr_description_pr_number.py`. The originating docstring needs an O7-shaped rewrite to drop the claim that left.
97
- - **O2 finding:** `test_pr_description_enforcer_readability.py` autouse fixture docstring claims readability is globally disabled `for these tests`; sibling tests in the same module explicitly re-enable readability through a different state path.
98
- - **O5 finding:** `code_rules_magic_values.py` docstring references a `# pragma: no-tdd-gate` sentinel and a hyphenated `test_code-rules-enforcer.py` filename; neither token exists in the module body or matches the repo's underscore-only test-file naming convention.
84
+ Lead: `Total: N (P0=N, P1=N, P2=N)`. For each sub-bucket O1-O9, produce Shape A or Shape B (with at least 3 probes). Each Shape A finding must cite (a) the docstring file:line, (b) the body file:line that contradicts it, and (c) one sentence describing the contradiction in concrete terms. Cross-bucket Q1-Q3 answers after the per-sub-bucket walk. Report every finding you reach, including uncertain ones and P2 ones, and give each finding a confidence level (high, medium, or low) beside its severity so a later pass can rank and filter them. Open Questions section for ambiguities. Read-only. No edits, no commits.
package/bin/install.mjs CHANGED
@@ -1179,6 +1179,7 @@ export const RETIRED_HOOK_REGISTRATION_RELATIVE_PATHS = new Set([
1179
1179
  'advisory/msys_path_conversion_advisor.py',
1180
1180
  'session/untracked_repo_detector.py',
1181
1181
  'session/gh_pr_author_session_cleanup.py',
1182
+ 'session/style_reminder_prompt.py',
1182
1183
  'observability/pr_description_writer_spawn_tracker.py',
1183
1184
  'blocking/plain_language_blocker.py',
1184
1185
  'lifecycle/config_change_guard.py',
@@ -4,7 +4,7 @@ import { readFileSync } from 'node:fs';
4
4
 
5
5
  import { mergeHooksIntoSettings } from './install.mjs';
6
6
 
7
- test('reinstall replaces both prompt hooks with one ordered context hook', () => {
7
+ test('reinstall drops the retired style reminder and keeps one skill reminder hook', () => {
8
8
  const hooksConfig = JSON.parse(readFileSync(new URL('../hooks/hooks.json', import.meta.url), 'utf8'));
9
9
  const userCommand = 'python C:/Users/example/hooks/user_hook.py';
10
10
  const settings = {
@@ -18,6 +18,10 @@ test('reinstall replaces both prompt hooks with one ordered context hook', () =>
18
18
  type: 'command',
19
19
  command: 'python C:/Users/example/.claude/hooks/session/style_reminder_prompt.py',
20
20
  },
21
+ {
22
+ type: 'command',
23
+ command: 'python C:/Users/example/.claude/hooks/session/style_reminder_prompt.py --include-skill-reminder',
24
+ },
21
25
  {
22
26
  type: 'command',
23
27
  command: 'python C:/Users/example/.claude/hooks/session/skill_loaded_reminder.py',
@@ -33,8 +37,8 @@ test('reinstall replaces both prompt hooks with one ordered context hook', () =>
33
37
  const userPromptHooks = settings.hooks.UserPromptSubmit.flatMap(eachGroup => eachGroup.hooks);
34
38
  assert.equal(userPromptHooks.length, 2);
35
39
  assert.equal(userPromptHooks[0].command, userCommand);
36
- assert.match(userPromptHooks[1].command, /style_reminder_prompt\.py --include-skill-reminder$/);
37
- assert.doesNotMatch(userPromptHooks[1].command, /skill_loaded_reminder/);
40
+ assert.match(userPromptHooks[1].command, /session\/skill_loaded_reminder\.py$/);
41
+ assert.ok(userPromptHooks.every(eachHook => !eachHook.command.includes('style_reminder_prompt')));
38
42
 
39
43
  const firstMerge = JSON.stringify(settings);
40
44
  mergeHooksIntoSettings(settings, hooksConfig, 'C:/Users/example/.claude', 'python');
@@ -281,10 +281,10 @@ test('EVER_SHIPPED_SKILL_NAMES retains repairing-hook-boundaries so reinstall pr
281
281
  });
282
282
 
283
283
 
284
- test('CONTENT_DIRECTORIES includes audit-rubrics so installer copies category rubrics and prompts to ~/.claude/audit-rubrics/', () => {
284
+ test('CONTENT_DIRECTORIES includes audit-rubrics so installer copies the Category O rubric to ~/.claude/audit-rubrics/', () => {
285
285
  assert.ok(
286
286
  CONTENT_DIRECTORIES.includes('audit-rubrics'),
287
- 'audit-rubrics must be in CONTENT_DIRECTORIES so bugteam can resolve $HOME/.claude/audit-rubrics/{category_rubrics,prompts}/',
287
+ 'audit-rubrics must be in CONTENT_DIRECTORIES so the docstring rules can resolve $HOME/.claude/audit-rubrics/category_rubrics/category-o-docstring-vs-impl-drift.md',
288
288
  );
289
289
  });
290
290
 
@@ -1192,6 +1192,7 @@ test('retired hook registrations stay managed so reinstall removes them', () =>
1192
1192
  'advisory/msys_path_conversion_advisor.py',
1193
1193
  'session/untracked_repo_detector.py',
1194
1194
  'session/gh_pr_author_session_cleanup.py',
1195
+ 'session/style_reminder_prompt.py',
1195
1196
  'observability/pr_description_writer_spawn_tracker.py',
1196
1197
  'blocking/plain_language_blocker.py',
1197
1198
  'lifecycle/config_change_guard.py',
@@ -20,8 +20,8 @@ new user instruction.
20
20
 
21
21
  ## Effort
22
22
 
23
- Set every model call to `max` effort. If that model has no `max` effort, use
24
- `xhigh`.
23
+ Run each model call at the session's effort level. Raise a call to `xhigh` or
24
+ `max` only where a measured run shows a quality gain at that level.
25
25
 
26
26
  ## Stack context
27
27
 
@@ -17,7 +17,7 @@ Production and tests follow one rule. Changed directive, TODO, FIXME, HACK, XXX,
17
17
 
18
18
  ## CORE PRINCIPLES
19
19
 
20
- - **Self-documenting code** — naming over comments. Full 8-dimension rubric: `~/.claude/skills/readability-review/SKILL.md` (`/check` for parallel team review, `/readability-review` standalone).
20
+ - **Self-documenting code.** Names carry the meaning in place of comments.
21
21
  - **Centralized configuration** — every constant lives in ONE place (`config/`).
22
22
  - **Reuse before create** — search first, import second, create last.
23
23
  - **Encapsulation enables cleaner naming** — `isMaxLevel(level)` > `level >= MAXIMUM_LEVEL`.
@@ -111,7 +111,7 @@ If you already have the data, don't fetch it again.
111
111
 
112
112
  ## 11. ENFORCEMENT SURFACES
113
113
 
114
- ⚡ **Hooks** block pattern-matchable violations at Write/Edit time. 🤖 **Prompt context** carries judgment principles (SRP, Right-Sized Engineering, research-first action on ambiguous intent, BDD discovery, docstring-prose-matches-implementation). 👥 **Audit rubrics** (`/check`, `packages/claude-dev-env/audit-rubrics/` categories A–Q) cover cross-file architectural concerns. Rules with documented-but-pending hook coverage live in `~/.claude/rules/*.md`; each names its own promotion path. The docstring-prose standard (free-form enumerations match the body) lives in `packages/claude-dev-env/rules/docstring-prose-matches-implementation.md`, enforced via Category O6 audit. The diagram-first docstring standard (a summary line, then a `::` example or doctest, then a couple of short prose lines) lives in `packages/claude-dev-env/rules/plain-illustrative-docstrings.md`, enforced by the `check_docstring_runon_sentence` and `check_docstring_prose_wall_without_illustration` backstop hooks and Category O9 audit.
114
+ **Lint** reports pattern-matchable violations. The staged policy lint runs `code_rules_enforcer.py` over each changed file, and CI runs it against the merge base. **Prompt context** carries judgment principles (SRP, Right-Sized Engineering, research-first action on ambiguous intent, BDD discovery, docstring-prose-matches-implementation). **Audit rubrics** (`packages/claude-dev-env/audit-rubrics/` categories A to Q) cover cross-file architectural concerns. Rules with documented-but-pending check coverage live in `~/.claude/rules/*.md`; each names its own promotion path. The docstring-prose standard (free-form enumerations match the body) lives in `packages/claude-dev-env/rules/docstring-prose-matches-implementation.md`, enforced via Category O6 audit. The diagram-first docstring standard (a summary line, then a `::` example or doctest, then a couple of short prose lines) lives in `packages/claude-dev-env/rules/plain-illustrative-docstrings.md`, enforced by the `check_docstring_runon_sentence` and `check_docstring_prose_wall_without_illustration` enforcer checks and Category O9 audit.
115
115
 
116
116
  ## 11.5 VALIDATION-PHASE PRECEDENCE
117
117
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Model Patterns
6
6
 
7
- **NEVER:**
7
+ **Anti-patterns:**
8
8
 
9
9
  - **Create separate user models** - Extend Django's User with OneToOneField
10
10
  - Example: `UserProfile(user=OneToOneField(User, related_name='profile'))`
@@ -27,13 +27,13 @@
27
27
 
28
28
  ## Template Patterns
29
29
 
30
- **NEVER:**
30
+ **Anti-patterns:**
31
31
 
32
32
  - **Put view-specific template code in base.html** - Only in the template that uses it
33
33
  - Example: `{% if layout %}` in base.html when only home view defines layout
34
34
  - If variable is always present in specific template, no conditional needed
35
35
 
36
- ## Production Migrations (Post-Launch ONLY)
36
+ ## Production Migrations (Post-Launch Only)
37
37
 
38
38
  After launch, keep model changes backwards-compatible.
39
39
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  ## Component Patterns
6
6
 
7
- **NEVER:**
7
+ **Anti-patterns:**
8
8
 
9
9
  - **Create wrapper components for single use** - Use the component directly
10
10
  - Example: `<ButtonWrapper><Button /></ButtonWrapper>` when Button is only used once
@@ -27,7 +27,7 @@
27
27
 
28
28
  ## State Management Patterns
29
29
 
30
- **NEVER:**
30
+ **Anti-patterns:**
31
31
 
32
32
  - **Store derived state** - Calculate on render
33
33
  - Bad: `const [fullName, setFullName] = useState(first + ' ' + last)`
@@ -47,18 +47,18 @@
47
47
 
48
48
  - **Forget to memoize expensive calculations** - Use useMemo
49
49
  - Bad: `const sorted = items.sort((a, b) => ...)` on every render
50
- - Good: `const sorted = useMemo(() => items.sort(...), [items])`
50
+ - Good: `const sorted = useMemo(() => [...items].sort(...), [items])`
51
51
 
52
52
  ## Hooks Patterns
53
53
 
54
- **NEVER:**
54
+ **Anti-patterns:**
55
55
 
56
56
  - **Call hooks conditionally** - Hooks must be at top level
57
57
  - Bad: `if (condition) { const [x, setX] = useState() }`
58
58
  - Good: Always call hooks, use condition inside
59
59
 
60
60
  - **Create effects without cleanup** - Return cleanup function when needed
61
- - Subscriptions, timers, event listeners MUST be cleaned up
61
+ - Clean up subscriptions, timers, and event listeners
62
62
  - Bad: `useEffect(() => { window.addEventListener(...) }, [])`
63
63
  - Good: `useEffect(() => { window.addEventListener(...); return () => window.removeEventListener(...) }, [])`
64
64
 
@@ -86,7 +86,7 @@ components/
86
86
  index.ts # Public export
87
87
  ```
88
88
 
89
- **NEVER:**
89
+ **Anti-patterns:**
90
90
 
91
91
  - **Mix business logic with UI** - Separate concerns
92
92
  - Custom hooks for business logic: `useTaskManager()`
@@ -4,37 +4,31 @@
4
4
 
5
5
  ## Test Infrastructure Anti-Patterns
6
6
 
7
- Test helpers drift toward over-engineering faster than production code, because nothing reviews them for size. Keep a helper to one file of plain functions with the fewest abstractions the current tests need. Add a package, a cache class, or an abstraction only when a second test needs it today.
8
-
9
- **Pre-check (MANDATORY):**
10
- - [ ] ONE file?
11
- - [ ] Functions not classes?
12
- - [ ] Solving problem not building infrastructure?
13
- - [ ] Junior-dev-understandable?
7
+ Test helpers drift toward over-engineering faster than production code, because nothing reviews them for size. Keep a helper to one file of plain functions with the fewest abstractions the current tests need. Add a package, a cache class, or an abstraction only when a second test needs it today. A junior developer reads the helper on the first pass.
14
8
 
15
9
  ## Delete Useless Tests
16
10
 
17
11
  **Tests must add value.** Delete these types of tests:
18
12
 
19
- ### NEVER test:
13
+ ### Tests to delete
20
14
 
21
15
  **Function existence** - "Testing that the function exists doesn't add value. If the function doesn't exist, the code will not run."
22
16
  - Bad: `test_public_api_exports_download_function()` only verified `callable(func)`
23
- - Action: DELETE
17
+ - Action: delete
24
18
 
25
19
  **Constant values** - "It's silly to test that constant values have not changed."
26
20
  - Bad: `assert CACHE_DIR == "cache"`
27
- - Action: DELETE
21
+ - Action: delete
28
22
 
29
23
  **Duplicate coverage** - "Isn't this test case the same as test_X?"
30
- - Action: DELETE redundant tests
24
+ - Action: delete the redundant test
31
25
 
32
- ## Test Dependencies MUST FAIL
26
+ ## Missing dependencies fail the test
33
27
 
34
28
  "The tests should fail if they can't run. Missing system dependencies should make the test fail."
35
29
 
36
- - **NEVER** use `@skip_if_missing_dependency` or similar skip decorators
37
- - Tests FAIL with clear error -> forces installation
30
+ - Leave `@skip_if_missing_dependency` and other skip decorators out of test files. The code-rules lint flags each one.
31
+ - A missing dependency fails the test with a clear error, which prompts the install.
38
32
 
39
33
  ## Core Testing Principles
40
34
 
@@ -46,7 +40,7 @@ Test helpers drift toward over-engineering faster than production code, because
46
40
 
47
41
  ## React Testing Patterns
48
42
 
49
- ### ALWAYS:
43
+ ### Patterns
50
44
 
51
45
  **Test behavior, not implementation** - What user sees/does, not internal state
52
46
  - Bad: `expect(component.state.isOpen).toBe(true)`
@@ -65,7 +59,7 @@ Test helpers drift toward over-engineering faster than production code, because
65
59
  - Use `userEvent` over `fireEvent` (more realistic)
66
60
  - `await userEvent.click(button)` then assert result
67
61
 
68
- ### NEVER:
62
+ ### Anti-patterns
69
63
 
70
64
  **Snapshot test everything** - Only for stable, visual components
71
65
  - Snapshots break on any change, creating noise
@@ -13,9 +13,9 @@ Before writing any agent prompt, confirm you can answer all of these:
13
13
 
14
14
  When any answer is "I don't know", investigate first (read files, search code) or ask the user. Do not spawn with incomplete context.
15
15
 
16
- ## Step 2: Craft the prompt with /prompt-generator
16
+ ## Step 2: Write the prompt
17
17
 
18
- Run the `/prompt-generator` skill to produce a structured prompt. Feed it:
18
+ Write the brief yourself. Include:
19
19
 
20
20
  - The task description and goal
21
21
  - Target files and directories found in Step 1
@@ -23,7 +23,7 @@ Run the `/prompt-generator` skill to produce a structured prompt. Feed it:
23
23
  - Expected output format
24
24
  - Acceptance criteria
25
25
 
26
- The skill asks one to three clarifying questions when information is missing — this is the built-in context verification. Use the skill's output as the agent's `prompt` parameter.
26
+ Use the brief as the agent's `prompt` parameter.
27
27
 
28
28
  ## Step 3: Spawn the agent
29
29
 
@@ -31,7 +31,7 @@ Pass the structured prompt from Step 2 to the Agent or Task tool.
31
31
 
32
32
  ## Why
33
33
 
34
- An agent that receives a vague prompt wastes tokens exploring in circles, produces code that misses constraints, and needs a second pass. A small investment in prompt quality through `/prompt-generator` saves a long agent failure. This holds for Explore agents, which waste context on unfocused searches, and for execution agents, which write wrong code.
34
+ An agent that receives a vague prompt wastes tokens exploring in circles, produces code that misses constraints, and needs a second pass. A small investment in prompt quality saves a long agent failure. This holds for Explore agents, which waste context on unfocused searches, and for execution agents, which write wrong code.
35
35
 
36
36
  ## Relationship to other rules
37
37