@nurix/etna 0.20.36 → 0.20.37
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/data/catalog/skills/nustack/SKILL.md +2 -2
- package/data/catalog/skills/nustack/references/cli-design.md +35 -35
- package/data/catalog/skills/nustack/references/monorepo-master-list.md +6 -6
- package/data/catalog/skills/nustack/references/monorepo-setup.md +13 -13
- package/data/catalog/skills/nustack/references/publishing.md +40 -39
- package/data/harness-index.json +1 -1
- package/data/harnesses/code/harness.json +1 -1
- package/data/harnesses/code/skills/boundary/SKILL.md +33 -22
- package/data/harnesses/code/skills/boundary/references/index.md +2 -4
- package/data/harnesses/code/skills/boundary/references/mechanisms.md +3 -10
- package/data/harnesses/code/skills/boundary/references/packs/frontend.md +17 -17
- package/data/harnesses/code/skills/boundary/references/packs/generic-tail.md +1 -1
- package/data/harnesses/code/skills/brainstorm/README.md +11 -13
- package/data/harnesses/code/skills/brainstorm/SKILL.md +150 -132
- package/data/harnesses/code/skills/brainstorm/references/doctrine.md +48 -51
- package/data/harnesses/code/skills/brainstorm/references/harvest.md +51 -56
- package/data/harnesses/code/skills/brainstorm/references/session-schema.md +48 -42
- package/data/harnesses/code/skills/design/SKILL.md +31 -35
- package/data/harnesses/code/skills/design/data/iconography.md +2 -2
- package/data/harnesses/code/skills/design/references/compose.md +14 -16
- package/data/harnesses/code/skills/design/references/foundations.md +5 -5
- package/data/harnesses/code/skills/design/references/intake.md +6 -6
- package/data/harnesses/code/skills/design/references/object-pass.md +1 -1
- package/data/harnesses/code/skills/design/references/ship-gate.md +5 -5
- package/data/harnesses/code/skills/design/references/ux-patterns/Readme.md +4 -4
- package/data/harnesses/code/skills/design/references/ux-patterns/ai-layer.md +1 -1
- package/data/harnesses/code/skills/design/references/ux-patterns/container-choice.md +1 -1
- package/data/harnesses/code/skills/design/references/ux-patterns/dashboards.md +1 -1
- package/data/harnesses/code/skills/design/references/ux-patterns/modes.md +1 -1
- package/data/harnesses/code/skills/design/references/ux-patterns/object-model.md +2 -2
- package/data/harnesses/code/skills/design/references/ux-patterns/promotion-demotion.md +1 -1
- package/data/harnesses/code/skills/design/references/ux-patterns/settings.md +1 -1
- package/data/harnesses/code/skills/design/references/ux-patterns/standard-pages.md +1 -1
- package/data/harnesses/code/skills/documentation/SKILL.md +5 -5
- package/data/harnesses/code/skills/documentation/references/examples.md +22 -22
- package/data/harnesses/code/skills/documentation/references/frontmatter.md +3 -3
- package/data/harnesses/code/skills/documentation/references/instruction-style.md +3 -3
- package/data/harnesses/code/skills/documentation/references/source-comments.md +3 -3
- package/data/harnesses/code/skills/documentation/references/style-guide.md +5 -5
- package/data/harnesses/code/skills/documentation/references/untemplated.md +8 -8
- package/data/harnesses/code/skills/documentation/scripts/doc-lint.mjs +3 -2
- package/data/harnesses/code/skills/documentation/templates/Readme.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/acceptance-criteria.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/api-reference.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/architecture-decision.md +3 -7
- package/data/harnesses/code/skills/documentation/templates/behavioral-checklist.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/changelog-entry.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/changelog-index.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/docs-readme.md +3 -3
- package/data/harnesses/code/skills/documentation/templates/doctrine.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/domain-model.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/environment-registry.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/feature.md +3 -3
- package/data/harnesses/code/skills/documentation/templates/handover.md +2 -2
- package/data/harnesses/code/skills/documentation/templates/implementation-map.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/migration-runbook.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/non-goals.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/operations-procedure.md +2 -2
- package/data/harnesses/code/skills/documentation/templates/package.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/protected-files.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/root-readme.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/security-overview.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/system-overview.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/system.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/testing-strategy.md +1 -1
- package/data/harnesses/code/skills/documentation/templates/ux-behavior.md +3 -5
- package/data/harnesses/code/skills/issue-bridge/SKILL.md +51 -16
- package/data/harnesses/code/skills/issue-bridge/references/trackers/github.md +5 -5
- package/data/harnesses/code/skills/issue-bridge/references/trackers/jira.md +11 -8
- package/data/harnesses/code/skills/issue-bridge/references/trackers/linear.md +16 -11
- package/data/harnesses/code/skills/nustack-graph/SKILL.md +38 -29
- package/data/harnesses/code/skills/polygraph/references/dispatch.md +31 -18
- package/data/harnesses/code/skills/polygraph/references/rows.md +11 -6
- package/data/harnesses/code/skills/schema-design/SKILL.md +39 -41
- package/data/harnesses/code/skills/test/SKILL.md +38 -42
- package/data/harnesses/code/skills/testing/SKILL.md +83 -73
- package/data/harnesses/code/skills/workflow-mapper/SKILL.md +156 -193
- package/data/harnesses/code/skills/workflow-mapper/references/patterns.md +15 -15
- package/data/harnesses/delivery/harness.json +1 -1
- package/data/harnesses/delivery/skills/brainstorm/README.md +11 -13
- package/data/harnesses/delivery/skills/brainstorm/SKILL.md +150 -132
- package/data/harnesses/delivery/skills/brainstorm/references/doctrine.md +48 -51
- package/data/harnesses/delivery/skills/brainstorm/references/harvest.md +51 -56
- package/data/harnesses/delivery/skills/brainstorm/references/session-schema.md +48 -42
- package/data/harnesses/delivery/skills/cost-report/SKILL.md +10 -10
- package/data/harnesses/delivery/skills/documentation/SKILL.md +5 -5
- package/data/harnesses/delivery/skills/documentation/references/examples.md +22 -22
- package/data/harnesses/delivery/skills/documentation/references/frontmatter.md +3 -3
- package/data/harnesses/delivery/skills/documentation/references/instruction-style.md +3 -3
- package/data/harnesses/delivery/skills/documentation/references/source-comments.md +3 -3
- package/data/harnesses/delivery/skills/documentation/references/style-guide.md +5 -5
- package/data/harnesses/delivery/skills/documentation/references/untemplated.md +8 -8
- package/data/harnesses/delivery/skills/documentation/scripts/doc-lint.mjs +3 -2
- package/data/harnesses/delivery/skills/documentation/templates/Readme.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/acceptance-criteria.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/api-reference.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/architecture-decision.md +3 -7
- package/data/harnesses/delivery/skills/documentation/templates/behavioral-checklist.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/changelog-entry.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/changelog-index.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/docs-readme.md +3 -3
- package/data/harnesses/delivery/skills/documentation/templates/doctrine.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/domain-model.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/environment-registry.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/feature.md +3 -3
- package/data/harnesses/delivery/skills/documentation/templates/handover.md +2 -2
- package/data/harnesses/delivery/skills/documentation/templates/implementation-map.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/migration-runbook.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/non-goals.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/operations-procedure.md +2 -2
- package/data/harnesses/delivery/skills/documentation/templates/package.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/protected-files.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/root-readme.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/security-overview.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/system-overview.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/system.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/testing-strategy.md +1 -1
- package/data/harnesses/delivery/skills/documentation/templates/ux-behavior.md +3 -5
- package/data/harnesses/delivery/skills/escalate/SKILL.md +11 -11
- package/data/harnesses/delivery/skills/prompt-eval/SKILL.md +8 -8
- package/data/harnesses/delivery/skills/prompt-library/SKILL.md +30 -9
- package/data/harnesses/delivery/skills/route/SKILL.md +8 -8
- package/data/harnesses/etna/harness.json +1 -1
- package/data/harnesses/etna/skills/boundary/SKILL.md +33 -22
- package/data/harnesses/etna/skills/boundary/references/index.md +2 -4
- package/data/harnesses/etna/skills/boundary/references/mechanisms.md +3 -10
- package/data/harnesses/etna/skills/boundary/references/packs/frontend.md +17 -17
- package/data/harnesses/etna/skills/boundary/references/packs/generic-tail.md +1 -1
- package/data/harnesses/etna/skills/brainstorm/README.md +11 -13
- package/data/harnesses/etna/skills/brainstorm/SKILL.md +150 -132
- package/data/harnesses/etna/skills/brainstorm/references/doctrine.md +48 -51
- package/data/harnesses/etna/skills/brainstorm/references/harvest.md +51 -56
- package/data/harnesses/etna/skills/brainstorm/references/session-schema.md +48 -42
- package/data/harnesses/etna/skills/documentation/SKILL.md +5 -5
- package/data/harnesses/etna/skills/documentation/references/examples.md +22 -22
- package/data/harnesses/etna/skills/documentation/references/frontmatter.md +3 -3
- package/data/harnesses/etna/skills/documentation/references/instruction-style.md +3 -3
- package/data/harnesses/etna/skills/documentation/references/source-comments.md +3 -3
- package/data/harnesses/etna/skills/documentation/references/style-guide.md +5 -5
- package/data/harnesses/etna/skills/documentation/references/untemplated.md +8 -8
- package/data/harnesses/etna/skills/documentation/scripts/doc-lint.mjs +3 -2
- package/data/harnesses/etna/skills/documentation/templates/Readme.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/acceptance-criteria.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/api-reference.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/architecture-decision.md +3 -7
- package/data/harnesses/etna/skills/documentation/templates/behavioral-checklist.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/changelog-entry.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/changelog-index.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/docs-readme.md +3 -3
- package/data/harnesses/etna/skills/documentation/templates/doctrine.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/domain-model.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/environment-registry.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/feature.md +3 -3
- package/data/harnesses/etna/skills/documentation/templates/handover.md +2 -2
- package/data/harnesses/etna/skills/documentation/templates/implementation-map.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/migration-runbook.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/non-goals.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/operations-procedure.md +2 -2
- package/data/harnesses/etna/skills/documentation/templates/package.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/protected-files.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/root-readme.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/security-overview.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/system-overview.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/system.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/testing-strategy.md +1 -1
- package/data/harnesses/etna/skills/documentation/templates/ux-behavior.md +3 -5
- package/data/harnesses/etna/skills/workflow-mapper/SKILL.md +156 -193
- package/data/harnesses/etna/skills/workflow-mapper/references/patterns.md +15 -15
- package/data/harnesses/hr/harness.json +1 -1
- package/data/harnesses/hr/skills/evaluator/SKILL.md +71 -73
- package/data/harnesses/hr/skills/evaluator/criteria/code-quality.md +28 -47
- package/data/harnesses/hr/skills/evaluator/criteria/deployment-readiness.md +33 -43
- package/data/harnesses/hr/skills/evaluator/criteria/maintainability.md +34 -46
- package/data/harnesses/hr/skills/evaluator/criteria/mechanical-ambition.md +13 -13
- package/data/harnesses/hr/skills/evaluator/criteria/problem-substantiveness.md +7 -7
- package/data/harnesses/hr/skills/evaluator/criteria/testing.md +36 -41
- package/data/harnesses/hr/skills/evaluator/criteria/ux-mechanics.md +25 -11
- package/data/harnesses/hr/skills/evaluator/criteria/value-articulation.md +7 -7
- package/data/harnesses/hr/skills/evaluator/preflight.md +27 -46
- package/data/harnesses/hr/skills/interview-eval/SKILL.md +37 -42
- package/data/harnesses/hr/skills/interview-eval/rubric.md +21 -23
- package/package.json +2 -2
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
# UX
|
|
1
|
+
# UX behavior (docs/features/{surface}-ux.md)
|
|
2
2
|
|
|
3
3
|
**Truth document.** States what a person sees and can do on a surface, and what the surface promises never to do. Present tense, like every truth document.
|
|
4
4
|
|
|
@@ -26,9 +26,7 @@ owns: # transitional, only when this document speaks
|
|
|
26
26
|
| One surface's — a panel, an editor, a dialog | `docs/features/{surface}-ux.md`; its component files' headers name it |
|
|
27
27
|
| Cross-cutting — routing, information architecture, the state vocabulary every surface obeys, presentation of streams | `docs/architecture/` — owns no code, like every architecture doc |
|
|
28
28
|
|
|
29
|
-
**Ownership: a component file names one document in its header.** A surface's components are frequently already spoken for — by the page's feature document, by the feature behind one panel — and a file's header names exactly one document. Where the header already names the feature document, this document is named in that feature document's **See also** line under For the agent instead, phrased as *different promises over the same files*, and the object closure links the two through the objects both name. Where no document speaks for the component
|
|
30
|
-
|
|
31
|
-
That matters because a doc nothing implicates is a doc that rots, and a surface rewritten under an unimplicated document is the failure this genre exists to prevent. The See also line is the weaker of the two bindings; prefer the header pointer wherever no document speaks for the component yet.
|
|
29
|
+
**Ownership: a component file names one document in its header.** A surface's components are frequently already spoken for — by the page's feature document, by the feature behind one panel — and a file's header names exactly one document. Where the header already names the feature document, this document is named in that feature document's **See also** line under For the agent instead, phrased as *different promises over the same files*, and the object closure links the two through the objects both name. Where no document speaks for the component, its header names this one; prefer that header pointer, because the See also line is the weaker binding. A document nothing implicates rots, and a surface rewritten under an unimplicated document is the failure this genre exists to prevent.
|
|
32
30
|
|
|
33
31
|
---
|
|
34
32
|
|
|
@@ -67,7 +65,7 @@ What moves the surface between states, and who causes each move — the person,
|
|
|
67
65
|
|
|
68
66
|
## Optional sections
|
|
69
67
|
|
|
70
|
-
**Copy** — the exact words, where the wording is load-bearing (a refusal, an irreversible confirmation). **Density and rhythm** — where a surface deliberately differs from the design system's default. **Open questions** — decisions deliberately
|
|
68
|
+
**Copy** — the exact words, where the wording is load-bearing (a refusal, an irreversible confirmation). **Density and rhythm** — where a surface deliberately differs from the design system's default. **Open questions** — decisions deliberately left open, so an implementer knows what to ask rather than guessing.
|
|
71
69
|
|
|
72
70
|
## Rules
|
|
73
71
|
|
|
@@ -5,7 +5,7 @@ description: The bridge between a traditional issue tracker (GitHub Issues, Jira
|
|
|
5
5
|
|
|
6
6
|
# issue-bridge — the tracker bridge method
|
|
7
7
|
|
|
8
|
-
**
|
|
8
|
+
> **No connector reachable** (no MCP server, no CLI, no API credentials — the pack for your tracker lists the probes): never stall. Accept pasted issue text, name the fields you are missing (labels, comments, linked items), and triage what you have, announced.
|
|
9
9
|
|
|
10
10
|
You bridge two systems of record. Neither is asked to change:
|
|
11
11
|
|
|
@@ -15,41 +15,76 @@ You bridge two systems of record. Neither is asked to change:
|
|
|
15
15
|
|
|
16
16
|
## Connectors
|
|
17
17
|
|
|
18
|
-
Tracker access is
|
|
18
|
+
Tracker access is this skill's own knowledge, never a harness-declared tool: a tracker is reached through an MCP entry, one of several unrelated CLIs, or an env var, varying per repo and per team, so you probe for it at the moment of use. Each tracker's pack under [`references/trackers/`](references/trackers/) lists its access options in preference order — an MCP server, a CLI, the raw API, in the order that pack sets — with the probe for each, auth setup, and the exact calls for read / search / create / comment.
|
|
19
|
+
|
|
20
|
+
- **Always read the pack for your tracker before the first tracker call.**
|
|
21
|
+
- More than one tracker in play → one pack each; the method below is identical across all of them.
|
|
19
22
|
|
|
20
23
|
## Tool tier
|
|
21
24
|
|
|
22
|
-
Read the `nustack` status from the session context (`Tool:` line)
|
|
25
|
+
Read the `nustack` status from the session context (`Tool:` line):
|
|
26
|
+
|
|
27
|
+
| Tier | Do |
|
|
28
|
+
| --- | --- |
|
|
29
|
+
| **Present-fresh** | Localize every question through `nustack graph` (`find`, `where-defined`, `who-calls`, `refs`, `impact`, `blame`, `tests-covering`) before reading source |
|
|
30
|
+
| **Present-stale** | Use it; note the gap |
|
|
31
|
+
| **Absent** | Glob/Grep/read, announced |
|
|
32
|
+
|
|
33
|
+
- **Never run an index step first** — the family re-indexes a stale store before it answers.
|
|
34
|
+
- **Syntax-level detail goes straight to source, whatever the tier** — decorator lists and their order, full function bodies, statement sequence are not in the index's query surface. Decorator *application* is indexed as a reference, attributed to the decorated declaration; what the decorator does is not.
|
|
23
35
|
|
|
24
36
|
## Mode selection
|
|
25
37
|
|
|
26
|
-
**Triage** when given issue references, a tracker query, or pasted issue text. **File** when given a harness finding to externalize — a backlog row, a drift or bookkeeping finding, an audit or critic result, a changelog discovery. Ambiguous → ask one question
|
|
38
|
+
**Triage** when given issue references, a tracker query, or pasted issue text. **File** when given a harness finding to externalize — a backlog row, a drift or bookkeeping finding, an audit or critic result, a changelog discovery. Ambiguous → ask one question; never guess.
|
|
27
39
|
|
|
28
40
|
## Triage — tracker item in, dossier out
|
|
29
41
|
|
|
30
42
|
1. **Fetch** through the connector (per the pack). No access → pasted-text mode, missing fields named.
|
|
31
|
-
2. **Classify.** Bug / feature request / question / docs-gap.
|
|
43
|
+
2. **Classify.** Bug / feature request / question / docs-gap. A question gets owning-doc pointers and a direct answer, not a dossier.
|
|
32
44
|
3. **Route.** Match the issue's vocabulary against the ownership index and feature docs' `keywords:`. Read the owning doc(s) **fully** — intent and invariants first, code second. No owning doc → say so; the absence is itself a finding.
|
|
33
|
-
4. **Localize.**
|
|
34
|
-
5. **Diagnose.**
|
|
35
|
-
6. **Dedup.** Search the tracker for siblings and priors (per the pack); check `nustack graph drift` for the same
|
|
45
|
+
4. **Localize.** Run names from the issue through `nustack graph` (per § Tool tier); every location claim carries `file:line`.
|
|
46
|
+
5. **Diagnose.** Write a root-cause hypothesis graded `certain` / `inferred` / `unresolved` — **never** present inferred as certain. Blast radius via `impact` / `coupling`; test surface via `tests-covering`.
|
|
47
|
+
6. **Dedup.** Search the tracker for siblings and priors (per the pack); check `nustack graph drift` for the same bug in a clone.
|
|
36
48
|
7. **Write the dossier** to `docs/operations/triage/YYYY-MM-DD-<tracker>-<id>-<slug>.md` and return the verdict summary.
|
|
37
|
-
8. **
|
|
49
|
+
8. **Post back** (comment, label, assign, transition) only under § Boundaries' approval gate: show exactly what would be posted, post only on an explicit yes in this session.
|
|
38
50
|
|
|
39
51
|
## The dossier
|
|
40
52
|
|
|
41
|
-
|
|
53
|
+
A dossier is a dated working artifact — it **never** claims `owns:` globs and never masquerades as a feature doc.
|
|
54
|
+
|
|
55
|
+
**Frontmatter:** `type: triage`, `tracker`, `date`, `confidence`, and the subject key:
|
|
56
|
+
|
|
57
|
+
| Subject | Key |
|
|
58
|
+
| --- | --- |
|
|
59
|
+
| A tracker item | `issue: {id: <n>, url: <url>}` — the id **numeric** |
|
|
60
|
+
| A locally-authored record | `issue: {id: local:<record-id>}` |
|
|
61
|
+
| A pull request the dossier resolves | `pr: {id: <n>}` |
|
|
62
|
+
|
|
63
|
+
**This key is machine-read:** the NuStack desktop's Issues panel joins dossiers to tracker rows on exactly this key, so a quoted number, a missing id, or a renamed key leaves the dossier orphaned — written but never surfaced beside its issue.
|
|
64
|
+
|
|
65
|
+
**Sections, in order:**
|
|
66
|
+
|
|
67
|
+
1. **Verdict** — 1–3 sentences.
|
|
68
|
+
2. Classification
|
|
69
|
+
3. Owning docs — paths.
|
|
70
|
+
4. Root cause — cited, graded.
|
|
71
|
+
5. Blast radius
|
|
72
|
+
6. Suggested fix plan — feeds the plan → PR loop; you never implement.
|
|
73
|
+
7. Test surface
|
|
74
|
+
8. Duplicates & related
|
|
75
|
+
9. **Prior-thread corrections** — claims already on the tracker thread (bot answers, maintainer comments) that your evidence shows to be wrong, each with the citation that refutes it.
|
|
76
|
+
10. Open questions
|
|
42
77
|
|
|
43
78
|
## File — harness finding in, tracker issue out
|
|
44
79
|
|
|
45
80
|
1. **Verify first.** Reproduce the finding against source before externalizing it. A claim that doesn't reproduce is reported back, never filed.
|
|
46
|
-
2. **Compose tracker-idiomatic** (per the pack): imperative title; body
|
|
47
|
-
3. **Show the draft(s).** Create only on explicit approval, through the connector.
|
|
81
|
+
2. **Compose tracker-idiomatic** (per the pack): imperative title; body of one plain-language context paragraph (no harness jargon), evidence (`file:line`, commit hashes), expected vs actual, acceptance criteria; link the owning feature doc by path.
|
|
82
|
+
3. **Show the draft(s).** Create only on explicit approval, through the connector. Many findings → one draft list, one approval, then individual creation; report every created ID.
|
|
48
83
|
4. **Close the loop.** Write the created issue's ID/URL back into the originating row — a backlog row gains the link, a bookkeeping row resolves.
|
|
49
84
|
|
|
50
85
|
## Boundaries
|
|
51
86
|
|
|
52
|
-
- Never edit source code
|
|
53
|
-
- Nothing is created, edited, or commented in the tracker without explicit approval in the current run.
|
|
54
|
-
- Repo writes are `docs/operations/triage/**` plus the loop-closing edits to `docs/history/backlog.md` / `docs/operations/bookkeeping.md`.
|
|
55
|
-
- Announce degraded
|
|
87
|
+
- **Never edit source code.** The dossier ends at the fix *plan*; implementation belongs to the plan → verification → PR loop.
|
|
88
|
+
- **Nothing is created, edited, or commented in the tracker without explicit approval in the current run.** A standing repo ruling (e.g. "never post to this upstream") overrides any approval.
|
|
89
|
+
- **Repo writes are only** `docs/operations/triage/**` plus the loop-closing edits to `docs/history/backlog.md` / `docs/operations/bookkeeping.md`.
|
|
90
|
+
- **Announce every degraded mode** — degraded output is acceptable; silently downgraded evidence quality is not.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# GitHub — connector pack
|
|
2
2
|
|
|
3
|
-
Access options in preference order. Probe each in order; use the first that answers.
|
|
3
|
+
Access options in preference order. Probe each in order; use the first that answers.
|
|
4
4
|
|
|
5
5
|
## Option 1 — the `gh` CLI (default)
|
|
6
6
|
|
|
@@ -26,12 +26,12 @@ Headers: `Authorization: Bearer <PAT>` · `Accept: application/vnd.github+json`.
|
|
|
26
26
|
- Read: `GET https://api.github.com/repos/OWNER/REPO/issues/N`
|
|
27
27
|
- Search: `GET https://api.github.com/search/issues?q=<query>` (q ≤256 chars, ≤5 boolean ops, ~10 req/min)
|
|
28
28
|
- Create: `POST /repos/OWNER/REPO/issues` `{"title","body","labels":[]}` · Comment: `POST .../issues/N/comments` `{"body"}`
|
|
29
|
-
- Labels: POST appends, PUT replaces — never PUT unless replacement is the stated intent.
|
|
29
|
+
- Labels: POST appends, PUT replaces — **never** PUT unless replacement is the stated intent.
|
|
30
30
|
|
|
31
31
|
## Composing for GitHub
|
|
32
32
|
|
|
33
|
-
Markdown body, native. Reference related issues/PRs by bare `#number` so GitHub auto-links. Labels from the owning doc's `module:` where the repo's label taxonomy allows — **read `gh label list` first; never invent labels** (real taxonomies differ: apache/superset uses `#bug:*`, not `bug`).
|
|
33
|
+
Markdown body, native. Reference related issues/PRs by bare `#number` so GitHub auto-links. Labels come from the owning doc's `module:` where the repo's label taxonomy allows — **read `gh label list` first; never invent labels** (real taxonomies differ: apache/superset uses `#bug:*`, not `bug`).
|
|
34
34
|
|
|
35
|
-
## Ecosystem notes
|
|
35
|
+
## Ecosystem notes
|
|
36
36
|
|
|
37
|
-
|
|
37
|
+
`anthropics/claude-code-action` runs the reverse direction — an @claude mention inside an issue triggers a CI session. Never confuse it with this pack.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Jira — connector pack
|
|
2
2
|
|
|
3
|
-
Access options in preference order. Probe each in order; use the first that answers.
|
|
3
|
+
Access options in preference order. Probe each in order; use the first that answers.
|
|
4
4
|
|
|
5
5
|
## Option 1 — the official Atlassian Remote MCP Server (Cloud only)
|
|
6
6
|
|
|
7
7
|
Probe: an `atlassian` entry in `.mcp.json` / Atlassian MCP tools visible in-session.
|
|
8
8
|
Setup: `claude mcp add --transport http atlassian https://mcp.atlassian.com/v1/mcp/authv2`, then `/mcp` in-session for the OAuth 2.1 flow. **Cloud only — no Data Center.** Rate limits: 500–1,000 calls/hr by plan.
|
|
9
|
-
**
|
|
9
|
+
**Atlassian publishes no tool names** — introspect the live tool list from your session (ToolSearch / the MCP tool listing) before planning calls; expect find/create/update/comment/transition capabilities per Atlassian's own examples.
|
|
10
10
|
|
|
11
11
|
## Option 2 — community MCP: `sooperset/mcp-atlassian` (Cloud + Server/DC)
|
|
12
12
|
|
|
@@ -16,7 +16,7 @@ Confirmed tool names: `jira_get_issue` · `jira_search` (JQL) · `jira_create_is
|
|
|
16
16
|
|
|
17
17
|
## Option 3 — CLIs
|
|
18
18
|
|
|
19
|
-
**acli** (Atlassian-official). Probe: `acli --version` + an authenticated site. **
|
|
19
|
+
**acli** (Atlassian-official). Probe: `acli --version` + an authenticated site. **The namespace is `workitem`, not `issue`.**
|
|
20
20
|
`acli jira workitem view KEY-1 --json` · `workitem search --jql "..." --json [--paginate]` · `workitem create --summary --project --type` · `workitem comment create --key KEY-1 --body "..."`.
|
|
21
21
|
|
|
22
22
|
**jira-cli** (ankitpokhrel, 5.9k★, MIT). Probe: `jira me`. Setup: `jira init` (Cloud: email + `JIRA_API_TOKEN`; DC: PAT + `JIRA_AUTH_TYPE=bearer`).
|
|
@@ -26,15 +26,18 @@ Confirmed tool names: `jira_get_issue` · `jira_search` (JQL) · `jira_create_is
|
|
|
26
26
|
|
|
27
27
|
Basic auth `email:API_token`. Base `https://<domain>.atlassian.net/rest/api/3/`.
|
|
28
28
|
- Read: `GET /rest/api/3/issue/{KEY}`
|
|
29
|
-
- **JQL search: `GET /rest/api/3/search/jql`** —
|
|
29
|
+
- **JQL search: `GET /rest/api/3/search/jql`** — **never** `/rest/api/3/search`, which Atlassian has deprecated for removal.
|
|
30
30
|
- Create: `POST /rest/api/3/issue` — **`description` must be ADF** (`{"type":"doc","version":1,"content":[…]}`).
|
|
31
31
|
- Comment: `POST /rest/api/3/issue/{KEY}/comment` — body must be ADF.
|
|
32
|
-
- **ADF inconvenient → v2**: `/rest/api/2/issue` + `/rest/api/2/issue/{KEY}/comment` take plain-string bodies; v2 JQL endpoint is `/rest/api/2/search`.
|
|
32
|
+
- **ADF inconvenient → v2**: `/rest/api/2/issue` + `/rest/api/2/issue/{KEY}/comment` take plain-string bodies; the v2 JQL endpoint is `/rest/api/2/search`.
|
|
33
33
|
|
|
34
34
|
## Composing for Jira
|
|
35
35
|
|
|
36
|
-
Map to the project's real issue types (`Bug`/`Story`/`Task` — list them
|
|
36
|
+
- Map to the project's real issue types (`Bug`/`Story`/`Task`) — list them; never assume.
|
|
37
|
+
- Set `components` from the owning doc's `module:` where components exist.
|
|
38
|
+
- Atlassian's UI and `acli` say "work item" where the API says "issue" — expect both vocabularies.
|
|
39
|
+
- Leave estimates, sprints, and epic links to humans unless instructed.
|
|
37
40
|
|
|
38
|
-
## Ecosystem notes
|
|
41
|
+
## Ecosystem notes
|
|
39
42
|
|
|
40
|
-
No official Anthropic Jira skill
|
|
43
|
+
No official Anthropic Jira skill exists, and the community skills (JIRA-Assistant-Skills 42★, two atlassian-skills repos, an acli wrapper) are small-adoption — this pack defers to none of them.
|
|
@@ -1,20 +1,23 @@
|
|
|
1
1
|
# Linear — connector pack
|
|
2
2
|
|
|
3
|
-
Access options in preference order. Probe each in order; use the first that answers.
|
|
3
|
+
Access options in preference order. Probe each in order; use the first that answers.
|
|
4
4
|
|
|
5
5
|
## Option 1 — the official Linear MCP server
|
|
6
6
|
|
|
7
7
|
Probe: a `linear`/`linear-server` entry in `.mcp.json` / Linear MCP tools visible in-session.
|
|
8
|
-
Setup: `claude mcp add --transport http linear-server https://mcp.linear.app/mcp`, then `/mcp` for OAuth 2.1. A **read-only endpoint exists**: `https://mcp.linear.app/mcp/readonly` — prefer it for triage-only sessions. Direct bearer also works (`Authorization: Bearer <token>` — OAuth token or a Linear personal API key; a Read-only API key
|
|
9
|
-
**
|
|
8
|
+
Setup: `claude mcp add --transport http linear-server https://mcp.linear.app/mcp`, then `/mcp` for OAuth 2.1. A **read-only endpoint exists**: `https://mcp.linear.app/mcp/readonly` — prefer it for triage-only sessions. Direct bearer also works (`Authorization: Bearer <token>` — an OAuth token or a Linear personal API key; a Read-only API key enforces read-only).
|
|
9
|
+
**Linear publishes no tool names** — introspect the live tool list before planning calls; expect find/create/update tools over issues, projects, comments.
|
|
10
10
|
|
|
11
11
|
## Option 2 — community MCP servers
|
|
12
12
|
|
|
13
|
-
|
|
13
|
+
| Server | Shape | Pick when |
|
|
14
|
+
| --- | --- | --- |
|
|
15
|
+
| `tacticlaunch/mcp-linear` (146★, MIT) | 150+ `linear_*` tools, TOOLS.md published | You need exhaustive coverage |
|
|
16
|
+
| `prime-radiant-inc/streamlinear` (89★, MIT) | One dispatch tool, `action: search\|get\|update\|comment\|create\|graphql\|help`, ~500 schema tokens; auth `LINEAR_API_TOKEN` | You want token efficiency |
|
|
14
17
|
|
|
15
18
|
## Option 3 — CLI
|
|
16
19
|
|
|
17
|
-
`@schpet/linear-cli` (binary `linear`, 911★, actively maintained
|
|
20
|
+
`@schpet/linear-cli` (binary `linear`, 911★, actively maintained). **Never `@linear/cli`** — Linear's own npm CLIs are abandoned. Probe: `linear --version`. Install: `brew install schpet/tap/linear`. Branch-aware issue detection, list/start/create, PR text generation.
|
|
18
21
|
|
|
19
22
|
## Option 4 — GraphQL fallback
|
|
20
23
|
|
|
@@ -23,15 +26,17 @@ Endpoint `https://api.linear.app/graphql`. **Auth header for a personal API key
|
|
|
23
26
|
- Search: `{ issues(first: 25, filter: {title: {contains: "…"}}) { edges { node { id identifier title } } pageInfo { hasNextPage endCursor } } }` (Relay cursors; also `issueSearch`/`searchIssues`)
|
|
24
27
|
- Create (approval-gated): `mutation { issueCreate(input: {title: "…", teamId: "<uuid>", description: "…", labelIds: […]}) { success issue { id identifier url } } }`
|
|
25
28
|
- Comment (approval-gated): `mutation { commentCreate(input: {issueId: "<uuid>", body: "…"}) { success comment { id } } }`
|
|
26
|
-
|
|
29
|
+
|
|
30
|
+
Rate limits: API key 2,500 req/hr plus a complexity budget (single request cap 10,000 points — keep `first:` small on nested connections); watch the `X-RateLimit-*` / `X-Complexity` headers.
|
|
27
31
|
|
|
28
32
|
## Composing for Linear — including Linear's own agent rules
|
|
29
33
|
|
|
30
|
-
Linear
|
|
34
|
+
Linear's **Agent Interaction Guidelines** (linear.app/developers/aig) carry two rules that bind a writer even outside formal Agent Sessions:
|
|
31
35
|
- **You are a `delegate`, never an `assignee`** — humans keep ownership of issues you touch.
|
|
32
|
-
- **Never move work to a terminal state** — done/canceled transitions belong to humans
|
|
33
|
-
|
|
36
|
+
- **Never move work to a terminal state** — done/canceled transitions belong to humans. Starting work maps to the team's lowest-position "started" state, and only when instructed.
|
|
37
|
+
|
|
38
|
+
Body is native markdown. Pick team and project explicitly — **never** guess a team. Set priority conservatively (default: none). Cycles and estimates stay human.
|
|
34
39
|
|
|
35
|
-
## Ecosystem notes
|
|
40
|
+
## Ecosystem notes
|
|
36
41
|
|
|
37
|
-
The strongest community skill (`wrsmith108/linear-claude-skill`, 121★) itself recommends the official MCP server
|
|
42
|
+
No official Anthropic Linear skill exists. The strongest community skill (`wrsmith108/linear-claude-skill`, 121★) itself recommends the official MCP server, matching this pack's Option 1.
|
|
@@ -6,59 +6,68 @@ description: Query the code graph before reading source. An LLM-first codebase i
|
|
|
6
6
|
|
|
7
7
|
# nustack graph — the index-first method
|
|
8
8
|
|
|
9
|
-
|
|
9
|
+
## When the tool is absent
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
- **undecided** (no file, no key, or anything unrecognised) — fall back to the cold method *and* make the offer **once**: this repository would answer "where is / who calls / what changed / who owns" from an index instead of a grep sweep. `npx @nurix/nustack graph overview` runs it without installing anything; `npm install -g @nurix/nustack` puts it on `PATH`. **Ask, never act** — a global npm install modifies the machine, and indexing writes to `~/.codegraph`. Record the answer with `recordDecision` either way, so the question is asked at most once per repo per machine.
|
|
13
|
-
- **`accepted` but the binary is gone** — treat as undecided; a failed or removed install is not a standing yes.
|
|
14
|
-
|
|
15
|
-
**A failed install is `absent`, not an error to retry.** Global installs fail on machines without permission; say so once, fall back, and move on. `npx @nurix/nustack` needs no install at all and is the shorter ladder when one command is all you want.
|
|
11
|
+
If `nustack --version` fails, do not stall: read `tool.nustack` in `.claude/state/decisions.tsv` and fall back to the cold method — grep, targeted reads, `git log`.
|
|
16
12
|
|
|
17
|
-
|
|
13
|
+
- **`declined`** — fall back **silently**. Never mention the tool or re-offer it.
|
|
14
|
+
- **Undecided** (no file, no key, or an unrecognised value) — fall back *and* offer the tool **once**: this repository could answer "where is / who calls / what changed / who owns" from an index instead of a grep sweep. `npx @nurix/nustack graph overview` runs it with no install; `npm install -g @nurix/nustack` puts it on `PATH`. **Ask, never act** — a global install modifies the machine and indexing writes to `~/.codegraph`. Record the answer with `recordDecision` either way, so the question is asked at most once per repo per machine.
|
|
15
|
+
- **`accepted` but the binary is gone** — treat as undecided; a failed or removed install is not a standing yes.
|
|
18
16
|
|
|
19
|
-
**A
|
|
17
|
+
**A failed install means absent — never retry it.** Global installs fail on machines without permission: say so once, fall back, move on. `npx` is the shorter ladder when one command is all you want.
|
|
20
18
|
|
|
21
|
-
**
|
|
19
|
+
**An explicit invocation overrides a stored decline.** When the user asks for this skill by name, honour it and re-offer — "stop asking" must never become "never usable".
|
|
22
20
|
|
|
23
21
|
Everything below assumes the tool is present.
|
|
24
22
|
|
|
25
|
-
|
|
23
|
+
## What every answer carries
|
|
24
|
+
|
|
25
|
+
- **Scope** — the git root of the working directory; no flags needed inside this repository. `--repo <pathOrId>` asks about another one.
|
|
26
|
+
- **Confidence** — each section is labelled `CERTAIN`, `INFERRED` or `UNRESOLVED`; the answer announces anything the token budget dropped and says what an empty section means. Trust those labels.
|
|
27
|
+
- **Freshness** — `nustack graph` re-indexes a stale store before it answers, so never run `index` to make a query correct. `--no-refresh` answers from the index as it stands — a deliberate choice, never an accidental one.
|
|
28
|
+
- **A never-indexed repository** — the tool says so instead of answering wrongly. `nustack graph index` builds it, under the same ask-first rule as the install.
|
|
26
29
|
|
|
27
30
|
## The method order
|
|
28
31
|
|
|
29
32
|
Localize through the index **before** opening any file, in this order; then read only the files it points at.
|
|
30
33
|
|
|
31
|
-
1. **`nustack graph find <fragment>`** — symbols and file paths by name fragment
|
|
32
|
-
2. **`nustack graph where-defined <symbol>`** / **`nustack graph outline <file>`** — pin the definition; map a big file. `outline`
|
|
33
|
-
3. **`nustack graph who-calls <symbol>`** / **`nustack graph impact <target>`** — callers, and blast radius
|
|
34
|
-
4. **`nustack graph churn --days N --path <dir>`** · **`coupling --path <file>`** · **`owners <path>`** · **`tests-covering <file>`** — the history layer: what
|
|
34
|
+
1. **`nustack graph find <fragment>`** — symbols and file paths by name fragment; the entry point when you have only the issue's vocabulary. It matches symbol names only — never string literals, dict keys, or SQL fragments; grep for those.
|
|
35
|
+
2. **`nustack graph where-defined <symbol>`** / **`nustack graph outline <file>`** — pin the definition; map a big file. Use `outline` instead of reading a 100+ declaration file blind: it returns a navigable, line-numbered list. The default token budget truncates a large file's outline — pass `--limit N` (which lifts the budget) or `--budget 0`; an explicit `--budget` wins over `--limit`.
|
|
36
|
+
3. **`nustack graph who-calls <symbol>`** / **`nustack graph impact <target>`** — callers, and blast radius. `impact` reports static reach and historical co-change reach separately; never merge them — where they disagree, the disagreement is the finding. `who-calls` also tabulates the keyword arguments each call site passes, so "which call sites omit this option" is one query.
|
|
37
|
+
4. **`nustack graph churn --days N --path <dir>`** · **`coupling --path <file>`** · **`owners <path>`** · **`tests-covering <file>`** — the history layer: what is hot, what changes together, who knows this area and how recently, which test file historically guards this file. `coupling` surfaces *hidden coupling* — co-change with no static reference, which no amount of reading reveals.
|
|
35
38
|
5. **`nustack graph god-objects --minSymbols 30`** / **`hotspots`** / **`overview`** — repo-scale orientation and risk.
|
|
36
39
|
|
|
37
|
-
Then read
|
|
40
|
+
Then read with `sed -n` ranges at the lines the index gave you — the index does discovery, reading does diagnosis. Add `--json` when a wrapper needs structure; the answer arrives in the CLI's envelope, `{ nustackJsonVersion, command, ok, data }`.
|
|
38
41
|
|
|
39
|
-
|
|
42
|
+
| Other verb | Answers |
|
|
43
|
+
| --- | --- |
|
|
44
|
+
| `nustack graph blame <file> [--line N]` | The commits behind a file or one line, from git at query time |
|
|
45
|
+
| `nustack graph refs <name>` | The data-reference layer: where a name is used as a dict/object key, attribute/field, import, or type annotation, with read/write direction and a cross-language flag when the name spans Python and TypeScript — "who reads `x_axis_sort`" / "who writes `chart.query_context`" in one call |
|
|
46
|
+
| `nustack graph drift` | Near-duplicate function bodies crossed with co-change history — similar code whose files never change together is an unfinished refactor waiting to disagree |
|
|
47
|
+
| `nustack graph status` | What the index holds — indexed HEAD, file and symbol counts, staleness. Reach for it when an answer surprises you |
|
|
48
|
+
| `nustack graph index [--commits N]` | An explicit rebuild |
|
|
40
49
|
|
|
41
|
-
|
|
50
|
+
## The boundary — what the index cannot answer
|
|
42
51
|
|
|
43
|
-
|
|
52
|
+
Fall back to reading immediately for these; never retry the index.
|
|
44
53
|
|
|
45
|
-
- **Free-text string literals** (SQL templates, prose, format strings) — grep. Identifier-shaped keys and fields
|
|
46
|
-
- **Framework reflection** (Marshmallow `@post_load`, signal handlers, `appbuilder.add_api(Cls)` registration) — invisible to call edges.
|
|
54
|
+
- **Free-text string literals** (SQL templates, prose, format strings) — grep. Identifier-shaped keys and fields **are** indexed (`refs <name>`); anything longer or containing spaces is not.
|
|
55
|
+
- **Framework reflection** (Marshmallow `@post_load`, signal handlers, `appbuilder.add_api(Cls)` registration) — invisible to call edges. A bare decorator *application* (`@has_access_api`) **is** indexed as a reference; what the decorator does and when it runs is not.
|
|
47
56
|
- **Data flow and mechanism** ("does this value reach that function", "what order do these run in") — always reading work.
|
|
48
57
|
|
|
49
|
-
Indexed symbol forms
|
|
58
|
+
Indexed symbol forms: statement declarations, `const X = () => {}`, named function expressions inside wrapper calls (`typedMemo(function DataTable() {})`), TS/JS class fields, and Python class-body fields (`is_dttm = Column(...)`). `outline` renders nested members as `Parent › member`.
|
|
50
59
|
|
|
51
|
-
## Traps
|
|
60
|
+
## Traps
|
|
52
61
|
|
|
53
62
|
- **Bare-name collision.** Call references match by name, not resolved binding. When a name has several definitions, `who-calls` lists every candidate and says so in its subject line — read that section before trusting the call sites, and pass `--scope <path-fragment>` (also on `find`, `where-defined`, `impact`) to narrow to a package.
|
|
54
|
-
- **`nustack graph functions` lists the graph's own verbs**, not the repository's functions. For
|
|
55
|
-
- **Churn windows.** `churn --days 180`
|
|
63
|
+
- **`nustack graph functions` lists the graph's own verbs**, not the repository's functions. For repository functions use `find`.
|
|
64
|
+
- **Churn windows.** An empty `churn --days 180` does not mean quiet history — widen the window. Directory-scope churn ranks by raw commit count and buries small-but-critical files; for specific files use `owners` / `coupling` per file.
|
|
56
65
|
- **`tests-covering` is co-change evidence, not executed coverage** — it names the right test file to open; it cannot say the specific scenario is tested.
|
|
57
|
-
- **Coupling on a busy file has a noise tail** — partners
|
|
58
|
-
- **The history layer sees one window, and
|
|
59
|
-
- **`owners` is authorship weight, not a file-touch tally** — an author
|
|
60
|
-
- **The first query after a long gap pays for the re-index
|
|
66
|
+
- **Coupling on a busy file has a noise tail** — partners below 15% shared commits are usually PR cohabitation, not real coupling. Verify a partner with a read before adding it to a touch-list.
|
|
67
|
+
- **The history layer sees one window, and every refresh resets it to 5000 commits.** `churn`, `owners`, `coupling`, `blame` and `tests-covering` answer over the ingested commits; an index, the automatic one included, takes the most recent 5000 unless `index --commits N` says otherwise. On a deeper repository those answers are true of the window, not the repository, and the next refresh silently narrows a wider window back. Always report them as "over the last N commits", and re-ask for the depth you need.
|
|
68
|
+
- **`owners` is authorship weight, not a file-touch tally** — an author counts once per commit touching the path, however many of its files that commit changed. Never transcribe its numbers as "files changed".
|
|
69
|
+
- **The first query after a long gap pays for the re-index** — tens of seconds on a large repository before the answer appears. That is one wait, not a per-query cost; `--no-refresh` skips it when the old answer will do.
|
|
61
70
|
|
|
62
71
|
## Division of truth in this repository
|
|
63
72
|
|
|
64
|
-
`docs/` is the source of truth for **intent** — what a feature is for, its invariants, decisions, vocabulary. The code graph is the source of truth for **facts** — where things are, who calls what, what changed together, who owns what. Never copy live facts (caller counts, churn numbers) into docs as if permanent; never ask the index for intent.
|
|
73
|
+
`docs/` is the source of truth for **intent** — what a feature is for, its invariants, decisions, vocabulary. The code graph is the source of truth for **facts** — where things are, who calls what, what changed together, who owns what. **Never** copy live facts (caller counts, churn numbers) into docs as if permanent; never ask the index for intent.
|
|
@@ -4,7 +4,7 @@ Load when: composing a context pack, dispatching any role, packeting rows, recov
|
|
|
4
4
|
|
|
5
5
|
## The run folder
|
|
6
6
|
|
|
7
|
-
`.claude/state/polygraph/{YYYY-MM-DD-slug}/`
|
|
7
|
+
`.claude/state/polygraph/{YYYY-MM-DD-slug}/` is machine-local, never tracked, and deleted when the run closes:
|
|
8
8
|
|
|
9
9
|
```
|
|
10
10
|
partials/{doc}.psv one per finder — its whole output, no header
|
|
@@ -16,22 +16,22 @@ apply-{doc}.psv id|outcome|note
|
|
|
16
16
|
packs/{doc}.md the context pack each finder and applier reads
|
|
17
17
|
```
|
|
18
18
|
|
|
19
|
-
Work items pass through files, never through a dispatch call's arguments — a resumed agent may not carry arguments, and one that dies on a missing argument dies before it reads anything.
|
|
19
|
+
**Work items pass through files, never through a dispatch call's arguments** — a resumed agent may not carry its arguments, and one that dies on a missing argument dies before it reads anything.
|
|
20
20
|
|
|
21
21
|
## The context pack — the agent's whole reading list
|
|
22
22
|
|
|
23
|
-
|
|
23
|
+
Write one page per target document before the first dispatch. **Never point an agent at the charter, the backlog, the ownership index, or the findings file** — that hands it a 500 KB read to extract 2 KB of fact, and hands the same read to every other agent in the wave. The pack carries the 2 KB:
|
|
24
24
|
|
|
25
25
|
| Section | Content |
|
|
26
26
|
| --- | --- |
|
|
27
|
-
| Target | the doc path; for a plan target, the plan path and the Proposed Changes paths that intersect this doc
|
|
28
|
-
| Code | the doc
|
|
27
|
+
| Target | the doc path; for a plan target, the plan path and the Proposed Changes paths that intersect the files this doc speaks for |
|
|
28
|
+
| Code | the files the doc speaks for — the source files whose headers name it, and its `owns:` globs resolved to the files that exist |
|
|
29
29
|
| Precedent | the quotations from guardrails, accepted decisions, and doctrine that **name** a subject this doc covers — the naming words only, with `path:line` |
|
|
30
30
|
| Already tracked | backlog and register rows that name a subject this doc covers, as `path:line` |
|
|
31
31
|
| Rulings | owner answers that bind this subject, verbatim |
|
|
32
32
|
| Read budget | the two clauses below, verbatim |
|
|
33
33
|
|
|
34
|
-
|
|
34
|
+
Every pack carries these two clauses:
|
|
35
35
|
|
|
36
36
|
> Tree state: re-check every citation against today's tree before acting; a claim that fails to reproduce dies as *did not reproduce* — never becomes an edit. READ-ONLY everywhere except your one output file.
|
|
37
37
|
|
|
@@ -51,30 +51,43 @@ Where the runtime has no such agent installed, dispatch an independent subagent
|
|
|
51
51
|
|
|
52
52
|
## Packets — one doc, one applier
|
|
53
53
|
|
|
54
|
-
|
|
54
|
+
Compose packets by hand; routing is judgment. `audit.mjs` asserts the one mechanical invariant: **no document appears in two packets** — appliers run in parallel, and two agents in one file silently lose each other's edits.
|
|
55
55
|
|
|
56
|
-
**Packet by the doc the fix belongs in,
|
|
56
|
+
- **Packet by the doc the fix belongs in, never the doc a row's evidence cites.** Citations say where the evidence lives; the fix usually belongs elsewhere, and a bounced row's `needs-cross-doc` note names where.
|
|
57
|
+
- **A row with no derivable doc goes to the owner** — never into a packet "to see what the agent makes of it".
|
|
57
58
|
|
|
58
|
-
|
|
59
|
+
| Rows | Destination |
|
|
60
|
+
| --- | --- |
|
|
61
|
+
| QUESTION, and any row with `depends_on` set | the owner, in your report |
|
|
62
|
+
| CONTESTED | you, with both sets of evidence |
|
|
63
|
+
| RESIDUE, and any row whose subject is a source file — a stale comment included | the register |
|
|
64
|
+
| everything else | the owning doc's packet |
|
|
59
65
|
|
|
60
66
|
## Verification — budgeted by what it caught
|
|
61
67
|
|
|
62
|
-
- **The applier re-check is the law
|
|
63
|
-
- **Blind re-derivation is discretionary.** Send a row *you* doubt
|
|
68
|
+
- **The applier re-check is the law** — it kills more false positives than every other mechanism combined.
|
|
69
|
+
- **Blind re-derivation is discretionary.** Send only a row *you* doubt, with claim and subject only. As a mandatory stage it refutes nothing: finders' self-doubt is conservative, and the errors sit in the confident pile, which is where your own read of the evidence looks. Disagreement makes the row CONTESTED; a verification never overwrites a verdict.
|
|
64
70
|
|
|
65
71
|
## Fold-back
|
|
66
72
|
|
|
67
|
-
After each applier returns, its outcomes
|
|
73
|
+
After each applier returns, turn its outcomes into row state by your own edit, then run `audit.mjs` to check the arithmetic.
|
|
74
|
+
|
|
75
|
+
| Outcome | Row state |
|
|
76
|
+
| --- | --- |
|
|
77
|
+
| `applied` · `registered` · `exempt-frozen` | `resolved`, the resolution stamped with how |
|
|
78
|
+
| `refuted-on-apply` | `resolved`, resolution `did not reproduce` — a legitimate death; its count is the quality signal you report |
|
|
79
|
+
| `needs-cross-doc` · `blocked-on-question` · `skipped` | stays open — repacket, or hold for the answer |
|
|
68
80
|
|
|
69
|
-
|
|
70
|
-
- `refuted-on-apply` → `resolved`, resolution `did not reproduce`. A legitimate death; its count is the quality signal you report.
|
|
71
|
-
- `needs-cross-doc` · `blocked-on-question` · `skipped` → stays open — repacket, or hold for the answer.
|
|
72
|
-
- COHERENT rows close when recorded; they carry no work.
|
|
81
|
+
COHERENT rows close when recorded; they carry no work.
|
|
73
82
|
|
|
74
83
|
## Recovery
|
|
75
84
|
|
|
76
|
-
**The file on disk is the recovery unit, never the wave.** A dead agent costs its remainder
|
|
85
|
+
**The file on disk is the recovery unit, never the wave.** A dead agent costs only its remainder: read what landed and relaunch that.
|
|
86
|
+
|
|
87
|
+
- **Partial at the turn cap:** resume the finder once from its partial; a second partial is accepted as that doc's sweep and named as such in the report.
|
|
88
|
+
- **Time bound:** every dispatch names its output file and a time bound. An agent past its bound with no file is dead — relaunch it, never wait on it, and never let one runaway agent hold the run.
|
|
89
|
+
- **Gates** — lint, links, ownership — run in your own seat.
|
|
77
90
|
|
|
78
91
|
## Price
|
|
79
92
|
|
|
80
|
-
|
|
93
|
+
**Before dispatching, state the price whenever a run exceeds ten documents or an owner directive names a tier:** the per-doc cost at the pinned tier, the wave count under the concurrency ceiling, and the total; for a stronger tier, the multiplier and both totals. The directive and the estimate go in the changelog entry.
|
|
@@ -35,23 +35,28 @@ id|subject|claim|evidence|counter_evidence|verdict|confidence|depends_on|status|
|
|
|
35
35
|
| `UNBUILT` | a documented design with no code behind it — decided-unbuilt (the repo's marker convention), abandoned, or a document that should die; only the owner distinguishes the last two, so suspecting either makes the row a QUESTION | the marker |
|
|
36
36
|
| `RESIDUE` | code a standing decision condemns by name — running, even load-bearing, and still retiring | a register row, never a doc edit |
|
|
37
37
|
| `CONTESTED` | the evidence conflicts — a verifier and a finder disagree, or a claim has no code to arbitrate and a sibling document says otherwise | the primary judges with both sets of evidence in hand |
|
|
38
|
-
| `QUESTION` | only the owner can resolve it — intent, not evidence, is what is missing |
|
|
38
|
+
| `QUESTION` | only the owner can resolve it — intent, not evidence, is what is missing | returned to the owner in full in the report; the answer arrives as a further dispatch |
|
|
39
39
|
|
|
40
40
|
A disposition is the verdict's default; where the primary overrides it, the resolution says so. **A verification never overwrites a verdict** — disagreement makes the row CONTESTED.
|
|
41
41
|
|
|
42
42
|
## The residue guard
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
Test an UNDOCUMENTED row's subject against the precedent pack before it becomes a doc edit — this is the one place the audit can silently undo the repo's own decisions.
|
|
45
45
|
|
|
46
|
-
The
|
|
46
|
+
- **The test is naming.** A precedent matches only when it names the subject — the file, table, route, command, or surface, by the product's own name for it — and the row quotes the naming words into `evidence`.
|
|
47
|
+
- **No match:** a precedent describing a *resembling* thing; shared adjectives ("legacy", "old export lane"); a misread pronoun.
|
|
48
|
+
- **Unsure → QUESTION, never a silent RESIDUE.** The errors are not symmetric: a missed match resurfaces when the owner reads the doc it produced, but a false match retires code the product still ships and withholds its documentation.
|
|
47
49
|
|
|
48
50
|
## Frozen records and code
|
|
49
51
|
|
|
50
52
|
- **Frozen records are exempt** — a completed plan, a changelog entry, an archived document resolves `exempt-frozen`; its claims were true when frozen and the tree does not correct history.
|
|
51
|
-
- **The audit never edits code.** A code-side finding — a bug, a stale source comment, the unbuilt, residue — exits as a register row for the planning workflow, however small the edit and however directly it is asked for.
|
|
53
|
+
- **The audit never edits code.** A code-side finding — a bug, a stale source comment, the unbuilt, residue — exits as a register row for the planning workflow, however small the edit and however directly it is asked for.
|
|
54
|
+
- **Markdown is not source.** Every document read may be edited under the applier discipline, package and root READMEs included; the line is doc versus code, not proximity to `src/`.
|
|
52
55
|
|
|
53
56
|
## A document's right to exist
|
|
54
57
|
|
|
55
|
-
A wholly stale document passes a sentence-by-sentence audit one true sentence at a time
|
|
58
|
+
A wholly stale document passes a sentence-by-sentence audit one true sentence at a time. So a finder reading a document whose subject is gone, whose authority another doc has absorbed, or whose content belongs inside a sibling emits **one QUESTION row proposing deletion or merge**, carrying the inbound-reference count: who links here, which index rows list it, which ownership globs it claims.
|
|
56
59
|
|
|
57
|
-
**
|
|
60
|
+
- **Deletion is owner-approved, always.** An approved deletion removes the file, repoints every inbound reference to the surviving authority, and leaves **no redirect stub** — an annotation, banner, or status flag left in the reading path is not a source of truth, however carefully the surviving sentences are hedged.
|
|
61
|
+
- **A surviving subject with wrong content** is MISDESCRIBED, never a deletion candidate.
|
|
62
|
+
- **Abandonment has no marker.** A design decided against is not owed: its claims come **out** of every marker that carried them rather than being reworded inside one, and the document survives as the record of a decision not to build, its status saying so. The tell that this went wrong: a reader finishes the paragraph still expecting the feature.
|