simt-dev 0.7.0 → 0.8.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/CHANGELOG.md +191 -870
- package/README.md +188 -213
- package/bin/simt.mjs +19 -55
- package/docs/decisions/ADR-014-workspace-is-configuration.md +2 -2
- package/docs/decisions/ADR-025-a-baseline-is-a-region-in-a-file-the-repo-owns.md +1 -1
- package/docs/decisions/ADR-026-a-config-without-a-region-is-a-file-the-repo-owns.md +1 -1
- package/docs/decisions/ADR-027-the-one-gitattributes-line-that-is-neither-dangerous-nor-empty.md +1 -1
- package/docs/decisions/ADR-028-a-base-file-is-a-floor-so-the-disagreement-it-cannot-repair-becomes-a-check.md +1 -1
- package/docs/decisions/ADR-029-the-pins-a-repository-declares-are-its-own.md +1 -1
- package/docs/decisions/ADR-030-what-a-plan-does-not-ship-is-a-decision-with-a-record.md +1 -1
- package/docs/decisions/ADR-048-a-baseline-carries-only-keys-a-reader-honours.md +1 -1
- package/docs/decisions/ADR-082-the-tracker-override-is-a-manifest-key.md +1 -1
- package/docs/decisions/ADR-099-the-release-verifies-served-bytes-and-the-formula-mirrors-them.md +1 -1
- package/docs/decisions/ADR-117-the-darwin-release-builds-on-supported-macos-15-runners-and-a-re-run-is-idempotent.md +81 -0
- package/docs/decisions/ADR-118-the-bench-corpus-is-keyed-on-history-is-append-only-and-is-portable-as-a-sealed-document.md +91 -0
- package/docs/decisions/ADR-119-the-environment-variable-points-into-a-workspace-the-repo-declared.md +90 -0
- package/docs/decisions/ADR-120-a-pre-push-whose-tree-is-already-proven-green-skips-the-test-gate-on-that-evidence.md +96 -0
- package/docs/decisions/ADR-122-the-shims-move-into-the-state-directory-and-the-legacy-directory-removes-itself.md +94 -0
- package/docs/decisions/ADR-123-a-surplus-positional-is-not-refused-because-arity-is-not-in-the-source.md +57 -0
- package/docs/decisions/ADR-124-the-manifest-has-a-schema-in-the-tool-and-its-unknown-keys-stay-the-repositorys.md +64 -0
- package/docs/decisions/ADR-125-a-shared-context-belongs-to-a-read-and-a-writer-reads-directly.md +65 -0
- package/docs/decisions/ADR-126-the-mcp-surface-stays-a-reader-so-there-is-no-write-path-to-build.md +68 -0
- package/docs/decisions/ADR-127-the-mcp-tool-list-is-written-by-hand-and-roots-is-not-asked-for.md +65 -0
- package/docs/decisions/ADR-128-a-research-plan-is-a-plan-and-the-tracker-reads-it.md +42 -0
- package/ecosystems/bun.json +6 -0
- package/ecosystems/cargo.json +25 -0
- package/ecosystems/composer.json +6 -0
- package/ecosystems/dart.json +24 -0
- package/ecosystems/deno.json +21 -0
- package/ecosystems/devcontainers.json +6 -0
- package/ecosystems/docker-compose.json +6 -0
- package/ecosystems/docker.json +6 -0
- package/ecosystems/dotnet.json +25 -0
- package/ecosystems/elixir.json +23 -0
- package/ecosystems/gitsubmodule.json +6 -0
- package/ecosystems/go.json +25 -0
- package/ecosystems/gradle.json +13 -0
- package/ecosystems/maven.json +23 -0
- package/ecosystems/node.json +25 -0
- package/ecosystems/python.json +20 -0
- package/ecosystems/ruby.json +23 -0
- package/ecosystems/swift.json +25 -0
- package/ecosystems/terraform.json +6 -0
- package/ecosystems/uv.json +6 -0
- package/harnesses/antigravity.json +162 -0
- package/harnesses/claude.json +206 -0
- package/harnesses/codex.json +136 -0
- package/harnesses/copilot.json +88 -0
- package/harnesses/cursor.json +140 -0
- package/harnesses/deepseek.json +99 -0
- package/harnesses/gemini.json +122 -0
- package/harnesses/opencode.json +173 -0
- package/package.json +12 -2
- package/rules/core.md +7 -0
- package/rules/mdc/intake-questions.mdc +8 -0
- package/rules/mdc/slice-commit.mdc +57 -4
- package/src/advice/advice.mjs +3 -2
- package/src/agenthooks/prompt.mjs +5 -2
- package/src/agenthooks/render.mjs +86 -180
- package/src/agenthooks/shim.mjs +1 -1
- package/src/agents/render.mjs +15 -18
- package/src/api.mjs +31 -0
- package/src/argv.mjs +48 -3
- package/src/bench/ablate.mjs +3 -4
- package/src/bench/adapters.json +163 -105
- package/src/bench/adapters.mjs +466 -0
- package/src/bench/arms.mjs +333 -0
- package/src/bench/grade.mjs +33 -73
- package/src/bench/graders.mjs +42 -0
- package/src/bench/mine.mjs +121 -475
- package/src/bench/probe-ledger.mjs +149 -0
- package/src/bench/probes.catalog.mjs +918 -0
- package/src/bench/probes.mjs +79 -1064
- package/src/bench/render.mjs +111 -0
- package/src/bench/report.mjs +120 -962
- package/src/bench/run.mjs +185 -802
- package/src/bench/variants.mjs +4 -5
- package/src/bench/workspace.mjs +160 -0
- package/src/brief/assemble.mjs +48 -15
- package/src/ci/dependabot.mjs +25 -55
- package/src/ci/workflow.mjs +30 -7
- package/src/cli.mjs +45 -0
- package/src/commands/agent.mjs +4 -13
- package/src/commands/agenthook.mjs +70 -40
- package/src/commands/bench.mjs +191 -18
- package/src/commands/brief.mjs +5 -4
- package/src/commands/ci.mjs +13 -14
- package/src/commands/compare.mjs +42 -42
- package/src/commands/completions.mjs +2 -6
- package/src/commands/decide.mjs +4 -4
- package/src/commands/distill.mjs +4 -3
- package/src/commands/docs.mjs +88 -0
- package/src/commands/doctor.mjs +11 -7
- package/src/commands/evidence.mjs +6 -9
- package/src/commands/explain.mjs +0 -1
- package/src/commands/gate.mjs +26 -25
- package/src/commands/graph.mjs +2 -3
- package/src/commands/harness.mjs +6 -5
- package/src/commands/help.mjs +168 -19
- package/src/commands/hooks.mjs +119 -49
- package/src/commands/ignore.mjs +13 -8
- package/src/commands/impact.mjs +8 -15
- package/src/commands/index.mjs +318 -193
- package/src/commands/init-scan.mjs +90 -0
- package/src/commands/init.mjs +124 -105
- package/src/commands/lease.mjs +73 -25
- package/src/commands/lessons.mjs +10 -9
- package/src/commands/local.mjs +3 -3
- package/src/commands/map.mjs +24 -14
- package/src/commands/mcp.mjs +2 -18
- package/src/commands/pack.mjs +9 -6
- package/src/commands/plan.mjs +6 -5
- package/src/commands/plugin.mjs +2 -2
- package/src/commands/prbody.mjs +3 -3
- package/src/commands/repoindex.mjs +12 -11
- package/src/commands/review.mjs +2 -2
- package/src/commands/rules.mjs +37 -16
- package/src/commands/shared.mjs +14 -19
- package/src/commands/skills.mjs +33 -32
- package/src/commands/skillscompile.mjs +7 -8
- package/src/commands/skillsinstall.mjs +7 -6
- package/src/commands/slice.mjs +220 -74
- package/src/commands/spec.mjs +167 -0
- package/src/commands/status.mjs +27 -18
- package/src/commands/sync.mjs +27 -25
- package/src/commands/tests.mjs +18 -21
- package/src/commands/tokens.mjs +21 -26
- package/src/commands/undo.mjs +5 -15
- package/src/commands/upgrade.mjs +15 -7
- package/src/commands/why.mjs +15 -21
- package/src/compare/hooksstate.mjs +2 -6
- package/src/compare/learn.mjs +3 -1
- package/src/compare/row.mjs +0 -2
- package/src/context.mjs +64 -0
- package/src/decisions/index-doc.mjs +46 -0
- package/src/decisions/index.mjs +3 -2
- package/src/diff.mjs +1 -1
- package/src/distill/distill.mjs +14 -1
- package/src/distill/engine.mjs +5 -1
- package/src/docs/commands.mjs +65 -0
- package/src/ecosystem/records.mjs +219 -0
- package/src/explain.mjs +31 -0
- package/src/gates/index.mjs +385 -0
- package/src/graph/compile.mjs +8 -4
- package/src/graph/load.mjs +6 -2
- package/src/graph/spec.mjs +10 -8
- package/src/harness/records.mjs +143 -0
- package/src/hooks/capability.mjs +7 -5
- package/src/hooks/dispatcher.mjs +209 -60
- package/src/hooks/gates.mjs +10 -43
- package/src/hooks/resolve.mjs +4 -14
- package/src/hooks/shim.mjs +5 -2
- package/src/hooks/where.mjs +2 -7
- package/src/identity.mjs +31 -12
- package/src/index/coverage.mjs +58 -0
- package/src/index/extract.mjs +6 -16
- package/src/index/gate.mjs +1 -1
- package/src/index/govern.mjs +26 -9
- package/src/index/impact.mjs +4 -8
- package/src/index/map.mjs +14 -15
- package/src/index/open.mjs +173 -0
- package/src/index/persist.mjs +224 -57
- package/src/index/store.mjs +82 -39
- package/src/index/tests.mjs +2 -6
- package/src/journal.mjs +94 -20
- package/src/kernel/card.mjs +37 -63
- package/src/kernel/checks.mjs +4 -10
- package/src/lease.mjs +102 -7
- package/src/ledger/index.mjs +150 -14
- package/src/local/client.mjs +4 -6
- package/src/locate.mjs +33 -9
- package/src/manifest/schema.mjs +213 -0
- package/src/mcp/paginate.mjs +33 -0
- package/src/mcp/resources.mjs +7 -10
- package/src/mcp/schemas.mjs +512 -0
- package/src/mcp/server.mjs +119 -25
- package/src/mcp/tools-facts.mjs +326 -0
- package/src/mcp/tools-read.mjs +221 -0
- package/src/mcp/tools.mjs +4 -967
- package/src/measure/corpus.mjs +150 -0
- package/src/measure/metrics.mjs +236 -0
- package/src/measure/records.mjs +211 -0
- package/src/measure/session.mjs +3 -2
- package/src/measure/stats.mjs +538 -0
- package/src/measure/task-schema.mjs +125 -0
- package/src/measure/tasks.mjs +69 -0
- package/src/memory/decide.mjs +6 -15
- package/src/memory/lesson-text.mjs +61 -0
- package/src/memory/lessons.mjs +29 -82
- package/src/name.mjs +7 -0
- package/src/node-version.mjs +37 -0
- package/src/output/index.mjs +209 -10
- package/src/packs/manage.mjs +32 -12
- package/src/packs.mjs +20 -2
- package/src/plan/index.mjs +1 -1
- package/src/plugins.mjs +22 -16
- package/src/prbody.mjs +7 -11
- package/src/projection/loaders.mjs +7 -692
- package/src/projection/lock.mjs +11 -1
- package/src/projection/manifest.mjs +29 -468
- package/src/projection/mdc.mjs +7 -8
- package/src/projection/project.mjs +126 -221
- package/src/projection/region.mjs +561 -0
- package/src/projection/rules.mjs +20 -550
- package/src/projection/surfaces.mjs +43 -210
- package/src/projection/targets.mjs +5 -5
- package/src/repo-root.mjs +31 -0
- package/src/resolve/eval.mjs +2 -1
- package/src/resolve/fingerprint.mjs +19 -22
- package/src/resolve/resolve.mjs +1 -41
- package/src/review/critic.mjs +10 -13
- package/src/run.mjs +98 -0
- package/src/secrets.mjs +14 -22
- package/src/state/events.mjs +129 -0
- package/src/status-snapshot.mjs +233 -0
- package/src/status.mjs +2 -6
- package/src/sys/git.mjs +82 -0
- package/src/sys/proc.mjs +151 -0
- package/src/testing/parsers.mjs +265 -0
- package/src/testing/patches.mjs +23 -0
- package/src/testing/paths.mjs +49 -0
- package/src/testing/runners.mjs +186 -0
- package/src/testing/vault.mjs +68 -0
- package/src/text/frontmatter.mjs +49 -0
- package/src/text/tokens.mjs +52 -0
- package/src/toolwords.mjs +3 -0
- package/src/util/fs.mjs +20 -0
- package/src/util/sort.mjs +12 -0
- package/src/workspace.mjs +58 -11
- package/src/write/plan.mjs +82 -0
- package/templates/plan/tracker.json +1 -0
- package/docs/decisions/ADR-033-three-plan-rows-closed-by-decision-not-by-authoring.md +0 -82
- package/docs/decisions/ADR-102-the-two-queued-review-rows-are-closed-by-ruling.md +0 -49
- package/docs/decisions/README.md +0 -600
- package/src/bench/tasks.mjs +0 -36
package/README.md
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
# simt-dev
|
|
2
2
|
|
|
3
|
-

