@imix-js/taproot 0.6.0 → 0.7.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -1
- package/dist/adapters/index.js +62 -35
- package/dist/adapters/index.js.map +1 -1
- package/dist/cli.js +8 -1
- package/dist/cli.js.map +1 -1
- package/dist/commands/commithook.js +7 -1
- package/dist/commands/commithook.js.map +1 -1
- package/dist/commands/init.d.ts +4 -2
- package/dist/commands/init.js +94 -38
- package/dist/commands/init.js.map +1 -1
- package/dist/commands/truth-sign.js +3 -1
- package/dist/commands/truth-sign.js.map +1 -1
- package/dist/commands/update.js +156 -27
- package/dist/commands/update.js.map +1 -1
- package/dist/core/config.js +9 -4
- package/dist/core/config.js.map +1 -1
- package/dist/core/configuration.d.ts +4 -3
- package/dist/core/configuration.js +7 -5
- package/dist/core/configuration.js.map +1 -1
- package/dist/core/fs-walker.js +1 -1
- package/dist/core/fs-walker.js.map +1 -1
- package/dist/core/paths.d.ts +6 -0
- package/dist/core/paths.js +12 -0
- package/dist/core/paths.js.map +1 -0
- package/dist/core/test-cache.js +1 -1
- package/dist/core/test-cache.js.map +1 -1
- package/dist/core/version-check.d.ts +9 -0
- package/dist/core/version-check.js +43 -0
- package/dist/core/version-check.js.map +1 -0
- package/dist/validators/structure-rules.js +1 -1
- package/dist/validators/structure-rules.js.map +1 -1
- package/docs/agents.md +2 -2
- package/docs/architecture.md +3 -3
- package/docs/cli.md +7 -7
- package/docs/configuration.md +6 -6
- package/docs/patterns.md +7 -7
- package/docs/security.md +4 -4
- package/docs/workflows.md +1 -1
- package/package.json +1 -1
- package/skills/backlog.md +7 -7
- package/skills/behaviour.md +2 -2
- package/skills/bug.md +2 -2
- package/skills/commit.md +3 -3
- package/skills/discover-truths.md +7 -7
- package/skills/guide.md +1 -1
- package/skills/implement.md +5 -5
- package/skills/ineed.md +4 -4
- package/skills/refine.md +3 -3
- package/skills/review-all.md +2 -2
- package/skills/status.md +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"structure-rules.js","sourceRoot":"","sources":["../../src/validators/structure-rules.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,IAAI,EAAE,MAAM,MAAM,CAAC;AAC5B,OAAO,EAAE,UAAU,EAAE,MAAM,IAAI,CAAC;AAEhC,OAAO,EAAE,WAAW,EAAE,MAAM,sBAAsB,CAAC;AAEnD,MAAM,UAAU,GAAG,0BAA0B,CAAC;AAE9C,MAAM,UAAU,qBAAqB,CAAC,IAAgB;IACpD,IAAI,IAAI,CAAC,WAAW,CAAC,MAAM,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC5C,OAAO,CAAC;YACN,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI,CAAC,YAAY;YAC3B,IAAI,EAAE,mBAAmB;YACzB,OAAO,EAAE,0CAA0C,IAAI,CAAC,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,EAAE;SACjF,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,IAAgB;IAC7C,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC;QAAE,OAAO,EAAE,CAAC;IAC1C,OAAO,CAAC;YACN,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI,CAAC,YAAY;YAC3B,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,gBAAgB,IAAI,CAAC,IAAI,gEAAgE;SACnG,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,oBAAoB,CAAC,IAAgB;IACnD,IAAI,IAAI,CAAC,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IAC3C,MAAM,YAAY,GAAG,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,IAAI,CAAC;IACjD,IAAI,YAAY,KAAK,QAAQ,IAAI,YAAY,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IACzE,OAAO,CAAC;YACN,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,YAAY,CAAC;YAC/C,IAAI,EAAE,0BAA0B;YAChC,OAAO,EAAE,qBAAqB,IAAI,CAAC,IAAI,qEAAqE,YAAY,KAAK,IAAI,CAAC,CAAC,CAAC,gCAAgC,CAAC,CAAC,CAAC,MAAM,YAAY,UAAU,EAAE;SACtM,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,eAAe,CAAC,IAAgB;IAC9C,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IACtC,IAAI,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,WAAW;QAAE,OAAO,EAAE,CAAC;IACnD,OAAO,CAAC;YACN,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,SAAS,CAAC;YAC5C,IAAI,EAAE,qBAAqB;YAC3B,OAAO,EAAE,0BAA0B,IAAI,CAAC,IAAI,0DAA0D,IAAI,CAAC,MAAM,EAAE,MAAM,KAAK,IAAI,CAAC,CAAC,CAAC,oBAAoB,CAAC,CAAC,CAAC,MAAM,IAAI,CAAC,MAAM,EAAE,MAAM,IAAI,MAAM,UAAU,EAAE;SAC5M,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,IAAgB;IAChD,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,IAAI,CAAC,uBAAuB;QAAE,OAAO,EAAE,CAAC;IAC5C,qEAAqE;IACrE,IAAI,IAAI,CAAC,KAAK,KAAK,CAAC;QAAE,OAAO,EAAE,CAAC;IAChC,OAAO,CAAC;YACN,IAAI,EAAE,OAAO;YACb,QAAQ,EAAE,IAAI,CAAC,YAAY;YAC3B,IAAI,EAAE,eAAe;YACrB,OAAO,EAAE,WAAW,IAAI,CAAC,IAAI,oEAAoE;SAClG,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,IAAgB;IAC/C,IAAI,IAAI,CAAC,MAAM,KAAK,IAAI;QAAE,OAAO,EAAE,CAAC;IACpC,IAAI,IAAI,CAAC,QAAQ,CAAC,MAAM,GAAG,CAAC;QAAE,OAAO,EAAE,CAAC;IACxC,6DAA6D;IAC7D,IAAI,IAAI,CAAC,MAAM,KAAK,MAAM;QAAE,OAAO,EAAE,CAAC;IACtC,OAAO,CAAC;YACN,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,IAAI,CAAC,YAAY;YAC3B,IAAI,EAAE,cAAc;YACpB,OAAO,EAAE,GAAG,IAAI,CAAC,MAAM,YAAY,IAAI,CAAC,IAAI,wBAAwB;SACrE,CAAC,CAAC;AACL,CAAC;AAED,MAAM,UAAU,uBAAuB,CAAC,IAAgB;IACtD,MAAM,sBAAsB,GAAG,IAAI,CAAC,IAAI,CAAC,YAAY,EAAE,eAAe,EAAE,WAAW,CAAC,CAAC;IACrF,IAAI,CAAC,UAAU,CAAC,sBAAsB,CAAC;QAAE,OAAO,EAAE,CAAC;IACnD,OAAO,CAAC;YACN,IAAI,EAAE,SAAS;YACf,QAAQ,EAAE,sBAAsB;YAChC,IAAI,EAAE,+BAA+B;YACrC,OAAO,EAAE,wFAAwF;gBAC/F,yFAAyF;gBACzF,
|
|
1
|
+
{"version":3,"file":"structure-rules.js","sourceRoot":"","sources":["../../src/validators/structure-rules.ts"],"names":[],"mappings":"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"}
|
package/docs/agents.md
CHANGED
|
@@ -52,12 +52,12 @@ After `taproot init --agent claude --with-skills`, skills are available as `/tr-
|
|
|
52
52
|
|
|
53
53
|
### How skills work
|
|
54
54
|
|
|
55
|
-
Skills are portable markdown files installed to
|
|
55
|
+
Skills are portable markdown files installed to `taproot/agent/skills/`. They are not IDE plugins or extensions — any agent that can read files can follow a skill. The Claude Code adapter generates `.claude/commands/tr-*.md` files that reference the skills; invoking `/tr-intent` tells Claude to load and follow `taproot/agent/skills/intent.md`.
|
|
56
56
|
|
|
57
57
|
This means:
|
|
58
58
|
- Skills work even if the Claude Code extension is updated or changed
|
|
59
59
|
- You can read any skill file to understand exactly what the agent will do
|
|
60
|
-
- You can customise a skill by editing its file in
|
|
60
|
+
- You can customise a skill by editing its file in `taproot/agent/skills/`
|
|
61
61
|
- Skills stay in sync with Taproot via `taproot update`
|
|
62
62
|
|
|
63
63
|
### Updating skills
|
package/docs/architecture.md
CHANGED
|
@@ -22,9 +22,9 @@ Architectural decisions, constraints, and patterns for the taproot codebase. Eve
|
|
|
22
22
|
|
|
23
23
|
**No global mutable state** — No module-level variables that accumulate state across calls. Functions that need shared state receive it as parameters.
|
|
24
24
|
|
|
25
|
-
|
|
25
|
+
**Unified `taproot/` directory layout** — All taproot content lives under `taproot/`: requirement documents in `taproot/specs/` (or directly under `taproot/` with a custom `root:` setting), agent skills and docs in `taproot/agent/`, and global truths in `taproot/global-truths/`. Settings live at `taproot/settings.yaml`. The `.taproot/` directory is reserved for gitignored runtime scratch only (session state, test result cache, truth-check sessions).
|
|
26
26
|
|
|
27
|
-
|
|
27
|
+
**`.taproot/` is runtime scratch, not content** — Files written by CLI invocations that should not be committed (session state, `.truth-check-session`, `.test-results/`) go in `.taproot/`. Add `.taproot/` to `.gitignore`. Never place spec documents, skill files, or configuration there.
|
|
28
28
|
|
|
29
29
|
**Markdown is the schema** — All hierarchy documents (intent.md, usecase.md, impl.md) must be valid CommonMark. No proprietary extensions.
|
|
30
30
|
|
|
@@ -50,4 +50,4 @@ Core modules must not import from commands. Commands may import from core, valid
|
|
|
50
50
|
|
|
51
51
|
## Testing
|
|
52
52
|
|
|
53
|
-
Integration tests use real temporary directories (`mkdtempSync`) — no mocking the filesystem. Config in tests must be written to
|
|
53
|
+
Integration tests use real temporary directories (`mkdtempSync`) — no mocking the filesystem. Config in tests must be written to `taproot/settings.yaml` (matching the layout that `taproot init` now creates).
|
package/docs/cli.md
CHANGED
|
@@ -12,7 +12,7 @@ The Taproot CLI handles setup, validation, and reporting. It does not generate c
|
|
|
12
12
|
taproot init [--with-hooks] [--with-ci github|gitlab] [--with-skills] [--agent claude|cursor|copilot|windsurf|generic|all] [--template webapp|book-authoring|cli-tool] [--force]
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
Initializes Taproot in the current directory. Creates `taproot/` and
|
|
15
|
+
Initializes Taproot in the current directory. Creates `taproot/` with `specs/`, `global-truths/`, and `agent/` subdirectories; writes `taproot/settings.yaml`. Then installs whichever integrations you request.
|
|
16
16
|
|
|
17
17
|
When run on an empty project (no `taproot/` directory yet), the command prompts: **"Start from a template? [y/N]"** — entering `y` presents a list of starter hierarchies to choose from.
|
|
18
18
|
|
|
@@ -21,10 +21,10 @@ When run on an empty project (no `taproot/` directory yet), the command prompts:
|
|
|
21
21
|
| `--with-hooks` | Installs `.git/hooks/pre-commit` running `taproot commithook` |
|
|
22
22
|
| `--with-ci github` | Generates `.github/workflows/taproot.yml` with validate-structure, validate-format, and check-orphans |
|
|
23
23
|
| `--with-ci gitlab` | Generates a `taproot-validate` job in `.gitlab-ci.yml` |
|
|
24
|
-
| `--with-skills` | Copies skill definitions to
|
|
24
|
+
| `--with-skills` | Copies skill definitions to `taproot/agent/skills/`. Implied by `--agent claude` — only needed if you want skills without a Claude adapter. |
|
|
25
25
|
| `--agent <name>` | Generates agent adapter files (see [Agent Setup](agents.md)) |
|
|
26
|
-
| `--template <type>` | Skip the prompt and apply a starter template directly (`webapp`, `book-authoring`, or `cli-tool`). Copies the starter's `taproot/` hierarchy and
|
|
27
|
-
| `--force` | When used with `--template`, overwrites an existing
|
|
26
|
+
| `--template <type>` | Skip the prompt and apply a starter template directly (`webapp`, `book-authoring`, or `cli-tool`). Copies the starter's `taproot/` hierarchy and `taproot/settings.yaml` into the project. |
|
|
27
|
+
| `--force` | When used with `--template`, overwrites an existing `taproot/settings.yaml` with the template's version. |
|
|
28
28
|
|
|
29
29
|
Running `taproot init` again on an existing project is safe — it skips files that already exist and reports `exists` for each.
|
|
30
30
|
|
|
@@ -38,7 +38,7 @@ Refreshes installed agent adapters and skills to the current version. Run this a
|
|
|
38
38
|
|
|
39
39
|
The update command also:
|
|
40
40
|
- Removes stale artefacts from older Taproot layouts (e.g., the pre-v0.1 `taproot/skills/` directory)
|
|
41
|
-
- Refreshes
|
|
41
|
+
- Refreshes `taproot/agent/docs/` with the current taproot documentation (patterns, architecture, security, etc.) so agent skills have up-to-date reference material
|
|
42
42
|
- Runs a cross-link refresh: adds missing `## Behaviours <!-- taproot-managed -->` sections to `intent.md` files and `## Implementations <!-- taproot-managed -->` sections to `usecase.md` files, then appends any missing child links and prunes any links to non-existent files
|
|
43
43
|
- Migrates old `taproot validate-structure` / `taproot validate-format` pre-commit hooks to the newer `taproot commithook` format
|
|
44
44
|
|
|
@@ -174,7 +174,7 @@ taproot dod [impl-path] [--dry-run] [--rerun-tests]
|
|
|
174
174
|
taproot dod <impl-path> --resolve <condition> --note "<text>" [--resolve <condition> --note "<text>" ...]
|
|
175
175
|
```
|
|
176
176
|
|
|
177
|
-
Runs all configured DoD conditions from
|
|
177
|
+
Runs all configured DoD conditions from `taproot/settings.yaml` against the specified implementation (or all implementations if no path is given). If all conditions pass and an `impl-path` is provided, marks the impl `complete`, records the results in `## DoD Resolutions`, and automatically advances the parent `usecase.md` state from `specified` to `implemented` if it hasn't been already.
|
|
178
178
|
|
|
179
179
|
Use `--resolve`/`--note` to record agent resolutions for agent-driven conditions (e.g. `document-current`, `check-if-affected`, `check-if-affected-by`). Multiple pairs can be supplied in a single invocation — conditions are paired with notes by position.
|
|
180
180
|
|
|
@@ -204,7 +204,7 @@ The hook uses a three-tier classification, where the implementation tier is dete
|
|
|
204
204
|
| Source files found in map but `impl.md` NOT staged | **Blocked** — "Stage `impl.md` alongside your source files. No implementation commit should proceed without its traceability record." |
|
|
205
205
|
| No tracked source files, no hierarchy or impl files | No checks; commit proceeds |
|
|
206
206
|
|
|
207
|
-
The DoR gate prevents committing an implementation record before the behaviour is fully specified. The DoD gate prevents marking an implementation complete without passing the quality checks defined in
|
|
207
|
+
The DoR gate prevents committing an implementation record before the behaviour is fully specified. The DoD gate prevents marking an implementation complete without passing the quality checks defined in `taproot/settings.yaml`.
|
|
208
208
|
|
|
209
209
|
**Truth consistency check:** when hierarchy files are staged and `taproot/global-truths/` exists, the hook validates that a truth-check session marker (`.taproot/.truth-check-session`) is present and matches the current staged content. This marker is written by `taproot truth-sign`, which `/tr-commit` calls after the agent approves the truth check. Committing hierarchy files directly with `git commit` (bypassing `/tr-commit`) will be blocked if applicable truths exist.
|
|
210
210
|
|
package/docs/configuration.md
CHANGED
|
@@ -2,11 +2,11 @@
|
|
|
2
2
|
|
|
3
3
|
## Quick discovery
|
|
4
4
|
|
|
5
|
-
- **In your project:**
|
|
6
|
-
- **From the CLI:** `taproot --help` includes a footer pointing to
|
|
5
|
+
- **In your project:** `taproot/agent/CONFIGURATION.md` — installed and refreshed by `taproot update`, documents all `settings.yaml` options with examples and whether each requires re-running `taproot update`
|
|
6
|
+
- **From the CLI:** `taproot --help` includes a footer pointing to `taproot/settings.yaml` and `taproot/agent/CONFIGURATION.md`
|
|
7
7
|
- **Full reference:** this document
|
|
8
8
|
|
|
9
|
-
##
|
|
9
|
+
## `taproot/settings.yaml`
|
|
10
10
|
|
|
11
11
|
Created by `taproot init`. All settings have defaults — you only need to add what you want to override.
|
|
12
12
|
|
|
@@ -70,7 +70,7 @@ The `definitionOfDone` list controls what `taproot dod` checks and what the pre-
|
|
|
70
70
|
| `document-current: <description>` | Agent-verified: the agent checks whether the described documentation is current and applies updates if needed. |
|
|
71
71
|
| `check-if-affected: <file>` | Agent-verified: the agent reviews whether the given file needed updating as a result of this implementation and applies changes if needed. |
|
|
72
72
|
| `check-if-affected-by: <behaviour-path>` | Agent-verified: the agent reads the referenced behaviour spec and determines whether it applies to this implementation — verifying compliance if it does, recording "not applicable" if it does not. Use for cross-cutting requirements that every implementation of a given type must satisfy (e.g. every new skill must satisfy `human-integration/contextual-next-steps`). |
|
|
73
|
-
| `check: <free-form question>` | Agent-verified: the agent reads the question, reasons whether the answer is yes, no, or not applicable for this specific implementation, and takes any indicated action (e.g. adds an entry to
|
|
73
|
+
| `check: <free-form question>` | Agent-verified: the agent reads the question, reasons whether the answer is yes, no, or not applicable for this specific implementation, and takes any indicated action (e.g. adds an entry to `taproot/settings.yaml`, documents a new pattern). The two default entries in `taproot/settings.yaml` cover the most common meta-questions. |
|
|
74
74
|
| `run: <command>` | Custom shell command. Exit 0 = pass, any other exit code = fail. |
|
|
75
75
|
|
|
76
76
|
You can give any condition a custom name with `name: <label>`, which is used in DoD reports:
|
|
@@ -92,7 +92,7 @@ Results are recorded in the `## DoD Resolutions` section of `impl.md`. The secti
|
|
|
92
92
|
|
|
93
93
|
### Built-in cross-cutting DoD conditions
|
|
94
94
|
|
|
95
|
-
Taproot's own
|
|
95
|
+
Taproot's own `taproot/settings.yaml` ships with several `check-if-affected-by` conditions that enforce project-wide quality rules. These serve as reference examples:
|
|
96
96
|
|
|
97
97
|
| Condition | What it enforces |
|
|
98
98
|
|-----------|-----------------|
|
|
@@ -121,7 +121,7 @@ autonomous: true # all sessions in this repo run without confirmation prompts
|
|
|
121
121
|
- Test failures or hook rejections are recorded in `impl.md` (impl marked `needs-rework`) and the agent stops — the developer returns to a clear failure report
|
|
122
122
|
|
|
123
123
|
**Three activation mechanisms (in order of scope):**
|
|
124
|
-
1. `autonomous: true` in
|
|
124
|
+
1. `autonomous: true` in `taproot/settings.yaml` — repo-wide, all sessions
|
|
125
125
|
2. `TAPROOT_AUTONOMOUS=1` environment variable — per process invocation
|
|
126
126
|
3. `--autonomous` flag on a skill invocation (e.g. `/tr-implement path/ --autonomous`) — per skill
|
|
127
127
|
|
package/docs/patterns.md
CHANGED
|
@@ -8,10 +8,10 @@ Reusable patterns for extending and enforcing the taproot hierarchy. Each patter
|
|
|
8
8
|
|
|
9
9
|
**Problem:** You have an architectural rule that should apply to every implementation — not just a one-time concern, but a standing requirement. Examples: every skill must include a session hygiene signal; every skill that produces output must present a **What's next?** block; every implementation must satisfy a security review checklist. Writing this rule in a README or CLAUDE.md makes it aspirational. You want it enforced automatically, at commit time, for every new implementation.
|
|
10
10
|
|
|
11
|
-
**Pattern:** Define the rule as a behaviour spec (`usecase.md`), then add a `check-if-affected-by` entry to
|
|
11
|
+
**Pattern:** Define the rule as a behaviour spec (`usecase.md`), then add a `check-if-affected-by` entry to `taproot/settings.yaml`.
|
|
12
12
|
|
|
13
13
|
```yaml
|
|
14
|
-
#
|
|
14
|
+
# taproot/settings.yaml
|
|
15
15
|
definitionOfDone:
|
|
16
16
|
- check-if-affected-by: skill-architecture/context-engineering
|
|
17
17
|
```
|
|
@@ -37,7 +37,7 @@ When the DoD runner encounters this condition, it instructs the agent to:
|
|
|
37
37
|
**How to add a new cross-cutting constraint:**
|
|
38
38
|
|
|
39
39
|
1. Write the spec — `/tr-behaviour taproot/<your-intent>/ "<rule>"` — define what compliance looks like, what non-compliance looks like, and how to resolve it
|
|
40
|
-
2. Add to
|
|
40
|
+
2. Add to `taproot/settings.yaml`:
|
|
41
41
|
```yaml
|
|
42
42
|
definitionOfDone:
|
|
43
43
|
- check-if-affected-by: <intent-slug>/<behaviour-slug>
|
|
@@ -95,11 +95,11 @@ The agent is asked: "Does this implementation require changes to `<file>`?" If y
|
|
|
95
95
|
|
|
96
96
|
**Problem:** You have a one-off question the agent should reason about at DoD (or DoR) time — something too project-specific to warrant a full behaviour spec, but important enough to enforce at every commit. Examples: "should this story be split?", "does this change affect the public API contract?", "is there a simpler approach we haven't considered?".
|
|
97
97
|
|
|
98
|
-
**Pattern:** Add a `check:` entry to `definitionOfDone` (or `definitionOfReady`) in
|
|
98
|
+
**Pattern:** Add a `check:` entry to `definitionOfDone` (or `definitionOfReady`) in `taproot/settings.yaml`.
|
|
99
99
|
|
|
100
100
|
```yaml
|
|
101
101
|
definitionOfDone:
|
|
102
|
-
- check: "does this story introduce a cross-cutting concern that warrants a new check-if-affected-by or check-if-affected entry in
|
|
102
|
+
- check: "does this story introduce a cross-cutting concern that warrants a new check-if-affected-by or check-if-affected entry in taproot/settings.yaml?"
|
|
103
103
|
- check: "does this story reveal a reusable pattern worth documenting in docs/patterns.md?"
|
|
104
104
|
```
|
|
105
105
|
|
|
@@ -114,7 +114,7 @@ The agent reads the question text, reasons whether the answer is yes, no, or not
|
|
|
114
114
|
|
|
115
115
|
| Question | Action if yes |
|
|
116
116
|
|---|---|
|
|
117
|
-
| `does this story introduce a cross-cutting concern that warrants a new check-if-affected-by or check-if-affected entry in
|
|
117
|
+
| `does this story introduce a cross-cutting concern that warrants a new check-if-affected-by or check-if-affected entry in taproot/settings.yaml?` | Agent adds the entry to `taproot/settings.yaml` |
|
|
118
118
|
| `does this story reveal a reusable pattern worth documenting in docs/patterns.md?` | Agent adds a pattern entry to `docs/patterns.md` |
|
|
119
119
|
|
|
120
120
|
---
|
|
@@ -131,7 +131,7 @@ The agent reads the question text, reasons whether the answer is yes, no, or not
|
|
|
131
131
|
Before following any steps, check whether autonomous mode is active:
|
|
132
132
|
- `TAPROOT_AUTONOMOUS=1` is set in the environment, **or**
|
|
133
133
|
- `--autonomous` was passed as an argument to this skill invocation, **or**
|
|
134
|
-
-
|
|
134
|
+
- `taproot/settings.yaml` contains `autonomous: true`
|
|
135
135
|
|
|
136
136
|
If any of these is true, **autonomous mode is active** — apply the autonomous notes at each step where they appear. If none is true, autonomous mode is **inactive** — show confirmation prompts as normal.
|
|
137
137
|
```
|
package/docs/security.md
CHANGED
|
@@ -9,9 +9,9 @@ This document describes taproot's security model, applicable threat categories,
|
|
|
9
9
|
Taproot has two security boundaries that must be explicitly trusted:
|
|
10
10
|
|
|
11
11
|
**`settings.yaml` — Executable Configuration**
|
|
12
|
-
The `definitionOfDone` and `definitionOfReady` check entries are executed as shell commands via `spawnSync(..., { shell: true })` in `dod-runner.ts` / `dor-runner.ts`. This is an intentional design — equivalent to `package.json` scripts. The trust boundary is: whoever controls
|
|
12
|
+
The `definitionOfDone` and `definitionOfReady` check entries are executed as shell commands via `spawnSync(..., { shell: true })` in `dod-runner.ts` / `dor-runner.ts`. This is an intentional design — equivalent to `package.json` scripts. The trust boundary is: whoever controls `taproot/settings.yaml` controls what shell commands run during gate evaluation.
|
|
13
13
|
|
|
14
|
-
|
|
14
|
+
**`taproot/agent/skills/` — Agent Instructions**
|
|
15
15
|
Skill files (`.md`) are loaded and delivered as instructions to AI agents. Whoever controls skill content controls agent behaviour. A compromised skill file is a direct agent instruction injection vector.
|
|
16
16
|
|
|
17
17
|
Both boundaries are intentional; neither should be changed. Both must be consciously managed.
|
|
@@ -67,14 +67,14 @@ Recommended controls for taproot's own CI and for projects using taproot:
|
|
|
67
67
|
|
|
68
68
|
## Skill Security Guidelines
|
|
69
69
|
|
|
70
|
-
All skill files (
|
|
70
|
+
All skill files (`taproot/agent/skills/*.md`, `skills/*.md`) must follow these rules:
|
|
71
71
|
|
|
72
72
|
1. **No shell execution without validation** — do not instruct agents to run shell commands unless the input is validated or the command is fully static
|
|
73
73
|
2. **No hardcoded credentials or tokens** — skill files are committed to version control and distributed via npm; credentials in skills are a public disclosure
|
|
74
74
|
3. **Least-privilege for agent instructions** — request only the permissions and actions the skill genuinely needs; avoid open-ended "do whatever is needed" patterns
|
|
75
75
|
4. **No sensitive data in output** — do not instruct agents to echo or log content from `settings.yaml` commands (raw command strings, exit output)
|
|
76
76
|
|
|
77
|
-
Every change to a skill file triggers the DoD skill review condition (see
|
|
77
|
+
Every change to a skill file triggers the DoD skill review condition (see `taproot/settings.yaml`).
|
|
78
78
|
|
|
79
79
|
---
|
|
80
80
|
|
package/docs/workflows.md
CHANGED
|
@@ -144,7 +144,7 @@ After building up several specs, some domain terms and business rules will recur
|
|
|
144
144
|
/tr-discover-truths
|
|
145
145
|
```
|
|
146
146
|
|
|
147
|
-
The skill scans all `intent.md` and `usecase.md` files, identifies recurring terms, business rules, and conventions not yet defined in `taproot/global-truths/`, and presents them as candidates. For each candidate you choose: **promote** (routes to `/tr-ineed` → define-truth), **backlog** (saves to
|
|
147
|
+
The skill scans all `intent.md` and `usecase.md` files, identifies recurring terms, business rules, and conventions not yet defined in `taproot/global-truths/`, and presents them as candidates. For each candidate you choose: **promote** (routes to `/tr-ineed` → define-truth), **backlog** (saves to `taproot/agent/backlog.md` for later), **skip** (reappears next run), or **dismiss** (permanently suppressed).
|
|
148
148
|
|
|
149
149
|
Truth discovery also runs as a final pass inside `/tr-review-all`, appending a `## Truth Candidates` section to the review report.
|
|
150
150
|
|
package/package.json
CHANGED
package/skills/backlog.md
CHANGED
|
@@ -14,14 +14,14 @@ Capture ideas, findings, and deferred work mid-session with a single command —
|
|
|
14
14
|
|
|
15
15
|
1. Detect that an argument was provided.
|
|
16
16
|
2. If the argument is blank or whitespace only: warn *"Nothing to capture — provide a description."* and stop.
|
|
17
|
-
3. Create
|
|
17
|
+
3. Create `taproot/agent/backlog.md` if absent. Append the item:
|
|
18
18
|
`- [YYYY-MM-DD] <idea>` using today's date.
|
|
19
19
|
4. Confirm in one line: *"✓ Captured: <idea>"*
|
|
20
20
|
No follow-up response required from the developer — the session continues.
|
|
21
21
|
|
|
22
22
|
### Triage mode (no argument)
|
|
23
23
|
|
|
24
|
-
1. Read
|
|
24
|
+
1. Read `taproot/agent/backlog.md`.
|
|
25
25
|
- If absent or contains no standard items: report *"Backlog is empty. Use `/tr-backlog <idea>` to capture something."* and stop.
|
|
26
26
|
|
|
27
27
|
2. Present all standard items as a numbered list (FIFO order, oldest first):
|
|
@@ -36,8 +36,8 @@ Capture ideas, findings, and deferred work mid-session with a single command —
|
|
|
36
36
|
3. Offer: `D <n>` discard · `P <n>` promote to /tr-ineed · `A <n>` analyze · `done` finish
|
|
37
37
|
|
|
38
38
|
4. Accept commands one at a time:
|
|
39
|
-
- **`D <n>`** — remove item n from
|
|
40
|
-
- **`P <n>` promote to /tr-ineed** — remove item n from
|
|
39
|
+
- **`D <n>`** — remove item n from `taproot/agent/backlog.md`. Confirm: *"✓ Discarded #n"*. Redisplay the updated numbered list.
|
|
40
|
+
- **`P <n>` promote to /tr-ineed** — remove item n from `taproot/agent/backlog.md`. Invoke `/tr-ineed` with the item text. On return, redisplay the updated numbered list.
|
|
41
41
|
- **`A <n>` analyze** — produce a structured analysis of the item:
|
|
42
42
|
- A short description of what the item is or could be (2–4 sentences)
|
|
43
43
|
- A complexity signal: **simple** / **moderate** / **significant**
|
|
@@ -46,7 +46,7 @@ Capture ideas, findings, and deferred work mid-session with a single command —
|
|
|
46
46
|
- **`done`** — end triage. Items not acted on are kept implicitly.
|
|
47
47
|
|
|
48
48
|
5. After `done`: *"Triage complete — X discarded, Y promoted, Z kept."*
|
|
49
|
-
If any non-standard lines were skipped: *"Skipped N non-standard line(s) — they remain in
|
|
49
|
+
If any non-standard lines were skipped: *"Skipped N non-standard line(s) — they remain in `taproot/agent/backlog.md`."*
|
|
50
50
|
|
|
51
51
|
If the developer exits without `done`: unprocessed items remain unchanged. If any actions were taken, show the summary; otherwise continue naturally.
|
|
52
52
|
|
|
@@ -60,7 +60,7 @@ Capture ideas, findings, and deferred work mid-session with a single command —
|
|
|
60
60
|
|
|
61
61
|
## Output
|
|
62
62
|
|
|
63
|
-
**Capture:** item written to
|
|
63
|
+
**Capture:** item written to `taproot/agent/backlog.md`, one-line confirmation.
|
|
64
64
|
**Triage:** backlog updated in place; promoted items handed to `/tr-ineed`; completion summary shown.
|
|
65
65
|
|
|
66
66
|
## CLI Dependencies
|
|
@@ -73,4 +73,4 @@ None.
|
|
|
73
73
|
- Item format: `- [YYYY-MM-DD] <text>`. Items are presented FIFO (oldest first) during triage.
|
|
74
74
|
- Items promoted via `[P]` are removed from the backlog before `/tr-ineed` is invoked. If the developer abandons the `/tr-ineed` discovery, re-capture the item with `/tr-backlog <idea>`.
|
|
75
75
|
- This is a scratchpad, not a project management tool — no priority, labels, or status tracking.
|
|
76
|
-
- Storage is
|
|
76
|
+
- Storage is `taproot/agent/backlog.md` — a committed markdown file inside the taproot config directory, versioned with the project.
|
package/skills/behaviour.md
CHANGED
|
@@ -15,14 +15,14 @@ Define a UseCase (observable system behaviour) under an intent or another behavi
|
|
|
15
15
|
- If `parent` contains `intent.md`: read the intent to understand the goal and success criteria.
|
|
16
16
|
- If `parent` contains `usecase.md`: read the parent behaviour — this new behaviour is a sub-behaviour.
|
|
17
17
|
|
|
18
|
-
1a. **Pattern check** — If
|
|
18
|
+
1a. **Pattern check** — If `taproot/agent/docs/patterns.md` exists, scan the behaviour description for semantic matches. Match signals:
|
|
19
19
|
- "apply to all / every implementation / every skill" → `check-if-affected-by`
|
|
20
20
|
- "enforce a rule / architectural constraint / agents should follow" → `check-if-affected-by`
|
|
21
21
|
- "keep docs current / enforce documentation quality" → `document-current`
|
|
22
22
|
- "every new feature must update X" → `check-if-affected: X`
|
|
23
23
|
|
|
24
24
|
If a match is found, **interrupt before asking clarifying questions**:
|
|
25
|
-
> "Before I write this spec — that sounds like the **`<pattern-name>`** pattern. <one-line description>. See
|
|
25
|
+
> "Before I write this spec — that sounds like the **`<pattern-name>`** pattern. <one-line description>. See `taproot/agent/docs/patterns.md`."
|
|
26
26
|
> **[A] Use this pattern now** — I'll guide you through applying it instead of writing a spec
|
|
27
27
|
> **[B] Continue writing the spec** — the spec is distinct from the pattern
|
|
28
28
|
|
package/skills/bug.md
CHANGED
|
@@ -35,10 +35,10 @@ Diagnose a defect through structured root cause analysis (5-Why) and delegate to
|
|
|
35
35
|
|
|
36
36
|
- **No (clearly one-off** — typo, isolated misconfiguration, external incident): note this and continue to step 5.
|
|
37
37
|
- **Yes**: propose prevention across one or more of:
|
|
38
|
-
- A new DoR or DoD condition to add to
|
|
38
|
+
- A new DoR or DoD condition to add to `taproot/settings.yaml`
|
|
39
39
|
- An update to `docs/architecture.md`, `docs/security.md`, or `docs/patterns.md`
|
|
40
40
|
|
|
41
|
-
If a satisfactory measure is found: present it — e.g. *"I'll add `check-if-affected-by: <gate>` to
|
|
41
|
+
If a satisfactory measure is found: present it — e.g. *"I'll add `check-if-affected-by: <gate>` to `taproot/settings.yaml`"* or *"I'll add to `docs/security.md`: `<constraint>`"* — and wait for actor confirmation.
|
|
42
42
|
- On **confirm**: apply the change, then continue to step 5.
|
|
43
43
|
- On **reject**: record the recurrence concern in the implicated impl.md `## Notes` and continue to step 5.
|
|
44
44
|
|
package/skills/commit.md
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
Before following any steps, check whether autonomous mode is active:
|
|
6
6
|
- `TAPROOT_AUTONOMOUS=1` is set in the environment, **or**
|
|
7
7
|
- `--autonomous` was passed as an argument to this skill invocation, **or**
|
|
8
|
-
-
|
|
8
|
+
- `taproot/settings.yaml` contains `autonomous: true`
|
|
9
9
|
|
|
10
10
|
If any of these is true, **autonomous mode is active** — apply autonomous notes where they appear. If none is true, show confirmation prompts as normal.
|
|
11
11
|
|
|
@@ -35,7 +35,7 @@ Execute the full commit procedure: classify the commit type, run the appropriate
|
|
|
35
35
|
|
|
36
36
|
**Autonomous mode:** stage all relevant files and proceed directly without waiting for confirmation.
|
|
37
37
|
|
|
38
|
-
4. Read
|
|
38
|
+
4. Read `taproot/settings.yaml` to identify all configured `definitionOfDone` and `definitionOfReady` conditions. If the file does not exist or has no `definitionOfDone`/`definitionOfReady` sections, note: "No user-configured conditions — baseline hook checks only." and proceed to the appropriate sub-flow below.
|
|
39
39
|
|
|
40
40
|
5. Execute the sub-flow matching the commit type:
|
|
41
41
|
|
|
@@ -78,7 +78,7 @@ Execute the full commit procedure: classify the commit type, run the appropriate
|
|
|
78
78
|
|
|
79
79
|
1. Verify parent `usecase.md` is in `specified`, `implemented`, or `complete` state. If it is in `draft` or `proposed` state, report: "Cannot declare implementation — parent `usecase.md` is in `<state>` state. Run `/tr-refine <usecase-path>` to complete the spec first." Stop.
|
|
80
80
|
|
|
81
|
-
2. Read
|
|
81
|
+
2. Read `taproot/settings.yaml` `definitionOfReady` entries. For each `check-if-affected-by` or `check:` condition, write an entry directly into `## DoR Resolutions` in the impl.md. There is no `taproot dor` CLI — write entries by hand:
|
|
82
82
|
```
|
|
83
83
|
condition: <name> | note: <reasoning> | resolved: <date>
|
|
84
84
|
```
|
|
@@ -13,9 +13,9 @@ Scan the taproot hierarchy for implicit facts — recurring terms, business rule
|
|
|
13
13
|
Before following any steps, check whether autonomous mode is active:
|
|
14
14
|
- `TAPROOT_AUTONOMOUS=1` is set in the environment, **or**
|
|
15
15
|
- `--autonomous` was passed as an argument to this skill invocation, **or**
|
|
16
|
-
-
|
|
16
|
+
- `taproot/settings.yaml` contains `autonomous: true`
|
|
17
17
|
|
|
18
|
-
If any of these is true, **autonomous mode is active** — skip interactive prompts and defer all candidates to
|
|
18
|
+
If any of these is true, **autonomous mode is active** — skip interactive prompts and defer all candidates to `taproot/agent/backlog.md` as "truth candidate: `<term>`" entries, then report the summary.
|
|
19
19
|
|
|
20
20
|
## Steps
|
|
21
21
|
|
|
@@ -31,7 +31,7 @@ If any of these is true, **autonomous mode is active** — skip interactive prom
|
|
|
31
31
|
|
|
32
32
|
3. Read all files in `taproot/global-truths/` (excluding `intent.md` and subdirectory `usecase.md` files — truth files are files that are NOT named `intent.md` or `usecase.md`). Collect defined terms and rules from them.
|
|
33
33
|
|
|
34
|
-
4. Read
|
|
34
|
+
4. Read `taproot/agent/backlog.md` if it exists. Extract all lines matching `reviewed — not a truth: <term>` — these are permanently dismissed candidates. Build a suppression list from them.
|
|
35
35
|
|
|
36
36
|
### Phase 3 — Identify Candidates
|
|
37
37
|
|
|
@@ -89,11 +89,11 @@ If any of these is true, **autonomous mode is active** — skip interactive prom
|
|
|
89
89
|
- No record written; candidate reappears on next discovery run
|
|
90
90
|
|
|
91
91
|
**Backlog [B]:**
|
|
92
|
-
- Append to
|
|
92
|
+
- Append to `taproot/agent/backlog.md`: `- [YYYY-MM-DD] truth candidate: <term>`
|
|
93
93
|
- Move to next candidate
|
|
94
94
|
|
|
95
95
|
**Dismiss [D]:**
|
|
96
|
-
- Append to
|
|
96
|
+
- Append to `taproot/agent/backlog.md`: `- [YYYY-MM-DD] reviewed — not a truth: <term>`
|
|
97
97
|
- This entry suppresses the candidate on all future discovery runs
|
|
98
98
|
- Move to next candidate
|
|
99
99
|
|
|
@@ -113,7 +113,7 @@ If any of these is true, **autonomous mode is active** — skip interactive prom
|
|
|
113
113
|
## Output
|
|
114
114
|
|
|
115
115
|
- Zero or more truth files created in `taproot/global-truths/` (via `/tr-ineed` → define-truth)
|
|
116
|
-
-
|
|
116
|
+
- `taproot/agent/backlog.md` updated with any backlogged or dismissed candidates
|
|
117
117
|
- Summary report: N promoted, N skipped, N backlogged, N dismissed
|
|
118
118
|
|
|
119
119
|
## CLI Dependencies
|
|
@@ -125,5 +125,5 @@ None.
|
|
|
125
125
|
- Truth files in `taproot/global-truths/` are any files that are NOT named `intent.md` or `usecase.md`. They may have any name (e.g. `glossary.md`, `pricing-rules.md`, `entity-model.md`).
|
|
126
126
|
- "Recurring" means 2 or more specs — not just repeated within a single spec.
|
|
127
127
|
- Skip generic language-level words ("the", "a", "is", "not") and taproot structural terms ("intent", "behaviour", "usecase", "implementation") — these are not domain truths.
|
|
128
|
-
- Dismissed entries in
|
|
128
|
+
- Dismissed entries in `taproot/agent/backlog.md` are matched by the literal string "reviewed — not a truth: `<term>`" — the suppression logic is substring-match on the candidate term.
|
|
129
129
|
- This skill is read-only on the hierarchy — it never modifies `intent.md` or `usecase.md` files directly.
|
package/skills/guide.md
CHANGED
|
@@ -107,7 +107,7 @@ ineed → intent → behaviour → implement → trace → status
|
|
|
107
107
|
**What's next?**
|
|
108
108
|
[A] `/tr-ineed` — capture your first (or next) requirement
|
|
109
109
|
[B] `/tr-status` — see the current project health at a glance
|
|
110
|
-
[C] `/tr-backlog` — triage captured ideas (only if
|
|
110
|
+
[C] `/tr-backlog` — triage captured ideas (only if `taproot/agent/backlog.md` is non-empty)
|
|
111
111
|
|
|
112
112
|
## Output
|
|
113
113
|
|
package/skills/implement.md
CHANGED
|
@@ -14,7 +14,7 @@ Implement a behaviour spec: write the code, write the tests, create the `impl.md
|
|
|
14
14
|
Before following any steps, check whether autonomous mode is active:
|
|
15
15
|
- `TAPROOT_AUTONOMOUS=1` is set in the environment, **or**
|
|
16
16
|
- `--autonomous` was passed as an argument to this skill invocation, **or**
|
|
17
|
-
-
|
|
17
|
+
- `taproot/settings.yaml` contains `autonomous: true`
|
|
18
18
|
|
|
19
19
|
If any of these is true, **autonomous mode is active** — apply the autonomous notes at each step where they appear. If none is true, autonomous mode is **inactive** — show confirmation prompts as normal.
|
|
20
20
|
|
|
@@ -36,14 +36,14 @@ If any of these is true, **autonomous mode is active** — apply the autonomous
|
|
|
36
36
|
- Read each applicable file; apply defined terms and conventions when choosing the implementation approach, naming, and design decisions
|
|
37
37
|
- If the implementation plan contradicts an applicable truth, surface the conflict before proceeding: "This implementation contradicts `global-truths/<file>`: `<excerpt>`. [A] update plan to align, [B] update the truth, [C] proceed with the conflict noted."
|
|
38
38
|
|
|
39
|
-
4. **Pattern check + plan mode.** Before proposing the plan: if
|
|
39
|
+
4. **Pattern check + plan mode.** Before proposing the plan: if `taproot/agent/docs/patterns.md` exists, scan the behaviour description and any design notes for semantic matches. Match signals:
|
|
40
40
|
- "applies to all implementations / cross-cutting concern" → `check-if-affected-by`
|
|
41
41
|
- "enforce a rule on all future work" → `check-if-affected-by`
|
|
42
42
|
- "keep a file in sync / update X on every change" → `check-if-affected: X`
|
|
43
43
|
|
|
44
44
|
If a match is found, surface it before the plan:
|
|
45
|
-
> "Before the plan — this looks like it could use the **`<pattern-name>`** pattern rather than a custom implementation. See
|
|
46
|
-
> **[A] Use the pattern** — apply it via
|
|
45
|
+
> "Before the plan — this looks like it could use the **`<pattern-name>`** pattern rather than a custom implementation. See `taproot/agent/docs/patterns.md`."
|
|
46
|
+
> **[A] Use the pattern** — apply it via `taproot/settings.yaml` instead of writing source code
|
|
47
47
|
> **[B] Continue with implementation** — the custom implementation is intentional
|
|
48
48
|
|
|
49
49
|
Then **propose the implementation plan:**
|
|
@@ -102,7 +102,7 @@ If any of these is true, **autonomous mode is active** — apply the autonomous
|
|
|
102
102
|
6. **Declaration commit** — commit `impl.md`, `discussion.md` (if written), and any `usecase.md` link-section update together (no source files):
|
|
103
103
|
|
|
104
104
|
Before committing:
|
|
105
|
-
- Read
|
|
105
|
+
- Read `taproot/settings.yaml` and note the `definitionOfReady` conditions — these are the checks the hook will run. If the file has no `definitionOfReady` section, only baseline DoR checks run.
|
|
106
106
|
- There is no standalone `taproot dor` command — DoR runs automatically via the pre-commit hook when impl.md is staged without source files (this is a **declaration commit**). Resolve any agent-driven DoR conditions (e.g. `check-if-affected-by`) in impl.md under `## DoR Resolutions` before staging.
|
|
107
107
|
|
|
108
108
|
```
|
package/skills/ineed.md
CHANGED
|
@@ -27,7 +27,7 @@ Route a natural language requirement to the right place in the taproot hierarchy
|
|
|
27
27
|
- **[B]**: proceed to pattern check below.
|
|
28
28
|
- **[C]** or no global truth signal: proceed to pattern check below.
|
|
29
29
|
|
|
30
|
-
0a. **Pattern check** — If
|
|
30
|
+
0a. **Pattern check** — If `taproot/agent/docs/patterns.md` exists, scan the stated requirement for semantic matches against the patterns listed there. Match signals:
|
|
31
31
|
- "apply to all / every implementation / every skill / everywhere" → `check-if-affected-by`
|
|
32
32
|
- "guide agents / architecture rules / agents should follow / enforce a rule" → `check-if-affected-by`
|
|
33
33
|
- "enforce documentation / docs must stay current / keep docs accurate" → `document-current`
|
|
@@ -35,14 +35,14 @@ Route a natural language requirement to the right place in the taproot hierarchy
|
|
|
35
35
|
- "research before building / check if a library exists / look up how to implement" → research-first (`/tr-research`)
|
|
36
36
|
|
|
37
37
|
If a match is found, **interrupt before proceeding**:
|
|
38
|
-
> "Before I route this — that sounds like the **`<pattern-name>`** pattern. <one-line description>. See
|
|
38
|
+
> "Before I route this — that sounds like the **`<pattern-name>`** pattern. <one-line description>. See `taproot/agent/docs/patterns.md` for how to use it."
|
|
39
39
|
> **[A] Use this pattern now** — I'll guide you through applying it
|
|
40
40
|
> **[B] Continue as a new requirement** — route and spec it normally
|
|
41
41
|
|
|
42
|
-
- **[A]**: read the relevant section of
|
|
42
|
+
- **[A]**: read the relevant section of `taproot/agent/docs/patterns.md` and guide the user through applying the pattern directly. Do not create a new hierarchy entry.
|
|
43
43
|
- **[B]** or no match: proceed to step 1.
|
|
44
44
|
|
|
45
|
-
If multiple patterns match, list all before asking. If
|
|
45
|
+
If multiple patterns match, list all before asking. If `taproot/agent/docs/patterns.md` is absent, skip silently.
|
|
46
46
|
|
|
47
47
|
1. **Classify the requirement** — Load `taproot/OVERVIEW.md` if it exists; if not, walk `taproot/` and read each `intent.md`. Use this hierarchy map to decide which path to take:
|
|
48
48
|
|
package/skills/refine.md
CHANGED
|
@@ -11,14 +11,14 @@ Update a behaviour spec (`usecase.md`) based on what was learned during or after
|
|
|
11
11
|
|
|
12
12
|
## Steps
|
|
13
13
|
|
|
14
|
-
0. **Pattern check** — If
|
|
14
|
+
0. **Pattern check** — If `taproot/agent/docs/patterns.md` exists, scan the `finding` input for semantic matches. Match signals:
|
|
15
15
|
- "applies to all / every implementation should" → `check-if-affected-by`
|
|
16
16
|
- "enforce a rule / architectural constraint" → `check-if-affected-by`
|
|
17
17
|
- "docs should stay current / keep X updated" → `document-current` or `check-if-affected: X`
|
|
18
18
|
|
|
19
19
|
If a match is found, **interrupt before reading the spec**:
|
|
20
|
-
> "Before I refine this — that finding sounds like the **`<pattern-name>`** pattern. <one-line description>. See
|
|
21
|
-
> **[A] Apply the pattern** — configure it in
|
|
20
|
+
> "Before I refine this — that finding sounds like the **`<pattern-name>`** pattern. <one-line description>. See `taproot/agent/docs/patterns.md`."
|
|
21
|
+
> **[A] Apply the pattern** — configure it in `taproot/settings.yaml` instead of editing the spec
|
|
22
22
|
> **[B] Continue refining** — the spec change is the right approach
|
|
23
23
|
|
|
24
24
|
- **[A]**: guide through applying the pattern. Do not modify `usecase.md`.
|
package/skills/review-all.md
CHANGED
|
@@ -68,7 +68,7 @@ Run a comprehensive review of an entire subtree — an intent and all its descen
|
|
|
68
68
|
|
|
69
69
|
8. **Truth discovery pass** — if `taproot/global-truths/` exists and the hierarchy has 3 or more readable `intent.md`/`usecase.md` files (excluding `global-truths/`):
|
|
70
70
|
|
|
71
|
-
Run the same scan as `/tr-discover-truths` (Phase 2–3 of that skill): collect candidates not already defined in `global-truths/` and not suppressed by
|
|
71
|
+
Run the same scan as `/tr-discover-truths` (Phase 2–3 of that skill): collect candidates not already defined in `global-truths/` and not suppressed by `taproot/agent/backlog.md` dismissed entries.
|
|
72
72
|
|
|
73
73
|
If candidates are found, append to the report:
|
|
74
74
|
|
|
@@ -86,7 +86,7 @@ Run a comprehensive review of an entire subtree — an intent and all its descen
|
|
|
86
86
|
|
|
87
87
|
**If [P]:** invoke `/tr-discover-truths` inline; return here when it completes.
|
|
88
88
|
|
|
89
|
-
**If [D]:** append each candidate to
|
|
89
|
+
**If [D]:** append each candidate to `taproot/agent/backlog.md` as `- [YYYY-MM-DD] truth candidate: <term>`.
|
|
90
90
|
|
|
91
91
|
If no candidates found (hierarchy consistent with existing truths), append to report:
|
|
92
92
|
```
|
package/skills/status.md
CHANGED
|
@@ -78,13 +78,13 @@ Generated: <date>
|
|
|
78
78
|
[B] `/tr-refine taproot/<intent>/<behaviour>/` — add missing tests
|
|
79
79
|
[C] `/tr-plan` — pick a different next item
|
|
80
80
|
|
|
81
|
-
- **If no specific items were found** (healthy project): check whether
|
|
81
|
+
- **If no specific items were found** (healthy project): check whether `taproot/agent/backlog.md` exists and contains items. Show the generic fallback menu:
|
|
82
82
|
|
|
83
83
|
**What's next?**
|
|
84
84
|
[A] `/tr-plan` — pick the next behaviour to implement
|
|
85
85
|
[B] `/tr-ineed` — route a new requirement into the hierarchy
|
|
86
86
|
[C] `/tr-review-all` — deeper semantic review of specs
|
|
87
|
-
[D] `/tr-backlog` — triage captured ideas (only if
|
|
87
|
+
[D] `/tr-backlog` — triage captured ideas (only if `taproot/agent/backlog.md` is non-empty)
|
|
88
88
|
|
|
89
89
|
## Output
|
|
90
90
|
|