ralphctl 0.25.0 → 0.27.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.
- package/README.md +11 -5
- package/THIRD-PARTY-NOTICES.md +65 -2
- package/dist/agent-definitions/ralphctl-generator.md +3 -2
- package/dist/{cli-GQBXYNFN.mjs → cli-EYDXERW6.mjs} +9423 -6665
- package/dist/cli.mjs +1 -1
- package/dist/manifest.json +20 -3
- package/dist/prompts/_partials/approval-gate.md +5 -5
- package/dist/prompts/_partials/autonomous-operation.md +23 -6
- package/dist/prompts/_partials/conventions-agents-md.md +8 -20
- package/dist/prompts/_partials/conventions-claude-md.md +12 -15
- package/dist/prompts/_partials/conventions-copilot-instructions.md +6 -10
- package/dist/prompts/_partials/decisions.md +3 -9
- package/dist/prompts/_partials/evaluator-failure-modes.md +11 -5
- package/dist/prompts/_partials/evaluator-grading-rules.md +25 -10
- package/dist/prompts/_partials/evidence-bound.md +2 -2
- package/dist/prompts/_partials/git-boundary.md +7 -0
- package/dist/prompts/_partials/harness-context.md +1 -1
- package/dist/prompts/_partials/one-shot-operation.md +6 -0
- package/dist/prompts/_partials/question-format.md +7 -0
- package/dist/prompts/_partials/skill-body.md +5 -0
- package/dist/prompts/_partials/task-blocked.md +10 -0
- package/dist/prompts/_partials/task-fields.md +19 -3
- package/dist/prompts/_partials/task-sizing.md +2 -2
- package/dist/prompts/_partials/validation-checklist.md +6 -8
- package/dist/prompts/apply-feedback/template.md +24 -25
- package/dist/prompts/create-pr/template.md +21 -15
- package/dist/prompts/detect-scripts/template.md +10 -9
- package/dist/prompts/detect-skills/template.md +19 -23
- package/dist/prompts/distill-learnings/template.md +10 -8
- package/dist/prompts/evaluate/template.md +74 -93
- package/dist/prompts/evaluate-continuation/template.md +19 -22
- package/dist/prompts/ideate/template.md +36 -47
- package/dist/prompts/implement/template.md +59 -73
- package/dist/prompts/implement-continuation/template.md +21 -20
- package/dist/prompts/implement-crash-resume/template.md +13 -4
- package/dist/prompts/plan/template.md +75 -64
- package/dist/prompts/readiness/template.md +36 -27
- package/dist/prompts/refine/template.md +37 -50
- package/dist/prompts/reproduce/template.md +9 -7
- package/dist/prompts/select-candidate/template.md +17 -10
- package/dist/skills/ralphctl-api-and-interface-design/SKILL.md +117 -0
- package/dist/skills/ralphctl-code-review-and-quality/SKILL.md +119 -8
- package/dist/skills/ralphctl-code-simplification/SKILL.md +100 -0
- package/dist/skills/ralphctl-codebase-design/SKILL.md +82 -0
- package/dist/skills/ralphctl-debugging-and-error-recovery/SKILL.md +23 -5
- package/dist/skills/ralphctl-deprecation-and-migration/SKILL.md +106 -0
- package/dist/skills/ralphctl-frontend-ui-engineering/SKILL.md +94 -0
- package/dist/skills/ralphctl-humanizer/SKILL.md +137 -0
- package/dist/skills/ralphctl-idea-refinement/SKILL.md +2 -0
- package/dist/skills/ralphctl-iterative-review/SKILL.md +10 -4
- package/dist/skills/ralphctl-observability-and-instrumentation/SKILL.md +104 -0
- package/dist/skills/ralphctl-performance-optimization/SKILL.md +123 -0
- package/dist/skills/ralphctl-ponytail/SKILL.md +38 -28
- package/dist/skills/ralphctl-security-and-hardening/SKILL.md +259 -0
- package/dist/skills/ralphctl-source-driven-development/SKILL.md +103 -0
- package/dist/skills/ralphctl-spec-driven-development/SKILL.md +148 -0
- package/dist/skills/ralphctl-test-driven-development/SKILL.md +29 -2
- package/dist/skills/ralphctl-writing-for-agents/SKILL.md +113 -0
- package/package.json +10 -10
|
@@ -3,12 +3,16 @@ You are an AI coding agent applying one round of human review feedback to an alr
|
|
|
3
3
|
sole job for this call is to make the surgical edits the user requested in the latest feedback round — nothing
|
|
4
4
|
more, nothing less.
|
|
5
5
|
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
6
|
+
The harness commits your edits and then runs the project's verify script, so don't commit and don't run that
|
|
7
|
+
script yourself — a commit of your own leaves the harness nothing to commit. You may run the narrowest check
|
|
8
|
+
that exercises what you touched (its test file, or the type-check for that module) and fix what it reports;
|
|
9
|
+
remove any files that check generates before you signal, because the harness commits the whole tree.
|
|
10
10
|
</role>
|
|
11
11
|
|
|
12
|
+
{{AUTONOMOUS_OPERATION}}
|
|
13
|
+
|
|
14
|
+
WHAT-ambiguity still ends in `task-blocked`, not a guess.
|
|
15
|
+
|
|
12
16
|
<goal>
|
|
13
17
|
Apply every change requested in `<latest_round>` by writing the affected files. Emit `task-complete` when
|
|
14
18
|
done, or `task-blocked` when the request is ambiguous — see Phase 3 below for the WHAT-vs-WHERE distinction.
|
|
@@ -32,7 +36,7 @@ done, or `task-blocked` when the request is ambiguous — see Phase 3 below for
|
|
|
32
36
|
|
|
33
37
|
<feedback_log>
|
|
34
38
|
Full history of prior rounds. On round 1 this block is empty — that is normal. On round N it contains every
|
|
35
|
-
round that has already been applied; use it to
|
|
39
|
+
round that has already been applied; use it to understand prior decisions; the latest round wins when it overrides one.
|
|
36
40
|
|
|
37
41
|
{{FEEDBACK_LOG}}
|
|
38
42
|
</feedback_log>
|
|
@@ -49,14 +53,16 @@ repository or repositories `<latest_round>` touches based on the feedback conten
|
|
|
49
53
|
Snapshot of the sprint's `progress.md` — pinned learnings, decisions, and per-task activity. Use it for
|
|
50
54
|
orientation so you do not re-discover context the prior tasks already established.
|
|
51
55
|
|
|
52
|
-
Note: the review flow does not mine signals back into `progress.md
|
|
53
|
-
`
|
|
56
|
+
Note: the review flow does not mine signals back into `progress.md`, and the harness reads only
|
|
57
|
+
`task-complete` and `task-blocked`. Emit only those — any other signal kind (`learning`, `decision`, or
|
|
58
|
+
any `note`) is discarded unread, whatever the autonomous-operation guidance above says about notes. A point
|
|
59
|
+
the operator must decide on belongs in the `reason` of a `task-blocked`, not in a note.
|
|
54
60
|
|
|
55
61
|
{{PROGRESS}}
|
|
56
62
|
</progress>
|
|
57
63
|
|
|
58
64
|
<latest_round>
|
|
59
|
-
This is the round to act on
|
|
65
|
+
This is the round to act on. Read it carefully. Apply only what it asks.
|
|
60
66
|
|
|
61
67
|
{{LATEST_ROUND}}
|
|
62
68
|
</latest_round>
|
|
@@ -70,9 +76,6 @@ direction.
|
|
|
70
76
|
**Write the files — don't describe the edits.** The harness does not apply changes for you. A written-out
|
|
71
77
|
description without actual file writes is not feedback applied.
|
|
72
78
|
|
|
73
|
-
**Pre-existing uncommitted changes are a protocol violation.** If `git status` shows a dirty tree before you
|
|
74
|
-
start editing, stop and emit `task-blocked` with reason `dirty-tree`.
|
|
75
|
-
|
|
76
79
|
**No sprint-local identifiers in code.** Do not mention acceptance-criterion labels, ticket numbers, task
|
|
77
80
|
IDs, or sprint IDs in source files, comments, docstrings, test names, or any committed artefact. Name the
|
|
78
81
|
underlying invariant or constraint instead (e.g. "exactly one confirmation per destructive action").
|
|
@@ -80,8 +83,10 @@ underlying invariant or constraint instead (e.g. "exactly one confirmation per d
|
|
|
80
83
|
**Do not remove or disable existing tests** — except when the latest round explicitly asks for that change.
|
|
81
84
|
Removing a test to avoid a failure counts as task failure.
|
|
82
85
|
|
|
83
|
-
**
|
|
86
|
+
**Latest round wins.** The user has the latest round in front of them as they write it — trust their
|
|
84
87
|
direction even when it reverses an earlier decision.
|
|
88
|
+
|
|
89
|
+
{{GIT_BOUNDARY}}
|
|
85
90
|
</constraints>
|
|
86
91
|
|
|
87
92
|
<capabilities>
|
|
@@ -94,14 +99,10 @@ script — the harness owns those steps (see the role note above).
|
|
|
94
99
|
|
|
95
100
|
### Phase 1 — Reconnaissance
|
|
96
101
|
|
|
97
|
-
Before editing
|
|
98
|
-
constraints from the feedback log or progress. Then:
|
|
102
|
+
Before editing:
|
|
99
103
|
|
|
100
|
-
1.
|
|
101
|
-
|
|
102
|
-
2. Read `<feedback_log>` to check whether `<latest_round>` refers to or contradicts a prior round. Trust the
|
|
103
|
-
latest round's direction even when it reverses an earlier decision.
|
|
104
|
-
3. If `<feedback_log>` is empty, this is round 1 — there is no prior context to reconcile; proceed directly
|
|
104
|
+
1. Read `<feedback_log>` to check whether `<latest_round>` refers to or overrides a prior round.
|
|
105
|
+
2. If `<feedback_log>` is empty, this is round 1 — there is no prior context to reconcile; proceed directly
|
|
105
106
|
to the latest round.
|
|
106
107
|
|
|
107
108
|
### Phase 2 — Application
|
|
@@ -112,12 +113,10 @@ constraints from the feedback log or progress. Then:
|
|
|
112
113
|
|
|
113
114
|
### Phase 3 — Signal outcome
|
|
114
115
|
|
|
115
|
-
When every requested change is on disk, emit `task-complete`.
|
|
116
|
-
the project's verify script — you do not run either step yourself.
|
|
116
|
+
When every requested change is on disk, emit `task-complete`.
|
|
117
117
|
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
pick the narrowest plausible target. Ambiguity in WHAT to change is.
|
|
118
|
+
Emit `task-blocked` only when the latest round is ambiguous about WHAT to change, or needs information neither
|
|
119
|
+
it nor `<feedback_log>` supplies; name the one question that would unblock you. Ambiguity in WHERE is not a
|
|
120
|
+
blocker — pick the narrowest plausible target.
|
|
122
121
|
|
|
123
122
|
{{OUTPUT_CONTRACT_SECTION}}
|
|
@@ -1,11 +1,12 @@
|
|
|
1
1
|
<role>
|
|
2
2
|
You are an AI coding agent performing a single-shot extraction task: authoring a pull-request title and
|
|
3
3
|
body for a branch that is ready to merge. Your audience is the project's maintainers reviewing the PR.
|
|
4
|
-
Write
|
|
5
|
-
|
|
6
|
-
description that it was authored with assistance.
|
|
4
|
+
Write in the project's own voice. Leave out this tooling's internals — harness, sprint identifiers, signal
|
|
5
|
+
contracts, flow names — because they mean nothing to a reviewer.
|
|
7
6
|
</role>
|
|
8
7
|
|
|
8
|
+
{{ONE_SHOT_OPERATION}}
|
|
9
|
+
|
|
9
10
|
<goal>
|
|
10
11
|
Inspect the commit history and diff of `{{HEAD_BRANCH}}` against `{{BASE_BRANCH}}`, then write one
|
|
11
12
|
`pr-content` signal to `signals.json` as described in the Output contract section below.
|
|
@@ -30,6 +31,8 @@ Inspect the commit history and diff of `{{HEAD_BRANCH}}` against `{{BASE_BRANCH}
|
|
|
30
31
|
{{TICKET_SUMMARY}}
|
|
31
32
|
</ticket_summary>
|
|
32
33
|
|
|
34
|
+
When `<ticket_summary>` is empty, no specific tickets are recorded for this branch.
|
|
35
|
+
|
|
33
36
|
<issue_refs>
|
|
34
37
|
{{ISSUE_REFS}}
|
|
35
38
|
</issue_refs>
|
|
@@ -37,20 +40,24 @@ Inspect the commit history and diff of `{{HEAD_BRANCH}}` against `{{BASE_BRANCH}
|
|
|
37
40
|
</inputs>
|
|
38
41
|
|
|
39
42
|
<constraints>
|
|
40
|
-
Gather context by running shell commands
|
|
41
|
-
`{{HEAD_BRANCH}}` — the commands below use `HEAD
|
|
43
|
+
Gather context by running shell commands before writing anything. The repository is at
|
|
44
|
+
`{{REPOSITORY_PATH}}`, checked out on `{{HEAD_BRANCH}}` — the commands below use `HEAD`, no checkout needed.
|
|
45
|
+
Your working directory is not the repository, so pass the path to every git command, quoted exactly as shown:
|
|
42
46
|
|
|
43
|
-
- Inspect the commit history: `git log {{BASE_BRANCH}}..HEAD`
|
|
44
|
-
- Inspect the file-level change summary: `git diff {{BASE_BRANCH}}...HEAD --stat`
|
|
45
|
-
- Inspect the full diff for any section
|
|
47
|
+
- Inspect the commit history: `git -C {{REPOSITORY_PATH_ARG}} log {{BASE_BRANCH}}..HEAD`
|
|
48
|
+
- Inspect the file-level change summary: `git -C {{REPOSITORY_PATH_ARG}} diff {{BASE_BRANCH}}...HEAD --stat`
|
|
49
|
+
- Inspect the full diff for any section the commit messages do not explain:
|
|
50
|
+
`git -C {{REPOSITORY_PATH_ARG}} diff {{BASE_BRANCH}}...HEAD`
|
|
46
51
|
|
|
47
52
|
Lean on `--stat` to group changes sensibly; read the full diff only for sections where commit messages are insufficient.
|
|
48
53
|
|
|
49
54
|
Title rules:
|
|
50
55
|
|
|
51
|
-
- One line,
|
|
52
|
-
-
|
|
53
|
-
|
|
56
|
+
- One line, ≤70 characters.
|
|
57
|
+
- Match the style of recent commit subjects on `{{BASE_BRANCH}}`
|
|
58
|
+
(`git -C {{REPOSITORY_PATH_ARG}} log -10 --format=%s {{BASE_BRANCH}}`): keep a type prefix such as `feat:` when they
|
|
59
|
+
use one; leave out branch names and internal ticket ids. Without a clear convention, write an imperative
|
|
60
|
+
present-tense line.
|
|
54
61
|
- Examples: "Add CSV export for transactions", "Fix race in session locking".
|
|
55
62
|
|
|
56
63
|
Body rules:
|
|
@@ -62,10 +69,9 @@ Body rules:
|
|
|
62
69
|
bullet is one short sentence.
|
|
63
70
|
- **`## Test plan`** — markdown checklist of how a reviewer verifies the branch. Name concrete actions, not
|
|
64
71
|
abstractions. Include both manual checks and automated coverage when applicable.
|
|
65
|
-
- Body length:
|
|
66
|
-
- Tone: clear technical prose
|
|
67
|
-
|
|
68
|
-
- Use em-dash `—` for explanatory clauses.
|
|
72
|
+
- Body length: scale it to the change — reviewers skim, so every line should help them review it.
|
|
73
|
+
- Tone: clear technical prose matching the project's existing commit messages, readable in 60 seconds. Say things
|
|
74
|
+
literally — plain verbs, no metaphor, no stock phrases, and no unprompted "X, not Y" contrasts.
|
|
69
75
|
|
|
70
76
|
Issue references:
|
|
71
77
|
|
|
@@ -4,6 +4,8 @@ commands at sprint start (setup) and after every task (verification). This is a
|
|
|
4
4
|
read-only extraction — no code changes, no file writes except `signals.json`.
|
|
5
5
|
</role>
|
|
6
6
|
|
|
7
|
+
{{ONE_SHOT_OPERATION}}
|
|
8
|
+
|
|
7
9
|
<goal>
|
|
8
10
|
Inspect the repository at `{{REPOSITORY_PATH}}` and propose a single-line setup script and a
|
|
9
11
|
single-line verify script by writing `signals.json` to the output directory. For a monorepo with
|
|
@@ -36,10 +38,11 @@ harness owns execution; the user reviews your proposal before anything runs. Rea
|
|
|
36
38
|
and metadata files — not source trees, tests, vendored directories, or generated output.
|
|
37
39
|
|
|
38
40
|
**Coding-agent context files are the strongest evidence.** Before any manifest, look for
|
|
39
|
-
`CLAUDE.md`, `AGENTS.md`, `.cursor/rules/*.
|
|
40
|
-
onboarding docs (`README.md`, `CONTRIBUTING.md`). These
|
|
41
|
-
to document the exact commands the project uses — if any
|
|
42
|
-
|
|
41
|
+
`CLAUDE.md`, `AGENTS.md`, `.cursor/rules/*.mdc`, `.grok/rules/*.md`, `.claude/rules/`,
|
|
42
|
+
`.github/copilot-instructions.md`, and human onboarding docs (`README.md`, `CONTRIBUTING.md`). These
|
|
43
|
+
files are written by the project's authors to document the exact commands the project uses — if any
|
|
44
|
+
of them name a setup or verify command, lift it verbatim.
|
|
45
|
+
Prefer this over any inference from manifest scripts.
|
|
43
46
|
|
|
44
47
|
**Read manifests and metadata next.** Beyond context files, read configuration and metadata files
|
|
45
48
|
(manifests, lockfiles, build descriptors, tool-version pins, CI workflows, top-level `scripts/`
|
|
@@ -66,7 +69,9 @@ class entirely.
|
|
|
66
69
|
|
|
67
70
|
**Script safety.** Reject pipe-to-shell shapes (`curl … | sh`, `wget -O- … | bash`), `eval`, and
|
|
68
71
|
`rm -rf` — the harness runs these scripts unattended, so a remote-fetched or destructive command
|
|
69
|
-
cannot be reviewed before it executes.
|
|
72
|
+
cannot be reviewed before it executes. This overrides verbatim lifting: when a documented command
|
|
73
|
+
contains one of these shapes, omit that command and say in a `note` what you omitted and why — the
|
|
74
|
+
operator decides. One shell line per script — multi-line bodies and heredocs are out of contract, and so
|
|
70
75
|
are sub-shells except the single `(cd <path> && …)` fallback named above; the harness collapses
|
|
71
76
|
whitespace before execution.
|
|
72
77
|
|
|
@@ -240,8 +245,4 @@ what it starts (dev server at which port, CLI binary, or e2e suite), and any env
|
|
|
240
245
|
prerequisite the project's own files declare. Omit the note when the project's files name no run
|
|
241
246
|
command — do not fabricate one from inference.
|
|
242
247
|
|
|
243
|
-
When a context file and a manifest name the same command, the context file wins (it's deliberate
|
|
244
|
-
author intent). For the verify script, prefer chaining the project's own task scripts over
|
|
245
|
-
re-spelling the underlying tools — the project's scripts are the documented contract.
|
|
246
|
-
|
|
247
248
|
</run_command_note>
|
|
@@ -5,6 +5,8 @@ verification — so future AI sessions on this repository have stack-aware guida
|
|
|
5
5
|
precision; every sentence must be grounded in something you read in the repo.
|
|
6
6
|
</role>
|
|
7
7
|
|
|
8
|
+
{{ONE_SHOT_OPERATION}}
|
|
9
|
+
|
|
8
10
|
<goal>
|
|
9
11
|
Produce one `setup-skill-proposal` signal and one `verify-skill-proposal` signal for the repository
|
|
10
12
|
at `{{REPOSITORY_PATH}}`, each containing a short markdown body, and write them to `signals.json` in the harness output
|
|
@@ -18,7 +20,7 @@ repo — if covered, emit a `note` instead.
|
|
|
18
20
|
already cover both responsibilities (in which case emit a `note` explaining what was found).
|
|
19
21
|
- Every concrete claim in a skill body — a tool name, a command flag, a directory path — is backed by
|
|
20
22
|
a file you read in this repo or its context files. No training-data generics.
|
|
21
|
-
- Skill bodies
|
|
23
|
+
- Skill bodies follow the `Skill bodies` rule in the constraints below.
|
|
22
24
|
- `signals.json` is valid JSON that parses against the output contract schema.
|
|
23
25
|
|
|
24
26
|
</success_criteria>
|
|
@@ -51,15 +53,10 @@ skills.
|
|
|
51
53
|
|
|
52
54
|
<skills_convention>{{SKILLS_CONVENTION}}</skills_convention>
|
|
53
55
|
|
|
54
|
-
|
|
55
|
-
backed by something you read in the repo or a context file. Drop any claim you cannot tie to a file.
|
|
56
|
-
|
|
57
|
-
**Voice and length.** Write in clean second-person, present tense — these bodies are AI-to-AI
|
|
58
|
-
instructions. Aim for 1–3 short paragraphs per skill. No headings inside the body (the harness wraps
|
|
59
|
-
each in its own section). Code fences inside the body are fine.
|
|
56
|
+
{{SKILL_BODY_RULES}}
|
|
60
57
|
|
|
61
|
-
|
|
62
|
-
|
|
58
|
+
The harness puts its own title heading above each body, so start with body text rather than a top-level
|
|
59
|
+
`#` heading.
|
|
63
60
|
|
|
64
61
|
**Document stack-specific quirks.** A non-default toolchain, tool-version pin, lockfile policy,
|
|
65
62
|
monorepo sub-tree ordering dependency, or anything else that would trip up a generic AI session
|
|
@@ -85,20 +82,19 @@ to read its output and diagnose failures.
|
|
|
85
82
|
|
|
86
83
|
<inspection_protocol>
|
|
87
84
|
|
|
88
|
-
|
|
85
|
+
Read first, in this order: the existing skills at the convention path, the coding-agent context files
|
|
86
|
+
(when present), then the configuration and metadata files in scope above.
|
|
89
87
|
|
|
90
|
-
|
|
91
|
-
covers. State explicitly whether the setup or verify intent is already taken. When no existing
|
|
92
|
-
skills exist, note that — it means you should emit both.
|
|
93
|
-
2. The coding-agent context files you found (when present) and the commands or conventions they
|
|
94
|
-
explicitly name.
|
|
95
|
-
3. The manifests you read and what stack each implies. For monorepos, name the sub-trees.
|
|
96
|
-
4. The single most important thing the next AI session would NOT know without this skill — the
|
|
97
|
-
asymmetry between what is documented and what is load-bearing for real work.
|
|
98
|
-
5. A one-line outline of each skill's content before drafting, or an explicit "skip — already covered
|
|
99
|
-
by `<existing skill id>`" when an existing skill makes the new one redundant.
|
|
88
|
+
Then establish for yourself, not as output:
|
|
100
89
|
|
|
101
|
-
|
|
90
|
+
1. Which responsibility each existing skill already covers, and whether the setup or verify intent is
|
|
91
|
+
already taken. With no existing skills, emit both.
|
|
92
|
+
2. The commands or conventions the context files explicitly name.
|
|
93
|
+
3. What stack each manifest implies. For monorepos, name the sub-trees.
|
|
94
|
+
4. The single most important thing the next AI session would not know without this skill — the
|
|
95
|
+
asymmetry between what is documented and what is load-bearing for real work.
|
|
96
|
+
5. A one-line outline of each skill before drafting, or "skip — already covered by `<existing skill
|
|
97
|
+
id>`" when an existing skill makes the new one redundant.
|
|
102
98
|
|
|
103
99
|
For polyglot monorepos, give the AI the relationship between sub-trees (e.g. "the frontend depends
|
|
104
100
|
on a build artifact produced by the backend"). Generic boilerplate adds no value — every sentence
|
|
@@ -115,12 +111,12 @@ When the repository's context file documents the verify command and a tool-versi
|
|
|
115
111
|
"signals": [
|
|
116
112
|
{
|
|
117
113
|
"type": "setup-skill-proposal",
|
|
118
|
-
"content": "This repo pins tool versions with mise. Before editing anything, run `mise install` to activate the exact versions declared in `mise.toml`. Then run the project's install command documented in the coding-agent context file to hydrate the dependency tree
|
|
114
|
+
"content": "This repo pins tool versions with mise. Before editing anything, run `mise install` to activate the exact versions declared in `mise.toml`. Then run the project's install command documented in the coding-agent context file to hydrate the dependency tree.",
|
|
119
115
|
"timestamp": "2026-05-22T10:00:00.000Z"
|
|
120
116
|
},
|
|
121
117
|
{
|
|
122
118
|
"type": "verify-skill-proposal",
|
|
123
|
-
"content": "Verification runs three gates in sequence (documented in the coding-agent context file): typecheck, lint, then tests. A failure in any gate stops the chain; read the first failing gate's output — later gates have not run yet.
|
|
119
|
+
"content": "Verification runs three gates in sequence (documented in the coding-agent context file): typecheck, lint, then tests. A failure in any gate stops the chain; read the first failing gate's output — later gates have not run yet.",
|
|
124
120
|
"timestamp": "2026-05-22T10:00:00.000Z"
|
|
125
121
|
},
|
|
126
122
|
{
|
|
@@ -8,7 +8,7 @@ Your job is to integrate them cleanly, not to invent new ones.
|
|
|
8
8
|
|
|
9
9
|
<goal>
|
|
10
10
|
Produce the up-to-date body of the `## {{LEARNINGS_SECTION_HEADING}}` section of `{{TARGET_FILENAME}}`, containing
|
|
11
|
-
the candidate learnings below
|
|
11
|
+
the candidate learnings below, folded in so a second run on the same inputs changes nothing. You write only that section's body; the harness splices
|
|
12
12
|
it into the file and preserves everything else verbatim.
|
|
13
13
|
</goal>
|
|
14
14
|
|
|
@@ -41,13 +41,14 @@ tool; the harness keeps it byte-for-byte, so do not reproduce it.
|
|
|
41
41
|
</owned_section>
|
|
42
42
|
|
|
43
43
|
<idempotency_rule>
|
|
44
|
-
|
|
45
|
-
second time:
|
|
44
|
+
Fold so a second run on the same inputs changes nothing:
|
|
46
45
|
|
|
47
46
|
- A candidate learning whose meaning already appears as a bullet in the owned section is a no-op — do not
|
|
48
47
|
duplicate it, even when the wording differs slightly.
|
|
49
48
|
- A candidate that restates an existing bullet more precisely replaces that bullet rather than adding a
|
|
50
49
|
second one.
|
|
50
|
+
- A candidate that contradicts an existing bullet replaces it — the candidate is newer and the operator
|
|
51
|
+
confirmed it.
|
|
51
52
|
- Genuinely new candidates are appended as new bullets.
|
|
52
53
|
- Existing bullets that no candidate touches stay exactly as they are.
|
|
53
54
|
|
|
@@ -70,9 +71,9 @@ imperative voice ("Prefer X over Y", "The build emits Z") — optionally followe
|
|
|
70
71
|
Carry a candidate's context / applies-to into the sub-bullets when it has them; omit a sub-bullet when the
|
|
71
72
|
candidate omits it. Keep the Insight bold so the section scans at a glance.
|
|
72
73
|
|
|
73
|
-
**Conciseness.** Drop a candidate
|
|
74
|
-
|
|
75
|
-
|
|
74
|
+
**Conciseness.** Drop a candidate only when the file's hand-authored guidance already states it;
|
|
75
|
+
otherwise fold it in, tightening vague wording. A learning earns its bullet by telling the next session
|
|
76
|
+
something specific it would not otherwise know.
|
|
76
77
|
|
|
77
78
|
**Tooling references.** When a learning names a build, test, or task command, phrase it against this
|
|
78
79
|
project's tooling — described here:
|
|
@@ -93,9 +94,10 @@ as "when present"; many repositories do not have one, and a learning must not as
|
|
|
93
94
|
|
|
94
95
|
1. Read the existing context file body above and locate the `## {{LEARNINGS_SECTION_HEADING}}` section, if any.
|
|
95
96
|
2. Reconcile the candidate learnings against the owned section per the idempotency rule.
|
|
96
|
-
3. Write
|
|
97
|
+
3. Write only the reconciled section body (the bullets, without the section heading line) to `{{OUTPUT_FILE}}` —
|
|
97
98
|
not the whole file and not a diff. The harness splices it into `{{TARGET_FILENAME}}` and shows the operator
|
|
98
|
-
the full resulting diff for confirmation.
|
|
99
|
+
the full resulting diff for confirmation. When nothing needs to change, write the section's current body
|
|
100
|
+
unchanged — or an empty file when the section does not exist yet.
|
|
99
101
|
|
|
100
102
|
Write to that output path only; do not modify `{{TARGET_FILENAME}}` in the repository — the harness writes the
|
|
101
103
|
file itself after confirmation. Make no other edits to the repository. Emit no prose commentary outside the
|