|
|
4
|
+
|
|
5
|
+
[](https://github.com/QuazarMedia/simt-dev/actions/workflows/simt-dev-check.yml)
|
|
4
6
|
|
|
5
7
|
`simt` adopts a repository for the agents that work in it, and builds an intelligence
|
|
6
8
|
amplifier around them: a brief that answers before the agent explores, gates that
|
|
@@ -72,97 +74,193 @@ beside its `.sha256`. Pin the release you download,
|
|
|
72
74
|
and run this from the repository's top level:
|
|
73
75
|
|
|
74
76
|
```sh
|
|
75
|
-
|
|
77
|
+
version=<version>; os=$(uname -s | tr A-Z a-z); arch=$(uname -m | sed "s/x86_64/x64/")
|
|
78
|
+
base="https://github.com/QuazarMedia/simt-dev/releases/download/v$version"
|
|
79
|
+
asset="simt-dev-$version-$os-$arch"; tmp=$(mktemp -d)
|
|
80
|
+
curl -fsSL "$base/$asset" -o "$tmp/$asset"
|
|
81
|
+
curl -fsSL "$base/$asset.sha256" -o "$tmp/$asset.sha256"
|
|
82
|
+
(cd "$tmp" && shasum -a 256 -c "$asset.sha256")
|
|
83
|
+
mkdir -p .simt/bin && mv "$tmp/$asset" .simt/bin/simt && chmod +x .simt/bin/simt
|
|
76
84
|
```
|
|
77
85
|
|
|
78
86
|
The locator checks `.simt/bin/simt` before `PATH`, so the repository's own copy is the
|
|
79
87
|
one its hooks and its CI run — this is the same command the hook shim prints as its
|
|
80
|
-
remedy.
|
|
81
|
-
published `.sha256` before
|
|
88
|
+
remedy. Both the snippet above and the generated CI workflow verify the asset against the
|
|
89
|
+
published `.sha256` before it runs: a digest that does not match stops the copy, so a
|
|
90
|
+
truncated or substituted download never becomes the command.
|
|
82
91
|
|
|
83
92
|
## What `simt` does
|
|
84
93
|
|
|
94
|
+
<!-- simt:commands:begin -->
|
|
95
|
+
<!-- Rendered from the spec by `simt docs readme --yes`; do not edit by hand. -->
|
|
96
|
+
|
|
85
97
|
```sh
|
|
86
|
-
#
|
|
87
|
-
simt
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
simt
|
|
91
|
-
simt
|
|
92
|
-
|
|
93
|
-
#
|
|
94
|
-
simt
|
|
95
|
-
simt
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
simt
|
|
99
|
-
simt
|
|
100
|
-
simt
|
|
101
|
-
|
|
102
|
-
#
|
|
103
|
-
simt
|
|
104
|
-
simt
|
|
105
|
-
simt
|
|
106
|
-
simt
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
simt
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
simt
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
simt
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
simt
|
|
119
|
-
|
|
120
|
-
#
|
|
121
|
-
simt
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
simt
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
simt
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
#
|
|
133
|
-
simt
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
simt
|
|
137
|
-
simt
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
simt
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
simt
|
|
147
|
-
|
|
148
|
-
|
|
149
|
-
simt
|
|
150
|
-
simt
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
simt
|
|
154
|
-
simt
|
|
155
|
-
simt
|
|
156
|
-
|
|
157
|
-
|
|
158
|
-
simt
|
|
159
|
-
|
|
160
|
-
|
|
161
|
-
simt
|
|
162
|
-
|
|
163
|
-
|
|
164
|
-
|
|
98
|
+
# agent-hook
|
|
99
|
+
simt agent-hook <event> --harness # the harness entry point: decide one tool call, or deliver the prompt packet
|
|
100
|
+
|
|
101
|
+
# agent-hooks
|
|
102
|
+
simt agent-hooks install --yes # write this repository's policies into each harness hooks file
|
|
103
|
+
simt agent-hooks status # what each harness will run, and what is not trusted yet
|
|
104
|
+
|
|
105
|
+
# agents
|
|
106
|
+
simt agents install --yes # write the Simt-Agent into each harness agents file
|
|
107
|
+
simt agents status # what each harness carries, and what is not installed yet
|
|
108
|
+
|
|
109
|
+
# bench
|
|
110
|
+
simt bench ablate --yes # measure one arm of the brief against its ablation
|
|
111
|
+
simt bench critic # score the review critic against the labelled bench set
|
|
112
|
+
simt bench export --yes # write the sealed bench corpus as one signed document
|
|
113
|
+
simt bench import # verify a sealed corpus and load it into the vault
|
|
114
|
+
simt bench mine --yes # mine tasks out of a repository history
|
|
115
|
+
simt bench probes --yes # run the deterministic probes against a workspace
|
|
116
|
+
simt bench report [--compare a b] # summarise the runs recorded in the vault
|
|
117
|
+
simt bench run --yes # run agents against the mined tasks
|
|
118
|
+
simt bench variants --yes # run one task across its variant prompts
|
|
119
|
+
|
|
120
|
+
# brief
|
|
121
|
+
simt brief "<task>" # the packet for a task: rules, skills and the files it names, within a budget
|
|
122
|
+
|
|
123
|
+
# check
|
|
124
|
+
simt check # report stale or missing generated regions and every check finding
|
|
125
|
+
|
|
126
|
+
# ci
|
|
127
|
+
simt ci # refresh simt-dev's own .github workflow and Dependabot files
|
|
128
|
+
|
|
129
|
+
# compare
|
|
130
|
+
simt compare # the adoption and drift matrix across every sibling repository
|
|
131
|
+
|
|
132
|
+
# completions
|
|
133
|
+
simt completions <bash|zsh|fish> # print a bash, zsh or fish completion script generated from this spec
|
|
134
|
+
|
|
135
|
+
# decide
|
|
136
|
+
simt decide "<title>" --yes # scaffold a numbered decision record with its frontmatter
|
|
137
|
+
|
|
138
|
+
# distill
|
|
139
|
+
simt distill <skill|doc> # turn a repository into a skill or rule proposal
|
|
140
|
+
|
|
141
|
+
# docs
|
|
142
|
+
simt docs readme # render the README command list from the spec
|
|
143
|
+
|
|
144
|
+
# doctor
|
|
145
|
+
simt doctor [--fix] # report what is wrong with this installation
|
|
146
|
+
|
|
147
|
+
# evidence
|
|
148
|
+
simt evidence # the runs recorded against the tree on disk
|
|
149
|
+
simt evidence check <msg-file> # a commit message claiming a run this tree does not have
|
|
150
|
+
|
|
151
|
+
# explain
|
|
152
|
+
simt explain <CODE> # what one check finding code means, and how to fix it
|
|
153
|
+
|
|
154
|
+
# gate
|
|
155
|
+
simt gate --changed # the tests a change reaches, and only those
|
|
156
|
+
|
|
157
|
+
# graph
|
|
158
|
+
simt graph lint [--spec agentskills] # check the skill registry against the skills on disk
|
|
159
|
+
|
|
160
|
+
# harness
|
|
161
|
+
simt harness detect [--user] # which harness is installed, and what it carries
|
|
162
|
+
simt harness loaders [--table] # the instruction files each harness loads, and what they cost
|
|
163
|
+
|
|
164
|
+
# hooks
|
|
165
|
+
simt hooks install --yes # install the shared dispatcher and report what it would run
|
|
166
|
+
simt hooks run <event> # run one git event's gates now, as git would
|
|
167
|
+
simt hooks status # what each git event routes to, and whether it is wired
|
|
168
|
+
|
|
169
|
+
# ignore
|
|
170
|
+
simt ignore [--yes] [--diff] # render the one ignore list into every harness ignore file
|
|
171
|
+
|
|
172
|
+
# impact
|
|
173
|
+
simt impact <file|symbol> # who a change reaches: importers, their tests and the contract
|
|
174
|
+
|
|
175
|
+
# index
|
|
176
|
+
simt index [--embed] # rebuild the local file index from git blob hashes
|
|
177
|
+
|
|
178
|
+
# init
|
|
179
|
+
simt init [path] # adopt this repository: manifest, region, hooks, agents and agent-hooks
|
|
180
|
+
|
|
181
|
+
# lease
|
|
182
|
+
simt lease [<paths>] --session # claim files for one session, or list the claims
|
|
183
|
+
|
|
184
|
+
# lessons
|
|
185
|
+
simt lessons capture # scan the ledger and history for new lesson candidates
|
|
186
|
+
simt lessons list # deterministic lesson candidates and the promoted lessons
|
|
187
|
+
simt lessons review <id> --yes # promote one lesson candidate into docs/lessons
|
|
188
|
+
|
|
189
|
+
# local
|
|
190
|
+
simt local doctor [--allow-remote] # the local model endpoints, and whether they answer
|
|
191
|
+
|
|
192
|
+
# map
|
|
193
|
+
simt map --task "<task>" # the files a task is most likely to touch, within a byte budget
|
|
194
|
+
|
|
195
|
+
# mcp
|
|
196
|
+
simt mcp [--list] # serve the read-only MCP surface over stdio
|
|
197
|
+
|
|
198
|
+
# pack
|
|
199
|
+
simt pack lint [dir] [--require-measured] # lint a rule pack in the working directory
|
|
200
|
+
simt pack new <name> --source <spec> # scaffold a rule pack
|
|
201
|
+
simt pack publish [dir] --yes # publish a rule pack
|
|
202
|
+
|
|
203
|
+
# plan
|
|
204
|
+
simt plan done <id> [<sha>] --yes # mark one tracker row complete, with its SHA and its evidence
|
|
205
|
+
simt plan next [<id>] # one ready slice's section, or the one named
|
|
206
|
+
simt plan status # count the tracker rows
|
|
207
|
+
|
|
208
|
+
# plugin
|
|
209
|
+
simt plugin <claude|gemini|cursor|opencode> # generate a harness package from the same tables the hooks use
|
|
210
|
+
|
|
211
|
+
# pr-body
|
|
212
|
+
simt pr-body [--base <ref>] # the pull request body: evidence, decisions, gate state and residual risk
|
|
213
|
+
|
|
214
|
+
# review
|
|
215
|
+
simt review [--local] # review the staged diff against the estate rules
|
|
216
|
+
|
|
217
|
+
# rules
|
|
218
|
+
simt rules decisions # every known decision, and which layer each came from
|
|
219
|
+
simt rules list [--root <path>] # the rule catalogue, marked with what applies to this repository
|
|
220
|
+
simt rules show <id> # one rule body
|
|
221
|
+
simt rules why <id|ADR-NNN> [--all] # the decision that settled a rule, and whether it is still in force
|
|
222
|
+
|
|
223
|
+
# shared
|
|
224
|
+
simt shared install --yes # install the shared rules into a reader home directory
|
|
225
|
+
simt shared plan # what the shared install would write, and where
|
|
226
|
+
|
|
227
|
+
# skills
|
|
228
|
+
simt skills brief --task "<task>" # the packet for a task, read from the skill registry
|
|
229
|
+
simt skills compile [<name>] # compile a skill to the Agent Skills standard
|
|
230
|
+
simt skills eval [corpus] # score the skill registry against transcripts
|
|
231
|
+
simt skills find <query> # skills that match a query
|
|
232
|
+
simt skills index # rebuild the skill index
|
|
233
|
+
simt skills install <name> --yes # install skills into the workspace
|
|
234
|
+
simt skills show <name> # one skill packet
|
|
235
|
+
simt skills why <name> # which skill covers a task
|
|
236
|
+
|
|
237
|
+
# slice
|
|
238
|
+
simt slice abandon <id> # remove a slice worktree, delete its branch, and return the row
|
|
239
|
+
simt slice finish <id> --yes # run the gates, commit the slice and record its evidence
|
|
240
|
+
simt slice start <id> --yes | -- "<text>" # give a slice its worktree, branch and brief; -- starts one from a prompt, no row
|
|
241
|
+
|
|
242
|
+
# status
|
|
243
|
+
simt status [--line] # the repository snapshot, or one line of the last check
|
|
244
|
+
|
|
245
|
+
# sync
|
|
246
|
+
simt sync [--explain] --yes # re-render the generated regions from the rule content
|
|
247
|
+
|
|
248
|
+
# tests
|
|
249
|
+
simt tests <path> [--cochange] # the tests that exercise a file
|
|
250
|
+
|
|
251
|
+
# tokens
|
|
252
|
+
simt tokens [--repos] [--session] # count tokens per instruction file and per skill
|
|
253
|
+
|
|
254
|
+
# undo
|
|
255
|
+
simt undo --yes # restore the last journaled set of writes, if untouched
|
|
256
|
+
|
|
257
|
+
# upgrade
|
|
258
|
+
simt upgrade --yes # replace this installation with the pinned release
|
|
259
|
+
|
|
260
|
+
# why
|
|
261
|
+
simt why [path] # what governs a file: decisions, rules, skills, gates and lessons
|
|
165
262
|
```
|
|
263
|
+
<!-- simt:commands:end -->
|
|
166
264
|
|
|
167
265
|
`init`, `sync`, `upgrade`, `hooks install`, `agent-hooks install`, `shared install`,
|
|
168
266
|
`skills install`, `plan done`, `lessons review`, `decide`, `ignore`, `pack new`,
|
|
@@ -185,134 +283,11 @@ line warns past 400 lines and fails past 1000. `simt evidence check` warns when
|
|
|
185
283
|
message claims a passing run this tree does not have, and the commit fails when
|
|
186
284
|
`gates.evidence` is `block`. Every finding `check` can emit is explained by `simt explain <CODE>` (DRIFT, UNMANAGED, PACK-DIGEST-MISMATCH, ...).
|
|
187
285
|
|
|
188
|
-
## Agent playbook
|
|
189
|
-
|
|
190
|
-
|
|
191
|
-
|
|
192
|
-
|
|
193
|
-
through `simt mcp`.
|
|
194
|
-
|
|
195
|
-
### Decision tree: which command to run when
|
|
196
|
-
|
|
197
|
-
| Situation | First command | If you need more |
|
|
198
|
-
| --- | --- | --- |
|
|
199
|
-
| New task, no context yet | `simt brief "<task>"` | `simt map --task "<task>"` for broader file ranking |
|
|
200
|
-
| About to edit a file | `simt why <file>` | `simt impact <file>` for blast radius |
|
|
201
|
-
| Need to know what tests to run | `simt tests <file>` | `simt gate --changed` to run them |
|
|
202
|
-
| Rule violation or error | `simt lessons list` | `simt rules why <rule-id>` for the decision |
|
|
203
|
-
| Working from a plan | `simt plan next` | `simt plan done <id> <sha> --yes` when finished |
|
|
204
|
-
| Before committing | `simt check` | `simt evidence` to verify test claims |
|
|
205
|
-
| Opening a pull request | `simt pr-body` | `--base <ref>` to diff against another fork point |
|
|
206
|
-
| Repository adoption | `simt init --yes` | `simt doctor` to verify stack detection |
|
|
207
|
-
| Multi-repo workspace | `simt compare` | `simt shared plan` to find deduplication opportunities |
|
|
208
|
-
| Local model available | `simt local doctor` | `simt index --embed` to build vector embeddings |
|
|
209
|
-
|
|
210
|
-
### 1. Start of task — orient in one call instead of broad exploration
|
|
211
|
-
|
|
212
|
-
1. **Assemble the task packet first.** Run `simt brief "<task>"` (or call MCP `brief`, or
|
|
213
|
-
read the packet injected automatically when `agent-hooks install --yes` wired
|
|
214
|
-
`prompt-submit`). Within `--budget 2048` bytes (pass `--budget 0` for unlimited or
|
|
215
|
-
`--explain` to see why items were kept or cut), the packet gives:
|
|
216
|
-
- `TASK`: the classified task kind (`bugfix`, `feature`, `refactor`, `test`, `docs`,
|
|
217
|
-
`config`) and the evidence behind it.
|
|
218
|
-
- `COMMANDS`: the exact `build`, `test`, `lint`, `format`, `typecheck`, and focused
|
|
219
|
-
test templates for this repository.
|
|
220
|
-
- `LIKELY FILES`: top files ranked by reciprocal-rank fusion (`RRF_K = 40`) across
|
|
221
|
-
SQLite FTS5 `bm25()`, PageRank graph proximity, and resolver signals.
|
|
222
|
-
- `TESTS`: the test files mapped to those likely files.
|
|
223
|
-
- `DECISIONS`, `SKILLS`, `LESSONS`, `CAUTIONS`, and `FEDERATION`: governing ADRs,
|
|
224
|
-
matched skills, promoted lessons for those paths, active worktree/hook cautions, and
|
|
225
|
-
any structural answer from a declared external code-graph server.
|
|
226
|
-
2. **Pull the next tracker slice when working from a plan.** Instead of reading a multi-thousand-line
|
|
227
|
-
plan in `docs/plans/` or `docs/reviews/`, run `simt plan next` (or MCP `plan_next`) to
|
|
228
|
-
load only the next queued slice (~1 KB) whose dependencies are already `Complete` or
|
|
229
|
-
`Accepted`.
|
|
230
|
-
|
|
231
|
-
**When to use `--json` format.** When piping output to other tools or when the agent needs
|
|
232
|
-
structured data, add `--json` to any read-only command. For example, `simt brief "<task>" --json`
|
|
233
|
-
returns a JSON object with `task`, `commands`, `files`, `tests`, `decisions`, `skills`,
|
|
234
|
-
`lessons`, `cautions`, and `federation` fields that can be programmatically consumed.
|
|
235
|
-
|
|
236
|
-
### 2. Before editing — query the graph, blast radius, and governance
|
|
237
|
-
|
|
238
|
-
1. **Rank files or symbols at the right granularity.** When `brief`'s file list is too
|
|
239
|
-
narrow or the task evolves, run `simt map --task "<task>" --level outline` for paths,
|
|
240
|
-
`--level names` for exported symbols, or `--level signatures` for declaration lines.
|
|
241
|
-
Pass `--embed` when `local.embed` is configured in `simt.json` and clears the +10-point
|
|
242
|
-
recall@10 bar.
|
|
243
|
-
2. **Check blast radius before changing a shared file or export.** Run
|
|
244
|
-
`simt impact <file|symbol>` to see every direct and transitive importer, the tests
|
|
245
|
-
covering them, the governing rules and ADRs, and any sibling repository in the
|
|
246
|
-
workspace that imports that symbol.
|
|
247
|
-
3. **Read the governance on a path before changing its behaviour.** Run `simt why <path>`
|
|
248
|
-
to list every ADR whose `simt-affects` matches the file, every scoped rule, skill,
|
|
249
|
-
gate, and promoted lesson. Run `simt why` with no path to audit the repository for
|
|
250
|
-
`UNRESOLVED-AFFECTS` tokens.
|
|
251
|
-
4. **Resolve deferred rules and citations on demand.** When `simt.json` sets
|
|
252
|
-
`"mode": "kernel"`, only `hard` and `command` rules are loaded at session start;
|
|
253
|
-
`convention` and `style` rules are listed by ID at the foot of the projection. Fetch a
|
|
254
|
-
deferred rule with `simt rules show <id>`, and read any cited `ADR-NNN` with
|
|
255
|
-
`simt rules why ADR-NNN` (or MCP `rules_why`) to see its rulings and whether any ruling
|
|
256
|
-
was superseded or narrowed.
|
|
257
|
-
5. **Load skills progressively (Tier 0 → Tier 1 → Tier 2).** Never read every skill file
|
|
258
|
-
upfront:
|
|
259
|
-
- Tier 0: `simt skills index` (or MCP `skills_index`) lists one line per skill.
|
|
260
|
-
- Tier 1: `simt skills brief --task "<task>"` (or MCP `skills_brief`) ranks compatible
|
|
261
|
-
skills within budget (`--plan` emits a fetch plan without bodies).
|
|
262
|
-
- Tier 2: `simt skills show <name> --max-bytes 8192` (or MCP `skills_show`) loads only
|
|
263
|
-
the chosen skill's body.
|
|
264
|
-
|
|
265
|
-
**Optimal retrieval strategy.** For best performance, use this sequence:
|
|
266
|
-
1. `simt brief "<task>"` — gets the most relevant files and tests in one call
|
|
267
|
-
2. If more files are needed, `simt map --task "<task>" --level outline` — broader ranking
|
|
268
|
-
3. If you need to understand a specific file's impact, `simt impact <file>` — blast radius
|
|
269
|
-
4. If you need to understand governance, `simt why <file>` — ADRs and rules
|
|
270
|
-
|
|
271
|
-
### 3. During implementation — validate incrementally under dual gates
|
|
272
|
-
|
|
273
|
-
1. **Keep the local index current.** After adding, renaming, or changing exports/imports,
|
|
274
|
-
run `simt index`. It hashes tracked blobs via `git ls-files --stage` and re-extracts
|
|
275
|
-
only changed files in under 300 ms.
|
|
276
|
-
2. **Run only the tests your change reaches.** Use `simt tests <path>` to inspect which
|
|
277
|
-
tests cover a file (via import edges, naming conventions, or coverage records; add
|
|
278
|
-
`--cochange` to include historical co-change pairs). Run `simt gate --changed` (or
|
|
279
|
-
`simt gate <path...>`) to execute only the tests reachable from the diff, with gate
|
|
280
|
-
output compacted so every failure line survives while passing noise is trimmed.
|
|
281
|
-
3. **Respect agent-time hooks and learn from failures.** With `simt agent-hooks install --yes`,
|
|
282
|
-
`pre-tool-use` blocks unapproved `git push`, history rewrites (`--no-verify`,
|
|
283
|
-
`--amend`, `reset --hard`, `rebase`), and direct edits to generated regions before the
|
|
284
|
-
tool executes. When a test or gate fails, `post-tool-use` hashes the normalised first
|
|
285
|
-
error line against `docs/lessons/*.md` and injects the matching lesson into context.
|
|
286
|
-
|
|
287
|
-
**Incremental validation workflow.** After each meaningful code change:
|
|
288
|
-
1. Run `simt tests <changed-file>` to see which tests cover your changes
|
|
289
|
-
2. Run `simt gate --changed` to execute only the affected tests
|
|
290
|
-
3. If a test fails, check `simt lessons list` for known issues and their remedies
|
|
291
|
-
4. If the failure is new, fix it and consider promoting the lesson with `simt lessons review <id> --yes`
|
|
292
|
-
|
|
293
|
-
### 4. Before committing and closing a slice — verify drift, evidence, and memory
|
|
294
|
-
|
|
295
|
-
1. **Run the repository gate.** Run `simt check` (or MCP `check`). Fix any reported
|
|
296
|
-
`DRIFT` with `simt sync --yes`, and resolve any rule checker or manifest findings.
|
|
297
|
-
2. **Verify execution evidence matches the current tree.** Run `simt evidence` to confirm
|
|
298
|
-
that the tests and gates you plan to cite were recorded against the current
|
|
299
|
-
`git write-tree` digest in `.simt/ledger.jsonl`. Any file edit invalidates earlier
|
|
300
|
-
evidence.
|
|
301
|
-
3. **Record decisions, lessons, and tracker state:**
|
|
302
|
-
- If the change alters what the repository or tool believes, scaffold an ADR with
|
|
303
|
-
`simt decide "<title>" [--supersedes ADR-NNN[:<ruling>]] --yes`.
|
|
304
|
-
- If a failing gate or test was fixed during the session, inspect captured candidates
|
|
305
|
-
with `simt lessons list` and promote reusable ones with
|
|
306
|
-
`simt lessons review <id> --yes`.
|
|
307
|
-
- After committing locally (never push without explicit approval per `ADR-001`), close
|
|
308
|
-
the tracker slice with `simt plan done <id> <sha> --test "<cmd>" --yes`.
|
|
309
|
-
|
|
310
|
-
**Pre-commit checklist.** Before committing, run this sequence:
|
|
311
|
-
1. `simt check` — verify no drift and all rules pass
|
|
312
|
-
2. `simt evidence` — confirm test runs are recorded against current tree
|
|
313
|
-
3. `simt lessons list` — check for any unreviewed lesson candidates
|
|
314
|
-
4. `git commit` — commit locally (never push without explicit approval)
|
|
315
|
-
5. `simt plan done <id> <sha> --yes` — close the tracker slice if working from a plan
|
|
286
|
+
## Agent playbook
|
|
287
|
+
|
|
288
|
+
The full agent playbook — the decision tree for which command to run when, and the
|
|
289
|
+
workflow for orienting, editing, implementing and closing a slice — lives in
|
|
290
|
+
[PLAYBOOK.md](PLAYBOOK.md).
|
|
316
291
|
|
|
317
292
|
## Optimal setup for every project, repository, and workspace shape
|
|
318
293
|
|
|
@@ -353,7 +328,7 @@ on top of `0.6.0`:
|
|
|
353
328
|
for parallel agents, and `simt pr-body` assembled from the evidence ledger.
|
|
354
329
|
|
|
355
330
|
The last two rows of review `0002` (`S38` workspace token cost, `S39` estate policy
|
|
356
|
-
as a pack) are closed by ruling
|
|
331
|
+
as a pack) are closed by ruling: the instrument, the declaration and the
|
|
357
332
|
non-blocking finding shipped, the blocking gate and the registry-carrying pack were
|
|
358
333
|
refused by ruling, and the estate-side move is recorded as whose commit it waits on.
|
|
359
334
|
Everything in plans `0001`–`0003` and reviews `0001`–`0002` is Complete or Accepted.
|
|
@@ -372,7 +347,7 @@ history. All remain off until named and propose rather than write projected text
|
|
|
372
347
|
| `simt.lock.json` | the digest of the inputs, the digest of the projection, and locked `variants` winners from `simt bench variants`. The old `simt-dev.lock.json` is still read, and a lock migrates on its next write |
|
|
373
348
|
| `.cursor/rules/*.mdc`, `.claude/rules/*.md`, `.agents/rules/*.md`, `.github/instructions/*.instructions.md` | one file per rule, and only for a harness that reads that directory |
|
|
374
349
|
| `.editorconfig`, `.gitattributes` | baseline regions, placed first so a later setting still wins |
|
|
375
|
-
| `.simt
|
|
350
|
+
| `.simt/hooks/` and `core.hooksPath` | the shared dispatcher. It fails closed |
|
|
376
351
|
| `docs/decisions/ADR-NNN-<slug>.md` | numbered decision records scaffolded by `simt decide --yes` with `simt-affects` and `simt-supersedes` frontmatter |
|
|
377
352
|
| `docs/lessons/NNNN-<slug>.md` | reviewed lessons promoted by `simt lessons review <id> --yes` with `simt-trigger`, `simt-evidence`, and `simt-expires` frontmatter |
|
|
378
353
|
|
package/bin/simt.mjs
CHANGED
|
@@ -1,60 +1,24 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
|
-
//
|
|
2
|
+
// The entry point, and the one place the runtime floor is enforced.
|
|
3
3
|
//
|
|
4
|
-
//
|
|
5
|
-
// the
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
if (!parsed.ok) {
|
|
14
|
-
// The flags do not exist yet, so the JSON mode is read off the raw words:
|
|
15
|
-
// a parse failure under `--json` is a JSON document on stdout, not text on
|
|
16
|
-
// stderr with an empty stdout (Q11, ADR-070 ruling 4).
|
|
17
|
-
jsonFailMode(rawJsonFlag(argv));
|
|
18
|
-
process.exit(fail(parsed.error.message, parsed.error.code));
|
|
19
|
-
}
|
|
20
|
-
const { flags, positional } = parsed.value;
|
|
21
|
-
|
|
22
|
-
// Set before anything can fail: `no command given` under `--json` is a JSON
|
|
23
|
-
// document too, and a failure that prints as text with an empty stdout breaks
|
|
24
|
-
// the same ruling the parse failure above honours (Q11, ADR-070 ruling 4).
|
|
25
|
-
jsonIndentDefault(flags.pretty === true);
|
|
26
|
-
jsonFailMode(flags.json === true);
|
|
27
|
-
|
|
28
|
-
// No arguments at all is a usage error, not a silent help dump: an agent that
|
|
29
|
-
// ran the wrong thing should be told so rather than handed 40 lines of prose.
|
|
30
|
-
if (positional.length === 0 && !flags.help && !flags.version) {
|
|
31
|
-
process.exit(fail('no command given', EXIT.USAGE));
|
|
32
|
-
}
|
|
4
|
+
// `package.json` declares `engines.node >= 22.20.0`, and npm only warns: an older
|
|
5
|
+
// runtime used to reach the CLI and fail somewhere inside the module graph — a syntax
|
|
6
|
+
// error or a missing API — instead of the one sentence that says what to install
|
|
7
|
+
// (review 0003 Q54). Nothing but this tiny module is imported before the check, so the
|
|
8
|
+
// message is what a reader gets; the CLI is imported only once the floor holds.
|
|
9
|
+
//
|
|
10
|
+
// 5 is EXIT.UNSUPPORTED. `output/index.mjs` is the CLI graph this file exists to avoid
|
|
11
|
+
// loading before the check, so the literal is repeated here and asserted by
|
|
12
|
+
// `test/node-version.test.mjs`.
|
|
33
13
|
|
|
34
|
-
|
|
35
|
-
// does not load the registry. `agent-hook` is called before every tool call an agent
|
|
36
|
-
// makes, so its latency is a product requirement rather than a nicety (plan 0003
|
|
37
|
-
// R15), and the registry's imports - detection, projection, the bench corpus - cost
|
|
38
|
-
// tens of milliseconds before the command itself starts. Measured on the machine
|
|
39
|
-
// this was written on: 127.7 ms through the registry against 91.5 ms with only this
|
|
40
|
-
// module's imports, where the bare runtime is 86.9 ms of it.
|
|
41
|
-
//
|
|
42
|
-
// Only the exact spelling the renderers write takes this path. Anything else -
|
|
43
|
-
// including `agent-hook --help` - loads the registry, so help stays the one list of
|
|
44
|
-
// every command and this shortcut cannot become a second, thinner command surface.
|
|
45
|
-
if (positional[0] === 'agent-hook' && !flags.help && !flags.version) {
|
|
46
|
-
const { agentHookCommand } = await import('../src/commands/agenthook.mjs');
|
|
47
|
-
process.exit((await agentHookCommand(positional.slice(1), flags)) ?? EXIT.OK);
|
|
48
|
-
}
|
|
14
|
+
import { MIN_NODE, satisfiesMinimum } from '../src/node-version.mjs';
|
|
49
15
|
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
// (plan 0003 R50; the S10 contract asserts the document parses).
|
|
57
|
-
process.exitCode = code;
|
|
58
|
-
} catch (error) {
|
|
59
|
-
process.exit(fail(error?.message ?? String(error), EXIT.FAIL));
|
|
16
|
+
if (!satisfiesMinimum(process.versions.node)) {
|
|
17
|
+
process.stderr.write(
|
|
18
|
+
`ERROR 5 simt-dev needs Node >= ${MIN_NODE}; this is ${process.versions.node}\n` +
|
|
19
|
+
`REMEDY install Node ${MIN_NODE} or newer, then rerun: simt --version\n`,
|
|
20
|
+
);
|
|
21
|
+
process.exit(5);
|
|
60
22
|
}
|
|
23
|
+
|
|
24
|
+
await import('../src/cli.mjs');
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# ADR-014 — The workspace is configuration, and a single repo is a first-class case
|
|
2
2
|
|
|
3
|
-
Status: **accepted** · 2026-10-05
|
|
3
|
+
Status: **accepted** · 2026-10-05 · ruling 1 superseded by [ADR-119](ADR-119-the-environment-variable-points-into-a-workspace-the-repo-declared.md)
|
|
4
4
|
Affects: `simt-dev` CLI (workspace resolution, `compare`, `skills`, registry validation, packaging)
|
|
5
5
|
|
|
6
6
|
## Context
|
|
@@ -133,7 +133,7 @@ a feature; `rules why` is the provenance mechanism the whole one-canonical-home
|
|
|
133
133
|
on, and it cannot depend on a git checkout being present.
|
|
134
134
|
|
|
135
135
|
`docs/plans` ships with it, because every non-zero exit prints a remedy pointing at
|
|
136
|
-
`docs/
|
|
136
|
+
`docs/research/0002-simt-dev-cli.md section 11`.
|
|
137
137
|
|
|
138
138
|
### 6. "Absent", "wrong" and "moved" are three different facts
|
|
139
139
|
|
|
@@ -4,7 +4,7 @@ Status: accepted · 2026-10-06 · rulings 1 and 2 narrowed by ADR-026 · ruling
|
|
|
4
4
|
**Affects:** `src/projection/baselines.mjs`, `src/projection/markers.mjs`,
|
|
5
5
|
`src/projection/project.mjs`, `src/commands/init.mjs`, `test/baselines.test.mjs`,
|
|
6
6
|
`test/leaks.mjs`, `test/surfaces.test.mjs`. Settles §3.1 row 5 and row 7 of
|
|
7
|
-
`docs/
|
|
7
|
+
`docs/research/0001-centralise-agent-rules.md` for the files it names, and leaves the rest ruled
|
|
8
8
|
out by name rather than outstanding.
|
|
9
9
|
|
|
10
10
|
Rulings 1 and 2 did not survive whole: ADR-026 rules that a config whose grammar cannot
|
|
@@ -5,7 +5,7 @@ Status: accepted · 2026-10-06
|
|
|
5
5
|
`src/commands/help.mjs`, `src/projection/project.mjs`, `test/ci.test.mjs`.
|
|
6
6
|
**Narrows:** ADR-025 rulings 1 and 2. **Extends:** ADR-023 (bytes copied, written once),
|
|
7
7
|
ADR-024 (simt-dev's own copies are refreshed by `simt-dev ci`). Settles the Dependabot
|
|
8
|
-
item §3.1 row 8 of `docs/
|
|
8
|
+
item §3.1 row 8 of `docs/research/0001-centralise-agent-rules.md` named as still missing.
|
|
9
9
|
|
|
10
10
|
## Context
|
|
11
11
|
|
package/docs/decisions/ADR-027-the-one-gitattributes-line-that-is-neither-dangerous-nor-empty.md
CHANGED
|
@@ -5,7 +5,7 @@ Status: accepted · 2026-10-06
|
|
|
5
5
|
`test/baselines.test.mjs`, `test/surfaces.test.mjs`.
|
|
6
6
|
**Supersedes:** ADR-025 ruling 9, which ruled `.gitattributes` out for now and required this
|
|
7
7
|
record. Settles the `.gitattributes` item in §3.1 row 5 of
|
|
8
|
-
`docs/
|
|
8
|
+
`docs/research/0001-centralise-agent-rules.md`.
|
|
9
9
|
|
|
10
10
|
## Context
|
|
11
11
|
|
|
@@ -5,7 +5,7 @@ Status: accepted · 2026-10-07
|
|
|
5
5
|
`test/tsconfig.test.mjs`. **Narrows:** ADR-026 ruling 2 (ownership does not depend on
|
|
6
6
|
content being mergeable) by applying it to a file whose mechanism is `extends` rather than
|
|
7
7
|
a copied byte range. Settles the `tsconfig.base.json` item of §3.1 row 5 and row 7 of
|
|
8
|
-
`docs/
|
|
8
|
+
`docs/research/0001-centralise-agent-rules.md`.
|
|
9
9
|
|
|
10
10
|
## Context
|
|
11
11
|
|
|
@@ -3,7 +3,7 @@
|
|
|
3
3
|
Status: accepted · 2026-10-07
|
|
4
4
|
**Affects:** `src/toolchain.mjs`, `src/projection/project.mjs`, `test/toolchain.test.mjs`.
|
|
5
5
|
**Settles:** the `packageManager`/`engines`/`.nvmrc` items of §3.1 row 5 of
|
|
6
|
-
`docs/
|
|
6
|
+
`docs/research/0001-centralise-agent-rules.md`. **Extends:** ADR-026 ruling 9 (absence and
|
|
7
7
|
disagreement are reportable; content is not) to a file this tool authors no part of.
|
|
8
8
|
|
|
9
9
|
## Context
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
# ADR-030 — what a plan does not ship is a decision with a record, not a silence
|
|
2
2
|
|
|
3
3
|
Status: accepted · 2026-10-07
|
|
4
|
-
**Affects:** `docs/
|
|
4
|
+
**Affects:** `docs/research/0001-centralise-agent-rules.md` §3.1 row 5 and row 7. Ships no
|
|
5
5
|
code. **Refuses:** the commitlint baseline and the shared ESLint block named in row 5 and
|
|
6
6
|
row 7, and records why in the plan itself rather than leaving the rows to imply that two
|
|
7
7
|
mechanisms are merely unwritten.
|