@lab43/q 0.4.0 → 0.5.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/.claude-plugin/plugin.json +1 -1
- package/README.md +17 -12
- package/agents/adversarial-reviewer.md +3 -3
- package/conventions/documentation.md +17 -14
- package/conventions/extensions.md +8 -4
- package/conventions/issue-tracking.md +11 -2
- package/conventions/plans.md +1 -1
- package/conventions/principles.md +2 -2
- package/conventions/pull-requests.md +2 -2
- package/conventions/writing.md +8 -0
- package/hooks/session-start.mjs +9 -6
- package/package.json +17 -3
- package/references/agent-briefing.md +15 -14
- package/references/q-state.md +1 -1
- package/references/run-contract.md +10 -5
- package/skills/address-feedback/SKILL.md +7 -7
- package/skills/create-plan/SKILL.md +4 -4
- package/skills/drive/SKILL.md +1 -1
- package/skills/groom-docs/SKILL.md +9 -9
- package/skills/{tackle → implement}/SKILL.md +11 -11
- package/skills/implement-plan/SKILL.md +11 -11
- package/skills/install/SKILL.md +11 -11
- package/skills/parallelize/SKILL.md +5 -5
- package/skills/review/SKILL.md +3 -3
- package/skills/sync/SKILL.md +2 -2
- package/skills/triage/SKILL.md +11 -11
- package/skills/uninstall-extension/SKILL.md +8 -8
- package/skills/update/SKILL.md +10 -9
- package/skills/update-docs/SKILL.md +12 -12
- package/skills/upstream/SKILL.md +7 -7
|
@@ -33,7 +33,7 @@ description: Work feedback on an open pull request — the reviewer's comments,
|
|
|
33
33
|
```
|
|
34
34
|
|
|
35
35
|
Skip every thread `isResolved` reports closed — the reviewer ended those. An `isOutdated` thread is still live: it anchors to a line that later commits moved. Skip a thread whose last comment already answers the one before it. An earlier round settled that item, and the reviewer has not written back.
|
|
36
|
-
5. Ignore every comment that raises nothing to settle. A callout explaining the change under review is the common case (see: q conventions/pull-requests.md, Diff comments).
|
|
36
|
+
5. Ignore every comment that raises nothing to settle. A callout explaining the change under review is the common case (see: @lab43/q conventions/pull-requests.md, Diff comments).
|
|
37
37
|
6. Gather the user's own feedback. The invocation may carry it. Ask the user what they want changed whenever the PR carries no feedback of its own.
|
|
38
38
|
7. Build the agenda from everything gathered — one item per inline thread, top-level comment, or review summary that carries feedback, plus one per point the user raised. Merge items that share a root cause or answer each other. Record where each item came from, because that decides how it gets answered. Post the agenda — each item's gist in one line, in the order you propose to take them. No positions yet, and no edits.
|
|
39
39
|
|
|
@@ -74,7 +74,7 @@ Ask one batch, carrying only what the user has to rule on:
|
|
|
74
74
|
- whether each resolution is posted back where the feedback was written, asked once for the round. Skip it when nothing was written on the PR.
|
|
75
75
|
- the review mode (see: `${CLAUDE_PLUGIN_ROOT}/references/run-contract.md`, Review modes). In this run, ship covers commit and push to the PR. Local commits nothing until the user has reviewed the diff.
|
|
76
76
|
|
|
77
|
-
Answers settle decisions. They are not the agreement. Close the conversation by summarizing the agreed scope and asking for the go-ahead. That
|
|
77
|
+
Answers settle decisions. They are not the agreement. Close the conversation by summarizing the agreed scope and asking for the go-ahead. That go-ahead, not the last answer, is what makes the rest of the run autonomous.
|
|
78
78
|
|
|
79
79
|
An item beyond this PR is not resolved here. Settle the rest of the round, and take it to `/q:create-plan` or to the tracker on the user's call.
|
|
80
80
|
|
|
@@ -89,18 +89,18 @@ When the agreed fixes turn out to need a redesign, or more change than this PR c
|
|
|
89
89
|
|
|
90
90
|
## Step 5: Adversarial review
|
|
91
91
|
|
|
92
|
-
Validate the round (see: `${CLAUDE_PLUGIN_ROOT}/references/run-contract.md`, Validation) with the **correctness** and **conventions** lenses. The round is the product, so its diff runs from Step 4's recorded SHA: `git diff <recorded-sha>...HEAD` in ship mode, or the uncommitted diff plus the changed-file list in local
|
|
92
|
+
Validate the round (see: `${CLAUDE_PLUGIN_ROOT}/references/run-contract.md`, Validation) with the **correctness** and **conventions** lenses. The round is the product, so its diff runs from Step 4's recorded SHA: `git diff <recorded-sha>...HEAD` in ship mode, or the uncommitted diff plus the changed-file list in local mode. Hand the reviewers the agreed dispositions as the scope. Per loop round, re-drive a surface only when a fix could change what driving showed.
|
|
93
93
|
|
|
94
94
|
## Step 6: Deliver to the PR
|
|
95
95
|
|
|
96
|
-
1. **
|
|
96
|
+
1. **The local gate**: run it over the session's uncommitted work (see: `${CLAUDE_PLUGIN_ROOT}/references/run-contract.md`, The local gate).
|
|
97
97
|
2. **Push**: `git push origin HEAD`.
|
|
98
|
-
3. **Bring the PR body up to date** wherever the round changed what it claims, the findings that survived Step 5 included (see: q conventions/pull-requests.md).
|
|
99
|
-
4. **Reply**, when replying was agreed: post each item's resolution where the feedback was written. Skip an item the user raised in session. It has no thread to answer. Give the reviewer what they need to understand it — the answer, the evidence behind a push-back, or the reason a fix took the shape it did. Sign each reply (source: q conventions/writing.md, Sign what you post). Write each reply to a file and pass it by path, so apostrophes in the prose can't break the command. Reply to an inline thread at its first comment's `databaseId`:
|
|
98
|
+
3. **Bring the PR body up to date** wherever the round changed what it claims, the findings that survived Step 5 included (see: @lab43/q conventions/pull-requests.md).
|
|
99
|
+
4. **Reply**, when replying was agreed: post each item's resolution where the feedback was written. Skip an item the user raised in session. It has no thread to answer. Give the reviewer what they need to understand it — the answer, the evidence behind a push-back, or the reason a fix took the shape it did. Sign each reply (source: @lab43/q conventions/writing.md, Sign what you post). Write each reply to a file and pass it by path, so apostrophes in the prose can't break the command. Reply to an inline thread at its first comment's `databaseId`:
|
|
100
100
|
|
|
101
101
|
```bash
|
|
102
102
|
gh api --method POST repos/<owner>/<repo>/pulls/<n>/comments/<comment-id>/replies -F body=@<reply-file>
|
|
103
103
|
```
|
|
104
104
|
|
|
105
105
|
Answer a top-level comment or a review summary with `gh pr comment <n> --body-file <reply-file>`. Never mark a thread resolved — that is the reviewer's call.
|
|
106
|
-
5. Close the session by reporting each item's resolution, any caveats, any amendment raised instead of applied, and any follow-up work — filed in the tracker on the user's agreement (source: q conventions/issue-tracking.md, Ask before filing).
|
|
106
|
+
5. Close the session by reporting each item's resolution, any caveats, any amendment raised instead of applied, and any follow-up work — filed in the tracker on the user's agreement (source: @lab43/q conventions/issue-tracking.md, Ask before filing).
|
|
@@ -13,14 +13,14 @@ The idea to plan comes from the invocation, at any fidelity — a phrase ("email
|
|
|
13
13
|
- **Plan, don't implement**: implement nothing, and make no commits unless the user asks. The plan doc is this skill's product — `docs/plans/<plan-name>.md` (create the directory on the first plan). Two writes sit outside it: what driving taught, recorded in the project's driving manual, and the corrections planning turns up (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Corrections become rules).
|
|
14
14
|
- **Ground everything**: every claim about current behavior comes from reading the code (cite `file:line`); every external fact (package versions, library APIs, option names, client support) is verified during planning, never stated from memory — online where reading settles it, and through `/q:drive` where only running something can, naming the question to settle as what to exercise. A plan resting on an unverified assumption is a planning failure, not a note for the implementer.
|
|
15
15
|
- **Evidence can flip decisions**: when exploration contradicts a tentative decision (a planned feature depends on data that turns out not to exist), surface the finding prominently and re-decide before it gets written into the plan.
|
|
16
|
-
- **Tooling limitations never dictate content** (see: q conventions/principles.md): if a design choice would break a test helper, CI step, or script, the plan schedules the tooling fix — it does not bend the design around it.
|
|
16
|
+
- **Tooling limitations never dictate content** (see: @lab43/q conventions/principles.md): if a design choice would break a test helper, CI step, or script, the plan schedules the tooling fix — it does not bend the design around it.
|
|
17
17
|
|
|
18
18
|
## Step 1: Explore
|
|
19
19
|
|
|
20
20
|
Before proposing anything, establish current state:
|
|
21
21
|
|
|
22
22
|
1. The relevant code — use an Explore subagent for breadth; read the load-bearing files yourself.
|
|
23
|
-
2. The conventions governing the affected territory, found from the agent briefing's docs index — plus this workflow's own rubric, the plan format (see: q conventions/plans.md).
|
|
23
|
+
2. The conventions governing the affected territory, found from the agent briefing's docs index — plus this workflow's own rubric, the plan format (see: @lab43/q conventions/plans.md).
|
|
24
24
|
3. Prior plans in the same territory (`docs/plans/`, if it exists). Read their decisions and rejected alternatives for the rationale, not the ruling: a rejection whose grounds still hold isn't re-proposed; one whose grounds have shifted is back on the table, with its history. Deferrals are candidates to raise with the user, not inheritances. Status matters: a `pending` plan in the same territory is a possible collision to surface, and an `abandoned` one's decisions never bound anything. Trust newer plans and the code over older ones, and take no format cues — the plan format doc is the only format authority.
|
|
25
25
|
|
|
26
26
|
## Step 2: Discuss
|
|
@@ -28,13 +28,13 @@ Before proposing anything, establish current state:
|
|
|
28
28
|
Tease out the goals and key aspects with the user, in conversational mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Collaboration modes). Beyond the design decisions themselves, two calls are settled here:
|
|
29
29
|
|
|
30
30
|
- Scope boundaries are decisions too: record what's explicitly out of scope or deferred, and why.
|
|
31
|
-
- The delivery shape — single PR or stacked, per the format's defaults (see: q conventions/plans.md, Delivery shape) and any PR rules the project's conventions record. The defaults usually decide it: state the call for veto rather than asking, unless the estimate is genuinely borderline.
|
|
31
|
+
- The delivery shape — single PR or stacked, per the format's defaults (see: @lab43/q conventions/plans.md, Delivery shape) and any PR rules the project's conventions record. The defaults usually decide it: state the call for veto rather than asking, unless the estimate is genuinely borderline.
|
|
32
32
|
|
|
33
33
|
Once the scope, delivery shape, and key design decisions feel settled, ask for the go-ahead to write. That settled shape is the agreement: Steps 3 and 4 run autonomously inside it, and Step 5 is conversational again.
|
|
34
34
|
|
|
35
35
|
## Step 3: Write the plan
|
|
36
36
|
|
|
37
|
-
Write `docs/plans/<plan-name>.md` according to the plan format (see: q conventions/plans.md) and the writing rules (see: q conventions/writing.md).
|
|
37
|
+
Write `docs/plans/<plan-name>.md` according to the plan format (see: @lab43/q conventions/plans.md) and the writing rules (see: @lab43/q conventions/writing.md).
|
|
38
38
|
|
|
39
39
|
## Step 4: Adversarial review
|
|
40
40
|
|
package/skills/drive/SKILL.md
CHANGED
|
@@ -58,4 +58,4 @@ Make the change through `/q:update-docs`. Deliver nothing here. The change joins
|
|
|
58
58
|
|
|
59
59
|
## Step 4: Report
|
|
60
60
|
|
|
61
|
-
Report what you exercised and what it demonstrated, claim by claim — the evidence a PR's Testing section carries (source: q conventions/pull-requests.md, Sections). Name what changed in the manual, and say whether that change is still uncommitted. Name anything you waited on, and how long it held you. Report what failed and stop there.
|
|
61
|
+
Report what you exercised and what it demonstrated, claim by claim — the evidence a PR's Testing section carries (source: @lab43/q conventions/pull-requests.md, Sections). Name what changed in the manual, and say whether that change is still uncommitted. Name anything you waited on, and how long it held you. Report what failed and stop there.
|
|
@@ -7,7 +7,7 @@ description: Audit the project's whole documentation surface against the documen
|
|
|
7
7
|
|
|
8
8
|
**Read the rubric first, and follow it over any instinct:**
|
|
9
9
|
|
|
10
|
-
1. q's documentation policy (see: q conventions/documentation.md) and its writing rules (see: q conventions/writing.md), plus any installed extension's doc whose topic governs documentation. An extension's rule beats q's where the two disagree (source: q conventions/documentation.md, Three tiers of conventions).
|
|
10
|
+
1. q's documentation policy (see: @lab43/q conventions/documentation.md) and its writing rules (see: @lab43/q conventions/writing.md), plus any installed extension's doc whose topic governs documentation. An extension's rule beats q's where the two disagree (source: @lab43/q conventions/documentation.md, Three tiers of conventions).
|
|
11
11
|
2. The project's recorded rulings and deviations: `docs/conventions/documentation.md` plus any "(overrides: …)" markers across `docs/conventions/` — grep for them. These win over both.
|
|
12
12
|
|
|
13
13
|
If the project has no `docs/conventions/` directory, or `node_modules/@lab43/q/` is absent (a fresh clone may just need `npm install`), stop and suggest the fix — without both there is no surface or rubric to groom against.
|
|
@@ -19,7 +19,7 @@ Follow the run contract — `${CLAUDE_PLUGIN_ROOT}/references/run-contract.md`.
|
|
|
19
19
|
Build the grooming surface, taking each item only if it exists in this project:
|
|
20
20
|
|
|
21
21
|
- `docs/conventions/*.md`, `README.md`, `CLAUDE.md` (the agent briefing) — full checks.
|
|
22
|
-
- The `conventions/` of any extension this repo authors — a working-tree `package.json` carrying the `q-extension` keyword — full checks, like the project's own conventions (source: q conventions/extensions.md). Anything else the project's own `documentation.md` puts on the surface joins it, under rubric item 2.
|
|
22
|
+
- The `conventions/` of any extension this repo authors — a working-tree `package.json` carrying the `q-extension` keyword — full checks, like the project's own conventions (source: @lab43/q conventions/extensions.md). That manifest's `description` joins the surface with them (source: @lab43/q conventions/extensions.md, Description). Anything else the project's own `documentation.md` puts on the surface joins it, under rubric item 2.
|
|
23
23
|
- `docs/guides/*.md` — **guide mode**, per the policy's Taxonomy rules.
|
|
24
24
|
- `docs/plans/*.md` — **status check only**, per the policy's `docs/plans/` taxonomy rule.
|
|
25
25
|
|
|
@@ -29,16 +29,16 @@ Project-local `.claude/` skills and agents are outside the surface — q doesn't
|
|
|
29
29
|
|
|
30
30
|
Launch read-only subagents in parallel — one per check below, except accuracy, which fans out per doc cluster; the duplication and consistency sweeps each hold the whole surface, since cross-file checks can't be sharded. Each reads the rubric first and returns findings with `file:line` citations:
|
|
31
31
|
|
|
32
|
-
1. **Accuracy, per doc cluster** (conventions docs grouped by area; guides clustered separately, in guide mode): every checkable claim — file paths, symbol names, behavior descriptions, commands — verified against current source. Exemplar references get a deeper check: the file exists and still exhibits the rules its doc attaches to it.
|
|
33
|
-
2. **Duplication sweep**, cross-surface: facts stated in more than one place. For each, name the home — implied by the taxonomy, or assigned by a recorded ruling; where the call is genuinely contestable, flag it for the user, whose decision becomes a new ruling. The sweep also runs **cross-tier**, comparing project docs against q's conventions and every installed extension's: a project statement matching one of their rules in substance is duplication to prune; one differing from such a rule without an overrides marker naming it is drift or an unrecorded deviation — escalate to the user; a marked override whose target updated to agree or disappeared is spent — propose deleting it (source: q conventions/documentation.md, Three tiers of conventions). Those docs are read-only: an extension's stale override of a q rule, or two extensions in conflict, can't be edited here — escalate; the remedy is a project ruling or the extension author's.
|
|
32
|
+
1. **Accuracy, per doc cluster** (conventions docs grouped by area; guides clustered separately, in guide mode): every checkable claim — file paths, symbol names, behavior descriptions, commands — verified against current source. Exemplar references get a deeper check: the file exists and still exhibits the rules its doc attaches to it. An authored extension's `description` is checked with its docs: it must still name the territory they govern.
|
|
33
|
+
2. **Duplication sweep**, cross-surface: facts stated in more than one place. For each, name the home — implied by the taxonomy, or assigned by a recorded ruling; where the call is genuinely contestable, flag it for the user, whose decision becomes a new ruling. The sweep also runs **cross-tier**, comparing project docs against q's conventions and every installed extension's: a project statement matching one of their rules in substance is duplication to prune; one differing from such a rule without an overrides marker naming it is drift or an unrecorded deviation — escalate to the user; a marked override whose target updated to agree or disappeared is spent — propose deleting it (source: @lab43/q conventions/documentation.md, Three tiers of conventions). Those docs are read-only: an extension's stale override of a q rule, or two extensions in conflict, can't be edited here — escalate; the remedy is a project ruling or the extension author's.
|
|
34
34
|
3. **Dead references**: every file, symbol, helper, script, and skill named anywhere on the surface exists. Greps must exclude build artifacts (`dist/`, `node_modules/`, and the like) — stale generated files resurrect deleted symbols.
|
|
35
|
-
4. **Consistency**: the agent briefing matches the briefing template (see: `${CLAUDE_PLUGIN_ROOT}/references/agent-briefing.md`); any README skills/conventions table matches its home (skill tables drift-check against `SKILL.md` frontmatter descriptions); cross-references between docs resolve.
|
|
35
|
+
4. **Consistency**: the agent briefing matches the briefing template (see: `${CLAUDE_PLUGIN_ROOT}/references/agent-briefing.md`); any README skills/conventions table matches its home (skill tables drift-check against `SKILL.md` frontmatter descriptions); cross-references between docs resolve. One concept goes by one name across the surface. Report a synonym against the name its home doc establishes (source: @lab43/q conventions/writing.md, One name per concept).
|
|
36
36
|
5. **Organization**: each doc's structure — topic scope, intro, section placement, and splits or merges across docs — conforms to the policy. Findings here become reorganization proposals.
|
|
37
|
-
6. **Plan statuses** (if `docs/plans/` exists): every plan has valid `status` frontmatter (source: q conventions/plans.md, Frontmatter); list every `pending` plan with its age (last git commit date).
|
|
37
|
+
6. **Plan statuses** (if `docs/plans/` exists): every plan has valid `status` frontmatter (source: @lab43/q conventions/plans.md, Frontmatter); list every `pending` plan with its age (last git commit date).
|
|
38
38
|
|
|
39
39
|
## Step 3: Consolidate with the user
|
|
40
40
|
|
|
41
|
-
Merge the findings into proposed edits, each stating its remedy and citing its finding —
|
|
41
|
+
Merge the findings into proposed edits, each stating its remedy and citing its finding — in conversational mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Collaboration modes).
|
|
42
42
|
|
|
43
43
|
- Apply autonomously: wording-level fixes, replacing a single restated sentence or bullet with a cross-reference to its home, and dead-reference corrections.
|
|
44
44
|
- **Everything else goes to the user** (AskUserQuestion) — including larger deletions and rewrites, any reorganization, any `pending` plan proposed as `abandoned` (only the user flips a status), and any fact that couldn't be verified either way.
|
|
@@ -57,6 +57,6 @@ Validate the applied edits (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.m
|
|
|
57
57
|
|
|
58
58
|
## Step 6: Open the PR
|
|
59
59
|
|
|
60
|
-
1. **
|
|
61
|
-
2. **Open the PR**: push the branch and open the PR per the PR-authoring rules (see: q conventions/pull-requests.md).
|
|
60
|
+
1. **The local gate**: run it over the uncommitted edits (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, The local gate).
|
|
61
|
+
2. **Open the PR**: push the branch and open the PR per the PR-authoring rules (see: @lab43/q conventions/pull-requests.md).
|
|
62
62
|
3. Close the session by reporting: what changed per doc, what was deduped and into where, every autonomous fix, every user decision and its outcome, any upstream-to-q candidates, and anything that couldn't be verified — named explicitly, never silently dropped.
|
|
@@ -1,11 +1,11 @@
|
|
|
1
1
|
---
|
|
2
|
-
name:
|
|
2
|
+
name: implement
|
|
3
3
|
description: Take on unplanned work — an issue, a bug, a task at any fidelity. Ground it in the code, then route it on the user's go-ahead — fix it here in a single adversarially reviewed PR, escalate to /q:create-plan when it's plan-worthy, or show with evidence that nothing needs doing. The expected entry point for work without a plan; planned work runs under /q:implement-plan.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
|
-
#
|
|
6
|
+
# Implement
|
|
7
7
|
|
|
8
|
-
The work comes from the invocation, at any fidelity — an issue number or URL, a pasted error, a phrase ("the export button 404s"); given nothing, ask what
|
|
8
|
+
The work comes from the invocation, at any fidelity — an issue number or URL, a pasted error, a phrase ("the export button 404s"); given nothing, ask what the work is.
|
|
9
9
|
|
|
10
10
|
## Ground rules
|
|
11
11
|
|
|
@@ -17,7 +17,7 @@ The work comes from the invocation, at any fidelity — an issue number or URL,
|
|
|
17
17
|
## Step 1: Understand
|
|
18
18
|
|
|
19
19
|
1. Announce the item to the peers before reading it — investigating it is already work a peer should not duplicate (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Working alongside a peer). A run continued from `/q:triage` arrives with the item already announced. Release it whenever this run stops working the item, whether it turns out unavailable or the verdict is nothing to do.
|
|
20
|
-
2. Read the work item at its source — its description, comments, and related items, when the source carries them — and whatever it cites: stack traces, linked discussions, named files. Read it fresh even when a caller just read it: a tracker moves for reasons no peer announces. An item no longer available to pick up goes back to the user before any further work (source: q conventions/issue-tracking.md, Respect existing claims).
|
|
20
|
+
2. Read the work item at its source — its description, comments, and related items, when the source carries them — and whatever it cites: stack traces, linked discussions, named files. Read it fresh even when a caller just read it: a tracker moves for reasons no peer announces. An item no longer available to pick up goes back to the user before any further work (source: @lab43/q conventions/issue-tracking.md, Respect existing claims).
|
|
21
21
|
3. Read the conventions governing the affected territory, found from the agent briefing's docs index.
|
|
22
22
|
4. Explore the affected code — use an Explore subagent for breadth; read the load-bearing files yourself.
|
|
23
23
|
5. Check `docs/plans/` (if it exists) for collisions: surface a `pending` plan in the same territory in Step 2 rather than silently working around it.
|
|
@@ -28,7 +28,7 @@ The outcome is a verdict: what the work actually is, whether the item's claims h
|
|
|
28
28
|
|
|
29
29
|
Settle the run with the user, in conversational mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Collaboration modes). One batch: the verdict and a recommended route, the approach where the fix is genuinely forked, and — when fixing here — the review mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Review modes). In this run, ship covers commit, push, and the PR; local commits nothing until the user has reviewed the diff.
|
|
30
30
|
|
|
31
|
-
Answers settle decisions
|
|
31
|
+
Answers settle decisions. They are not the agreement. Close the conversation by summarizing the agreed scope and asking for the go-ahead. That go-ahead, not the last answer, is what makes the rest of the run autonomous.
|
|
32
32
|
|
|
33
33
|
The routes:
|
|
34
34
|
|
|
@@ -38,13 +38,13 @@ The routes:
|
|
|
38
38
|
|
|
39
39
|
## Step 3: Branch
|
|
40
40
|
|
|
41
|
-
Settle the branch (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, The delivery branch).
|
|
41
|
+
Settle the branch (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, The delivery branch). The work item is its own delivery unit, so the call is a fresh branch. Require a clean working tree first — if anything is uncommitted, stop and show the user. Branch, unless the contract's peer check already put this run on a worktree's branch:
|
|
42
42
|
|
|
43
43
|
```bash
|
|
44
44
|
git fetch origin && git checkout -b <work-slug> origin/<default-branch>
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
## Step 4:
|
|
47
|
+
## Step 4: Build
|
|
48
48
|
|
|
49
49
|
1. Implement the agreed fix, following the governing conventions and matching surrounding code.
|
|
50
50
|
2. Verify: run the project's checks — lint, typecheck, and the tests covering what changed, as the project's briefing, conventions, or scripts name them (parallel background subagents are fine). When the change produced a newly drivable surface — an endpoint, a screen — drive it through `/q:drive`, naming that surface as what to exercise.
|
|
@@ -54,10 +54,10 @@ When implementation reveals the work is deeper than the agreement — a redesign
|
|
|
54
54
|
|
|
55
55
|
## Step 5: Adversarial review
|
|
56
56
|
|
|
57
|
-
Validate the diff (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Validation) with the **correctness** and **conventions** lenses. Hand the reviewers the agreed scope and the diff scope: `git diff origin/<default-branch>...HEAD` in ship mode, or the uncommitted diff plus the changed-file list in local
|
|
57
|
+
Validate the diff (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Validation) with the **correctness** and **conventions** lenses. Hand the reviewers the agreed scope and the diff scope: `git diff origin/<default-branch>...HEAD` in ship mode, or the uncommitted diff plus the changed-file list in local mode. Per loop round, re-drive a surface only when a fix could change what driving showed. Surviving findings become Caveats in the PR description.
|
|
58
58
|
|
|
59
59
|
## Step 6: Open the PR
|
|
60
60
|
|
|
61
|
-
1. **
|
|
62
|
-
2. **Open the PR**: `git push -u origin <work-slug>`, then `gh pr create`, per the PR-authoring rules (see: q conventions/pull-requests.md).
|
|
63
|
-
3. Close the session by reporting the PR URL, any caveats, any amendment raised instead of applied, and any follow-up work — filed in the tracker on the user's agreement (source: q conventions/issue-tracking.md, Ask before filing).
|
|
61
|
+
1. **The local gate**: run it over the session's uncommitted work (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, The local gate).
|
|
62
|
+
2. **Open the PR**: `git push -u origin <work-slug>`, then `gh pr create`, per the PR-authoring rules (see: @lab43/q conventions/pull-requests.md).
|
|
63
|
+
3. Close the session by reporting the PR URL, any caveats, any amendment raised instead of applied, and any follow-up work — filed in the tracker on the user's agreement (source: @lab43/q conventions/issue-tracking.md, Ask before filing).
|
|
@@ -12,7 +12,7 @@ Given no plan, list the `pending` plans in `docs/plans/` and ask which one.
|
|
|
12
12
|
- **Follow the run contract** — `${CLAUDE_PLUGIN_ROOT}/references/run-contract.md`.
|
|
13
13
|
- **Track resolutions**: keep a scratchpad note of each review round's BLOCKING findings and how each was resolved (fixed / rejected with reason) — it feeds the PR's Callouts and Caveats, stated as facts about the change.
|
|
14
14
|
- **Context hygiene**: use subagents (Explore for recon, background Bash for checks, `adversarial-reviewer` for review) to keep large output out of the main context.
|
|
15
|
-
- **Plan doc amendments**: when execution deviates from the plan or a verification step contradicts it, fold the outcome into the plan doc as a marked amendment per the lifecycle rules (see: q conventions/plans.md, Lifecycle), alongside the work of the phase that surfaced it.
|
|
15
|
+
- **Plan doc amendments**: when execution deviates from the plan or a verification step contradicts it, fold the outcome into the plan doc as a marked amendment per the lifecycle rules (see: @lab43/q conventions/plans.md, Lifecycle), alongside the work of the phase that surfaced it.
|
|
16
16
|
- **Doc updates**: make the doc changes the plan schedules through `/q:update-docs`, alongside the phase that carries them.
|
|
17
17
|
|
|
18
18
|
## Step 1: Understand
|
|
@@ -26,7 +26,7 @@ Given no plan, list the `pending` plans in `docs/plans/` and ask which one.
|
|
|
26
26
|
|
|
27
27
|
## Step 2: Clarify
|
|
28
28
|
|
|
29
|
-
Clarify the plan with the user, in conversational mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Collaboration modes) — everything asked here is a question the
|
|
29
|
+
Clarify the plan with the user, in conversational mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Collaboration modes) — everything asked here is a question the run won't have to stop for once it is autonomous. One batch, via AskUserQuestion:
|
|
30
30
|
|
|
31
31
|
- The ambiguities, plan/codebase conflicts, and scope questions Step 1 surfaced — when none need the user's attention, state your working assumptions instead. If consequential questions keep accumulating, the plan is underspecified — say so and suggest revising it with `/q:create-plan` before implementing.
|
|
32
32
|
- The review mode, always asked (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Review modes): in this run, ship covers every commit (a stacked run's `gh stack` operations included), push, and PR; local commits nothing until the user has reviewed it, each PR's content at that PR's boundary.
|
|
@@ -55,7 +55,7 @@ gh stack init <plan-name>/01-<group-slug> --base <default-branch>
|
|
|
55
55
|
|
|
56
56
|
Either way, in ship mode record the group-start SHA (`git rev-parse HEAD`) as soon as the branch exists, before anything commits to it. It scopes this PR's final review in Step 5. Each later group records its own when its branch opens in Step 4.
|
|
57
57
|
|
|
58
|
-
A plan doc not yet in merged history — new, or changed since it merged — becomes the run's first commit, at the bottom of the stack in a stacked run — exactly as planning left it. Material Step 2 clarification answers are folded in as a second commit on top, so the diff between the two records what clarification changed. In local
|
|
58
|
+
A plan doc not yet in merged history — new, or changed since it merged — becomes the run's first commit, at the bottom of the stack in a stacked run — exactly as planning left it. Material Step 2 clarification answers are folded in as a second commit on top, so the diff between the two records what clarification changed. In local mode, hold the commit; when the user's go-ahead starts the committing, the plan doc — clarifications folded in — is committed first, the two-commit split being history local mode gives up.
|
|
59
59
|
|
|
60
60
|
## Step 4: Implement in phases
|
|
61
61
|
|
|
@@ -63,7 +63,7 @@ In a stacked run, this step and Step 5 alternate: implement a group's phases her
|
|
|
63
63
|
|
|
64
64
|
Derive phases from the plan's Phases section — a boundary problem visible up front was Step 2's to settle and fold in. The plan's breakdown is not yours to redesign; when implementation reveals a phase that can't stand alone as a commit that builds and passes its tests, merge or split at that seam and record the change as a plan amendment.
|
|
65
65
|
|
|
66
|
-
In local
|
|
66
|
+
In local mode, commits wait for the user's review at each PR boundary (Step 5): phases accumulate uncommitted, and a phase's adversarial review takes the uncommitted diff plus the phase's file list.
|
|
67
67
|
|
|
68
68
|
Then work phase by phase. In a stacked run, a phase that starts a new PR group first opens the group's branch — `gh stack add <plan-name>/<NN>-<group-slug>`, the first group using Step 3's branch — so the group's phases commit to their own branch. A new group records its group-start SHA as Step 3 describes.
|
|
69
69
|
|
|
@@ -74,18 +74,18 @@ For each phase:
|
|
|
74
74
|
1. **Implement** the phase's steps, following the governing conventions and matching surrounding code.
|
|
75
75
|
2. **Verify**: run the project's checks — lint, typecheck, and the tests covering what the phase touched, as the project's briefing, conventions, or scripts name them (parallel background subagents are fine). When the phase produced a newly drivable surface — an endpoint, a screen — drive it through `/q:drive`, naming that surface as what to exercise. This is a cheap incremental check so later phases don't build on something broken, not the full verification pass; fix what it catches before moving on.
|
|
76
76
|
3. **Commit the implementation**, in ship mode, before review — so the review history is inspectable in git.
|
|
77
|
-
4. **Adversarial review**: launch a single `adversarial-reviewer` subagent over the phase's diff with **both lenses** (correctness + conventions). Give it: the plan path, the full derived phase breakdown (which plan steps are in this phase, which came earlier, which are deferred), and the diff scope — `git diff <phase-start-sha>..HEAD` in ship mode; the uncommitted diff plus the phase's file list in local
|
|
77
|
+
4. **Adversarial review**: launch a single `adversarial-reviewer` subagent over the phase's diff with **both lenses** (correctness + conventions). Give it: the plan path, the full derived phase breakdown (which plan steps are in this phase, which came earlier, which are deferred), and the diff scope — `git diff <phase-start-sha>..HEAD` in ship mode; the uncommitted diff plus the phase's file list in local mode. One review per phase — there is no per-phase re-review loop; the PR's final review (Step 5) is the backstop that verifies the fixes.
|
|
78
78
|
5. **Fix**: fix all BLOCKING findings (apply your judgment on NITS), re-run the checks covering the fixed code — re-driving the phase's surface only when a fix could change what driving showed — and, in ship mode, commit the fixes. A review with no accepted findings gets no commit.
|
|
79
79
|
|
|
80
80
|
## Step 5: Wrap up each PR
|
|
81
81
|
|
|
82
82
|
When a group's last phase lands, finish that PR before starting the next group:
|
|
83
83
|
|
|
84
|
-
1. **Verify its work in the running product**: drive what the PR delivers through `/q:drive`, naming the flows to exercise. Derive the scope from the group's content — a judgment that can land on nothing at all, when Step 4's checks fully characterize the work. The final PR is the exception. Drive the plan's Verification section: the integrated state exists now, and its end-to-end proof belongs ahead of this last review. Run the project's full test suite too — the run's only unscoped check. Fix what verification catches and re-verify. In ship mode, commit what this step produced: the fixes, plus anything driving recorded. Record for the PR's Testing section what was exercised and what it demonstrated. The standing suite goes unlisted (source: q conventions/pull-requests.md, Sections).
|
|
85
|
-
2. **Final review**: validate the PR's diff (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Validation) with the **correctness** and **conventions** lenses. Hand the reviewers the plan path, which plan steps this PR delivers (and that the rest live in other PRs), and the diff scope — `git diff <group-start-sha>..HEAD` in ship mode; the uncommitted diff plus the group's file list (every file its phases touched) in local
|
|
86
|
-
3. **
|
|
87
|
-
4. **Mark the plan completed** — last or only PR: set `status: completed` in the plan doc's frontmatter and commit it (in a stacked run the lower PRs still show `pending`; the flip lands when the whole stack merges). In local
|
|
88
|
-
5. **Open the PR**, so the user can start reviewing while later groups build. Author every PR's title and body per the PR-authoring rules (see: q conventions/pull-requests.md).
|
|
84
|
+
1. **Verify its work in the running product**: drive what the PR delivers through `/q:drive`, naming the flows to exercise. Derive the scope from the group's content — a judgment that can land on nothing at all, when Step 4's checks fully characterize the work. The final PR is the exception. Drive the plan's Verification section: the integrated state exists now, and its end-to-end proof belongs ahead of this last review. Run the project's full test suite too — the run's only unscoped check. Fix what verification catches and re-verify. In ship mode, commit what this step produced: the fixes, plus anything driving recorded. Record for the PR's Testing section what was exercised and what it demonstrated. The standing suite goes unlisted (source: @lab43/q conventions/pull-requests.md, Sections).
|
|
85
|
+
2. **Final review**: validate the PR's diff (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Validation) with the **correctness** and **conventions** lenses. Hand the reviewers the plan path, which plan steps this PR delivers (and that the rest live in other PRs), and the diff scope — `git diff <group-start-sha>..HEAD` in ship mode; the uncommitted diff plus the group's file list (every file its phases touched) in local mode. Per loop round, re-drive a flow from item 1 only when a fix could change what driving showed. Surviving findings become Caveats in the PR description.
|
|
86
|
+
3. **The local gate**: run it over the PR's uncommitted diff (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, The local gate); commits land onto the PR's layer.
|
|
87
|
+
4. **Mark the plan completed** — last or only PR: set `status: completed` in the plan doc's frontmatter and commit it (in a stacked run the lower PRs still show `pending`; the flip lands when the whole stack merges). In local mode this flip rides the go-ahead just given. That is a deliberate exception to the gate: the go-ahead already covers this bookkeeping. Don't ask again.
|
|
88
|
+
5. **Open the PR**, so the user can start reviewing while later groups build. Author every PR's title and body per the PR-authoring rules (see: @lab43/q conventions/pull-requests.md).
|
|
89
89
|
|
|
90
90
|
Single PR: `git push -u origin <plan-name>`, then `gh pr create`.
|
|
91
91
|
|
|
@@ -96,4 +96,4 @@ When a group's last phase lands, finish that PR before starting the next group:
|
|
|
96
96
|
|
|
97
97
|
Reached once a run: after the only PR, or after the stack's last. Every earlier group returns to Step 4 instead.
|
|
98
98
|
|
|
99
|
-
Close the session by reporting the PR URL(s), the phase list, any caveats, any amendment raised instead of applied, and any follow-up work — filed in the tracker on the user's agreement (source: q conventions/issue-tracking.md, Ask before filing).
|
|
99
|
+
Close the session by reporting the PR URL(s), the phase list, any caveats, any amendment raised instead of applied, and any follow-up work — filed in the tracker on the user's agreement (source: @lab43/q conventions/issue-tracking.md, Ask before filing).
|
package/skills/install/SKILL.md
CHANGED
|
@@ -7,7 +7,7 @@ description: Install q into a project, or add an extension to one. Invoke bare t
|
|
|
7
7
|
|
|
8
8
|
The scaffold is deliberately near-empty — this skill creates the structure the other skills expect, not content.
|
|
9
9
|
|
|
10
|
-
Follow the run contract — `${CLAUDE_PLUGIN_ROOT}/references/run-contract.md`. The invocation picks the path: a bare run bootstraps q (Steps 3–4); an extension run adds the extension install (Step 5) after them. A run naming `q` or `@lab43/q` is a bare run, because q is the framework rather than an extension (source: q conventions/extensions.md, Identity). Scaffolding brings q's surfaces to the forms in Step 3: create what is absent, correct what has drifted. Any run therefore completes a partially set-up project. Never rewrite what the user owns — each item below marks its own boundary.
|
|
10
|
+
Follow the run contract — `${CLAUDE_PLUGIN_ROOT}/references/run-contract.md`. The invocation picks the path: a bare run bootstraps q (Steps 3–4); an extension run adds the extension install (Step 5) after them. A run naming `q` or `@lab43/q` is a bare run, because q is the framework rather than an extension (source: @lab43/q conventions/extensions.md, Identity). Scaffolding brings q's surfaces to the forms in Step 3: create what is absent, correct what has drifted. Any run therefore completes a partially set-up project. Never rewrite what the user owns — each item below marks its own boundary.
|
|
11
11
|
|
|
12
12
|
## Step 1: Survey current state
|
|
13
13
|
|
|
@@ -16,7 +16,7 @@ Hold the project against each of Step 3's scaffold items, noting what is absent
|
|
|
16
16
|
- Convention-like docs living elsewhere (a `docs/` scan for rule-carrying files, a briefing bloated with per-task rules) — candidates for migration
|
|
17
17
|
- Whether an earlier run's scaffold sits uncommitted in the working tree
|
|
18
18
|
- On an extension run: whether the named extension is already pinned, installed, indexed, and watermarked
|
|
19
|
-
- The GitHub CLI: `gh auth status`, and that the repo's `origin` is GitHub-hosted (`gh repo view` succeeds). q's workflow skills require both. If either fails, tell the user the fix (install via https://cli.github.com and authenticate with `gh auth login`; `gh repo view` failing with an authenticated CLI means `origin` is not GitHub-hosted) and continue — the scaffold still lands.
|
|
19
|
+
- The GitHub CLI: `gh auth status`, and that the repo's `origin` is GitHub-hosted (`gh repo view` succeeds). q's workflow skills require both. If either fails, tell the user the fix (install via <https://cli.github.com> and authenticate with `gh auth login`; `gh repo view` failing with an authenticated CLI means `origin` is not GitHub-hosted) and continue — the scaffold still lands.
|
|
20
20
|
|
|
21
21
|
## Step 2: Settle delivery
|
|
22
22
|
|
|
@@ -38,7 +38,7 @@ The invocation is the agreement — scaffold autonomously; on a fully set-up, un
|
|
|
38
38
|
```markdown
|
|
39
39
|
# Principles
|
|
40
40
|
|
|
41
|
-
This project's cross-cutting rules, including any deviations from q's (see: q conventions/principles.md).
|
|
41
|
+
This project's cross-cutting rules, including any deviations from q's (see: @lab43/q conventions/principles.md).
|
|
42
42
|
```
|
|
43
43
|
|
|
44
44
|
`docs/conventions/documentation.md`:
|
|
@@ -46,7 +46,7 @@ The invocation is the agreement — scaffold autonomously; on a fully set-up, un
|
|
|
46
46
|
```markdown
|
|
47
47
|
# Documentation
|
|
48
48
|
|
|
49
|
-
This project's documentation rulings and deviations (see: q conventions/documentation.md, Three tiers of conventions).
|
|
49
|
+
This project's documentation rulings and deviations (see: @lab43/q conventions/documentation.md, Three tiers of conventions).
|
|
50
50
|
```
|
|
51
51
|
|
|
52
52
|
No other conventions doc is scaffolded — `/q:update-docs` creates each topical doc when its first entry is recorded.
|
|
@@ -103,21 +103,21 @@ The invocation is the agreement — scaffold autonomously; on a fully set-up, un
|
|
|
103
103
|
|
|
104
104
|
## Step 4: Migration proposals (existing projects only)
|
|
105
105
|
|
|
106
|
-
On an extension run, skip this step unless Step 3 just bootstrapped a previously q-less project. If Step 1 found convention-like content outside `docs/conventions/` — rules in the briefing that apply only to particular kinds of work, rule-carrying docs elsewhere in `docs/` — read `node_modules/@lab43/q/conventions/documentation.md` and propose moving the content per its taxonomy, via AskUserQuestion —
|
|
106
|
+
On an extension run, skip this step unless Step 3 just bootstrapped a previously q-less project. If Step 1 found convention-like content outside `docs/conventions/` — rules in the briefing that apply only to particular kinds of work, rule-carrying docs elsewhere in `docs/` — read `node_modules/@lab43/q/conventions/documentation.md` and propose moving the content per its taxonomy, via AskUserQuestion — in conversational mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Collaboration modes). Apply approved moves, leaving a one-line pointer behind where the policy calls for one.
|
|
107
107
|
|
|
108
108
|
## Step 5: Install the extension (extension runs only)
|
|
109
109
|
|
|
110
110
|
The named extension is the agreement — install it autonomously. If it is not yet in `devDependencies` (via the project's package manager when it isn't npm):
|
|
111
111
|
|
|
112
|
-
```
|
|
112
|
+
```sh
|
|
113
113
|
npm install --save-dev --save-exact --ignore-scripts <extension>
|
|
114
114
|
```
|
|
115
115
|
|
|
116
116
|
If it is, leave the recorded pin alone and make this machine match through `${CLAUDE_PLUGIN_ROOT}/references/enforce-pins.md`.
|
|
117
117
|
|
|
118
|
-
Verify what arrived is an extension: `node_modules/<extension>/package.json` carries the `q-extension` keyword, and the package root holds a `conventions/` directory, a `.claude-plugin/` directory, or both (source: q conventions/extensions.md). If not, `npm uninstall` it and report — never index it. When the run changed nothing else, switch back to the prior branch and delete any branch this run created; when Step 3 bootstrapped the project, keep that scaffold, carry on to Step 6, and report the extension failure in the close.
|
|
118
|
+
Verify what arrived is an extension: `node_modules/<extension>/package.json` carries the `q-extension` keyword, and the package root holds a `conventions/` directory, a `.claude-plugin/` directory, or both (source: @lab43/q conventions/extensions.md). If not, `npm uninstall` it and report — never index it. When the run changed nothing else, switch back to the prior branch and delete any branch this run created; when Step 3 bootstrapped the project, keep that scaffold, carry on to Step 6, and report the extension failure in the close.
|
|
119
119
|
|
|
120
|
-
An extension shipping `conventions/` gets
|
|
120
|
+
An extension shipping `conventions/` gets its own group in the briefing's docs index, headed by the package name and the extension's description (see: `${CLAUDE_PLUGIN_ROOT}/references/agent-briefing.md`). Under that heading goes one line per doc the index doesn't already carry: package name plus path from the package root (see: @lab43/q conventions/documentation.md, Package doc paths), blurb restating the doc's intro (source: @lab43/q conventions/documentation.md, Taxonomy). One shipping no `conventions/` is watermarked without being indexed, having no docs to index (source: @lab43/q conventions/extensions.md, Layout).
|
|
121
121
|
|
|
122
122
|
When the extension has no `reconciledAgainst` entry, write one from the version in `node_modules/<extension>/package.json` (see: ${CLAUDE_PLUGIN_ROOT}/references/q-state.md) — an extension Step 1 found pinned and installed by hand included. Never overwrite a present entry, stale or not — it is reconciliation's to move (source: ${CLAUDE_PLUGIN_ROOT}/references/q-state.md).
|
|
123
123
|
|
|
@@ -134,8 +134,8 @@ Otherwise: in ship mode, commit first. In both modes, validate the changes (see:
|
|
|
134
134
|
|
|
135
135
|
## Step 7: Open the PR
|
|
136
136
|
|
|
137
|
-
1. **
|
|
138
|
-
2. **Open the PR**: push the branch and open the PR per the PR-authoring rules (see: q conventions/pull-requests.md).
|
|
137
|
+
1. **The local gate**: run it over the uncommitted changes (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, The local gate).
|
|
138
|
+
2. **Open the PR**: push the branch and open the PR per the PR-authoring rules (see: @lab43/q conventions/pull-requests.md).
|
|
139
139
|
|
|
140
140
|
## Step 8: Report
|
|
141
141
|
|
|
@@ -147,4 +147,4 @@ Close the session by reporting:
|
|
|
147
147
|
- On an extension run:
|
|
148
148
|
- The extension and version installed, and the index lines added.
|
|
149
149
|
- Any overrides markers its docs carry against q's rules. These are deviations the project now lives under. The project's own rulings still win on conflict.
|
|
150
|
-
- Its q declaration — its `@lab43/q` devDependency (source: q conventions/extensions.md) — held against the project's own pin. An extension written against a newer q than the project runs is the signal to suggest `/q:update`. One written against an older q, or carrying no declaration, is noted as-is — no update closes it.
|
|
150
|
+
- Its q declaration — its `@lab43/q` devDependency (source: @lab43/q conventions/extensions.md) — held against the project's own pin. An extension written against a newer q than the project runs is the signal to suggest `/q:update`. One written against an older q, or carrying no declaration, is noted as-is — no update closes it.
|
|
@@ -36,7 +36,7 @@ Every entry on the list goes one of two ways:
|
|
|
36
36
|
|
|
37
37
|
Settle the run with the user, in conversational mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Collaboration modes). One batch: the list, which way each entry goes, and the review mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Review modes). In this run, ship covers commit, push, and the PR; local commits nothing until the user has reviewed the diff.
|
|
38
38
|
|
|
39
|
-
Answers settle decisions
|
|
39
|
+
Answers settle decisions. They are not the agreement. Close the conversation by summarizing the agreed scope and asking for the go-ahead. That go-ahead, not the last answer, is what makes the rest of the run autonomous.
|
|
40
40
|
|
|
41
41
|
When the agreed isolation won't fit one reviewable PR, continue into `/q:create-plan` in this session on the go-ahead, handing over what Step 1 found and what the batch already settled. This run ends there; the plan carries the build.
|
|
42
42
|
|
|
@@ -60,10 +60,10 @@ Drive what you built through `/q:drive`. What to exercise: each resource the run
|
|
|
60
60
|
|
|
61
61
|
## Step 5: Adversarial review
|
|
62
62
|
|
|
63
|
-
Validate the diff (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Validation) with the **correctness** and **conventions** lenses. Hand the reviewers the agreed scope and the diff scope: `git diff origin/<default-branch>...HEAD` in ship mode, or the uncommitted diff plus the changed-file list in local
|
|
63
|
+
Validate the diff (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Validation) with the **correctness** and **conventions** lenses. Hand the reviewers the agreed scope and the diff scope: `git diff origin/<default-branch>...HEAD` in ship mode, or the uncommitted diff plus the changed-file list in local mode. Per loop round, re-drive a resource only when a fix could change what driving showed. Surviving findings become Caveats in the PR description.
|
|
64
64
|
|
|
65
65
|
## Step 6: Open the PR
|
|
66
66
|
|
|
67
|
-
1. **
|
|
68
|
-
2. **Open the PR**: `git push -u origin <work-slug>`, then `gh pr create`, per the PR-authoring rules (see: q conventions/pull-requests.md).
|
|
69
|
-
3. Close the session by reporting the PR URL, every resource left shared, any caveats, any amendment raised instead of applied, and any follow-up work — filed in the tracker on the user's agreement (source: q conventions/issue-tracking.md, Ask before filing).
|
|
67
|
+
1. **The local gate**: run it over the session's uncommitted work (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, The local gate).
|
|
68
|
+
2. **Open the PR**: `git push -u origin <work-slug>`, then `gh pr create`, per the PR-authoring rules (see: @lab43/q conventions/pull-requests.md).
|
|
69
|
+
3. Close the session by reporting the PR URL, every resource left shared, any caveats, any amendment raised instead of applied, and any follow-up work — filed in the tracker on the user's agreement (source: @lab43/q conventions/issue-tracking.md, Ask before filing).
|
package/skills/review/SKILL.md
CHANGED
|
@@ -22,7 +22,7 @@ Launch `adversarial-reviewer` subagents over the artifact, passing what the agen
|
|
|
22
22
|
|
|
23
23
|
## Step 3: Rule with the user
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
In conversational mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Collaboration modes), triage the findings:
|
|
26
26
|
|
|
27
27
|
- **Fix outright**: a finding that is clearly right, with a fix that reopens nothing. Apply it and present it as applied, where the user can veto it.
|
|
28
28
|
- **Reject outright**: a finding the session's context refutes. Present it with its reason — never drop one silently, since the refuting context may itself be wrong.
|
|
@@ -43,6 +43,6 @@ When delivering now, validate the whole diff being delivered (see: ${CLAUDE_PLUG
|
|
|
43
43
|
## Step 6: Deliver
|
|
44
44
|
|
|
45
45
|
1. Fixes not delivered now — joining an outstanding change another run owns, or left in the tree — stay uncommitted for the run that delivers them. Skip to the report.
|
|
46
|
-
2. **
|
|
47
|
-
3. **Open the PR**: push the branch and open the PR per the PR-authoring rules (see: q conventions/pull-requests.md).
|
|
46
|
+
2. **The local gate**: run it over the uncommitted fixes (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, The local gate).
|
|
47
|
+
3. **Open the PR**: push the branch and open the PR per the PR-authoring rules (see: @lab43/q conventions/pull-requests.md).
|
|
48
48
|
4. Close the session by reporting: findings and rulings including what was dropped, the check results, the doc entries recorded, and any amendment raised instead of applied, listed on its own. When work was left in the tree, say that it is unvalidated until delivered, and that a later bare `/q:review` reviews and delivers the accumulation.
|
package/skills/sync/SKILL.md
CHANGED
|
@@ -18,13 +18,13 @@ Otherwise enforce the pins per `${CLAUDE_PLUGIN_ROOT}/references/enforce-pins.md
|
|
|
18
18
|
|
|
19
19
|
## Step 2: Check the GitHub CLI
|
|
20
20
|
|
|
21
|
-
Run `gh auth status`, and `gh repo view` to confirm the repo's `origin` is GitHub-hosted — q's workflow skills require both. When either fails, report the fix: install via https://cli.github.com and authenticate with `gh auth login` for a missing or unauthenticated CLI; a failing `gh repo view` with an authenticated CLI means `origin` is not GitHub-hosted.
|
|
21
|
+
Run `gh auth status`, and `gh repo view` to confirm the repo's `origin` is GitHub-hosted — q's workflow skills require both. When either fails, report the fix: install via <https://cli.github.com> and authenticate with `gh auth login` for a missing or unauthenticated CLI; a failing `gh repo view` with an authenticated CLI means `origin` is not GitHub-hosted.
|
|
22
22
|
|
|
23
23
|
## Step 3: Compare pins against watermarks
|
|
24
24
|
|
|
25
25
|
Read `.claude/q-state.json` (see: ${CLAUDE_PLUGIN_ROOT}/references/q-state.md) and compare:
|
|
26
26
|
|
|
27
|
-
- the pin of `@lab43/q` and of each extension in `package.json` against its `reconciledAgainst` entry, in both directions — the extensions are the direct `devDependencies` whose own `package.json` carries the `q-extension` keyword (source: q conventions/extensions.md)
|
|
27
|
+
- the pin of `@lab43/q` and of each extension in `package.json` against its `reconciledAgainst` entry, in both directions — the extensions are the direct `devDependencies` whose own `package.json` carries the `q-extension` keyword (source: @lab43/q conventions/extensions.md)
|
|
28
28
|
|
|
29
29
|
Each finding routes to its remedy:
|
|
30
30
|
|
package/skills/triage/SKILL.md
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: triage
|
|
3
|
-
description: Choose what to work on next from a set of items — a Jira board, GitHub issues, a Notion doc, a file or pasted list — and work through it one pick at a time. Priority guidelines steer the ranking when given ("newest first"). Each agreed pick runs as a /q:
|
|
3
|
+
description: Choose what to work on next from a set of items — a Jira board, GitHub issues, a Notion doc, a file or pasted list — and work through it one pick at a time. Priority guidelines steer the ranking when given ("newest first"). Each agreed pick runs as a /q:implement cycle in this session, claimed in the source (assignee, status) only with the user's agreement. For a single known item, invoke /q:implement directly.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Triage
|
|
@@ -8,30 +8,30 @@ description: Choose what to work on next from a set of items — a Jira board, G
|
|
|
8
8
|
## Ground rules
|
|
9
9
|
|
|
10
10
|
- **Follow the run contract** — `${CLAUDE_PLUGIN_ROOT}/references/run-contract.md`.
|
|
11
|
-
- **
|
|
12
|
-
- **Conventions govern the tracker**: read and follow the issue-tracking conventions (see: q conventions/issue-tracking.md), plus any project rulings, which win. Never re-ask what they settle.
|
|
13
|
-
- **Track the session**: keep a scratchpad note of the session's agreements (review mode, write-backs, priority guidelines) and each item's outcome. An outcome is the PR, plan, or nothing-to-do verdict the
|
|
11
|
+
- **Ranking is not grounding**: judge items on what the source says — titles, descriptions, labels, dates — never by exploring the code. Grounding an item against the codebase is the first step of its implement cycle, not a triage cost paid across the whole set.
|
|
12
|
+
- **Conventions govern the tracker**: read and follow the issue-tracking conventions (see: @lab43/q conventions/issue-tracking.md), plus any project rulings, which win. Never re-ask what they settle.
|
|
13
|
+
- **Track the session**: keep a scratchpad note of the session's agreements (review mode, write-backs, priority guidelines) and each item's outcome. An outcome is the PR, plan, or nothing-to-do verdict the implement cycle produced, or that the user skipped the item. Ranking and the closing recap read from this note, and it keeps the loop intact when earlier cycles are compacted away.
|
|
14
14
|
|
|
15
15
|
## Step 1: Read the set
|
|
16
16
|
|
|
17
17
|
The set comes from the invocation — a Jira board or filter, a GitHub repo's issues, a Notion doc, a file, a pasted list; given nothing, ask what to triage. Read it with whatever tool serves the source, fetching summaries rather than full item histories. Note any priority guidelines the invocation carries.
|
|
18
18
|
|
|
19
|
-
Read the priority the user set, when the source records one — a hand-ordered position, a priority field, a label. A default listing order is not one: creation date and ID say nothing about priority. A fetch can drop
|
|
19
|
+
Read the priority the user set, when the source records one — a hand-ordered position, a priority field, a label. A default listing order is not one: creation date and ID say nothing about priority. A fetch can drop fields silently. Confirm the call you use preserves the priority and carries descriptions, labels, dates, assignees. A GitHub milestone records its priority as a hand-ordered position. That order comes back only through GraphQL:
|
|
20
20
|
|
|
21
21
|
```bash
|
|
22
|
-
gh api graphql -f query='{repository(owner:"<owner>",name:"<repo>"){milestones(query:"<milestone-title>",first:10){nodes{title issues(first:100,states:OPEN){nodes{number title}}}}}}'
|
|
22
|
+
gh api graphql -f query='{repository(owner:"<owner>",name:"<repo>"){milestones(query:"<milestone-title>",first:10){nodes{title issues(first:100,states:OPEN){nodes{number title body labels(first:20){nodes{name}} assignees(first:10){nodes{login}} createdAt updatedAt}}}}}}'
|
|
23
23
|
```
|
|
24
24
|
|
|
25
25
|
`milestones(query:)` matches titles by substring, so take the node whose title is the one you were given. `gh issue list --milestone` returns creation order instead. Omitting `states: OPEN` pulls in the milestone's closed issues.
|
|
26
26
|
|
|
27
|
-
Set aside items not available to pick up rather than proposing them (source: q conventions/issue-tracking.md, Respect existing claims). Check the project's open PRs (`gh pr list`) against the set — the source may not show a fix in review. Ask the peers what work items they hold, and set those aside too (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Working alongside a peer). Any session holds an item, not just another triage run — a `/q:
|
|
27
|
+
Set aside items not available to pick up rather than proposing them (source: @lab43/q conventions/issue-tracking.md, Respect existing claims). Check the project's open PRs (`gh pr list`) against the set — the source may not show a fix in review. Ask the peers what work items they hold, and set those aside too (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Working alongside a peer). Any session holds an item, not just another triage run — a `/q:implement` invoked straight on an issue holds it too. A peer triaging the same set holds no item until it picks. Never divide the set between sessions. Never ask the user to resolve the overlap. Name the set-asides once; the user can pull any back in.
|
|
28
28
|
|
|
29
29
|
## Step 2: Settle the session
|
|
30
30
|
|
|
31
31
|
In conversational mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Collaboration modes), settle the session in one batch of questions:
|
|
32
32
|
|
|
33
|
-
- The review mode every
|
|
34
|
-
- The write-backs the issue-tracking conventions gate on a session-wide agreement: claiming each agreed pick, commenting PR links (see: q conventions/issue-tracking.md). Skip what the source can't support and what conventions already settle.
|
|
33
|
+
- The review mode every implement cycle will run under (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Review modes).
|
|
34
|
+
- The write-backs the issue-tracking conventions gate on a session-wide agreement: claiming each agreed pick, commenting PR links (see: @lab43/q conventions/issue-tracking.md). Skip what the source can't support and what conventions already settle.
|
|
35
35
|
- Anything about the set itself that ranking genuinely turns on.
|
|
36
36
|
|
|
37
37
|
Settle each answer once and don't re-ask it per item, though the user may change any answer between items. Don't ask for priority guidelines when none were given. Rank on the first of these the set gives you:
|
|
@@ -44,9 +44,9 @@ State the basis with each proposal so the user can redirect it.
|
|
|
44
44
|
|
|
45
45
|
## Step 3: Propose and hand off
|
|
46
46
|
|
|
47
|
-
Rank what remains — items neither picked nor skipped this session — and take the top one. Announce it to the peers before proposing it: you hold an item from the moment you pick it, so no two sessions spend a conversation scoping the same one. Then propose it: the recommended item, why it's next under the guidelines (or the stated basis), and the runners-up. When a set-aside would outrank the pick, or an item's claim looks stale, flag it alongside the proposal: the status may be wrong, and the user rules (source: q conventions/issue-tracking.md, Respect existing claims). The user may agree, pick a different item, adjust the guidelines — reranking takes effect immediately — or stop. Release the item you announced as soon as you are no longer holding it, and announce the next one you take up.
|
|
47
|
+
Rank what remains — items neither picked nor skipped this session — and take the top one. Announce it to the peers before proposing it: you hold an item from the moment you pick it, so no two sessions spend a conversation scoping the same one. Then propose it: the recommended item, why it's next under the guidelines (or the stated basis), and the runners-up. When a set-aside would outrank the pick, or an item's claim looks stale, flag it alongside the proposal: the status may be wrong, and the user rules (source: @lab43/q conventions/issue-tracking.md, Respect existing claims). The user may agree, pick a different item, adjust the guidelines — reranking takes effect immediately — or stop. Release the item you announced as soon as you are no longer holding it, and announce the next one you take up.
|
|
48
48
|
|
|
49
|
-
The agreed pick authorizes its handoff, nothing more. Claim the item in the source when claiming was agreed. Then continue into `/q:
|
|
49
|
+
The agreed pick authorizes its handoff, nothing more. Claim the item in the source when claiming was agreed. Then continue into `/q:implement` in this session, passing only what triage settled: the item's reference in its source (its text, when the set was pasted inline), the review mode, and any constraints from the conversation. The run reads the source itself and settles the verdict, route, and approach with the user — the pick decides only what's next.
|
|
50
50
|
|
|
51
51
|
## Step 4: Loop
|
|
52
52
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: uninstall-extension
|
|
3
|
-
description: Remove a q extension from a project, or reconcile a removal already made out of band — a hand-run npm uninstall, a teammate's merge. Invoke with the extension name. Uninstalls the package, removes its briefing index
|
|
3
|
+
description: Remove a q extension from a project, or reconcile a removal already made out of band — a hand-run npm uninstall, a teammate's merge. Invoke with the extension name. Uninstalls the package, removes its group from the briefing's docs index, drops its watermark, and surfaces the project docs that reference it for the user's ruling. Refuses @lab43/q. The changes ship as a PR.
|
|
4
4
|
---
|
|
5
5
|
|
|
6
6
|
# Uninstall Extension
|
|
@@ -9,11 +9,11 @@ Follow the run contract — `${CLAUDE_PLUGIN_ROOT}/references/run-contract.md`.
|
|
|
9
9
|
|
|
10
10
|
## Step 1: Take stock
|
|
11
11
|
|
|
12
|
-
Refuse `q` and `@lab43/q`. q is the framework rather than an extension (source: q conventions/extensions.md, Identity), and no q project can remove it (source: q conventions/documentation.md, Three tiers of conventions).
|
|
12
|
+
Refuse `q` and `@lab43/q`. q is the framework rather than an extension (source: @lab43/q conventions/extensions.md, Identity), and no q project can remove it (source: @lab43/q conventions/documentation.md, Three tiers of conventions).
|
|
13
13
|
|
|
14
14
|
Confirm the named target is an extension — any of the following identifies it:
|
|
15
15
|
|
|
16
|
-
- the `q-extension` keyword in `node_modules/<extension>/package.json` (source: q conventions/extensions.md)
|
|
16
|
+
- the `q-extension` keyword in `node_modules/<extension>/package.json` (source: @lab43/q conventions/extensions.md)
|
|
17
17
|
- the same keyword read from the registry (`npm view <extension> keywords`), for one pinned but not installed
|
|
18
18
|
- a `reconciledAgainst` entry (see: ${CLAUDE_PLUGIN_ROOT}/references/q-state.md)
|
|
19
19
|
|
|
@@ -29,14 +29,14 @@ Remove without asking — each item a no-op when already absent:
|
|
|
29
29
|
|
|
30
30
|
1. When the extension is pinned: `npm uninstall --ignore-scripts <extension>` (via the project's package manager when it isn't npm).
|
|
31
31
|
2. When the pin is already gone: run the package manager's dependency install, catching up any lockfile and `node_modules` remnants the removal left.
|
|
32
|
-
3. Remove the extension's
|
|
32
|
+
3. Remove the extension's group from the agent briefing's docs index — its heading and every line under it. An extension that shipped no `conventions/` has no group to remove.
|
|
33
33
|
4. Drop the extension's `reconciledAgainst` entry, per `${CLAUDE_PLUGIN_ROOT}/references/q-state.md`.
|
|
34
34
|
|
|
35
35
|
## Step 4: Rule on references
|
|
36
36
|
|
|
37
|
-
Grep the docs the documentation policy owns (see: q conventions/documentation.md, Taxonomy) for the extension's name. Every hit lost its backing with the extension: an overrides marker's target, a restatement's home, a cross-reference's destination. On a clean grep, skip the step.
|
|
37
|
+
Grep the docs the documentation policy owns (see: @lab43/q conventions/documentation.md, Taxonomy) for the extension's name. Every hit lost its backing with the extension: an overrides marker's target, a restatement's home, a cross-reference's destination. On a clean grep, skip the step.
|
|
38
38
|
|
|
39
|
-
Recommend a resolution for each hit, grounded in the documentation policy, in
|
|
39
|
+
Recommend a resolution for each hit, grounded in the documentation policy, in conversational mode (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, Collaboration modes) — one AskUserQuestion batch. The user rules. Apply the rulings.
|
|
40
40
|
|
|
41
41
|
## Step 5: Adversarial review
|
|
42
42
|
|
|
@@ -44,8 +44,8 @@ In ship mode, commit first. In both modes, validate the changes (see: ${CLAUDE_P
|
|
|
44
44
|
|
|
45
45
|
## Step 6: Open the PR
|
|
46
46
|
|
|
47
|
-
1. **
|
|
48
|
-
2. **Open the PR**: push the branch and open the PR per the PR-authoring rules (see: q conventions/pull-requests.md).
|
|
47
|
+
1. **The local gate**: run it over the uncommitted changes (see: ${CLAUDE_PLUGIN_ROOT}/references/run-contract.md, The local gate).
|
|
48
|
+
2. **Open the PR**: push the branch and open the PR per the PR-authoring rules (see: @lab43/q conventions/pull-requests.md).
|
|
49
49
|
3. Close the session by reporting:
|
|
50
50
|
- The extension removed, or the out-of-band removal reconciled.
|
|
51
51
|
- The index lines and watermark entry dropped, and any lockfile catch-up applied.
|