Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
153 commits
Select commit Hold shift + click to select a range
ddf3046
test(ruby): a red gate for Ruby inheritance edges, with its three flo…
andriytyurnikov Sep 17, 2026
d5d0c89
feat(ruby): class Child < Parent is an inheritance edge, so the lego …
andriytyurnikov Sep 17, 2026
e0b6579
test(ruby): the inheritance gate reports a lost PASS line, checks its…
andriytyurnikov Sep 17, 2026
f0cc857
test(ruby): an absence arm no longer passes on a failed run, and floo…
andriytyurnikov Sep 22, 2026
63fd01b
test(ruby): a red gate for scoped Ruby bases, and floor (a) pinned ag…
andriytyurnikov Sep 23, 2026
9a39e3c
fix(ruby): a computed superclass mints no inheritance edge to its rec…
andriytyurnikov Sep 23, 2026
92c9227
fix(ruby): a base is scoped by Ruby's constant lookup, so an out-of-t…
andriytyurnikov Sep 23, 2026
5983cc5
refactor(ruby): isBaseTypeNode's Ruby arm compares node kinds through…
andriytyurnikov Sep 23, 2026
30a23d8
refactor(ruby): isBaseTypeNode keeps main's one-argument signature; t…
andriytyurnikov Sep 25, 2026
4f28412
test(ruby): a red gate for a reopened class listed twice, and floor (…
andriytyurnikov Sep 25, 2026
5e1695d
fix(ruby): a class reopened with its superclass repeated is one imple…
andriytyurnikov Sep 25, 2026
ba41127
refactor(ruby): buildRubyBaseScope's reference join is its own function
andriytyurnikov Sep 26, 2026
5b455cd
docs(ruby): rubyResolveBaseConstant states the qualified-lookup floor
andriytyurnikov Sep 26, 2026
2a76aea
mcp: --mcp-tools=LIST lists a subset of the MCP tools
joyful-ii-V-I Sep 26, 2026
bac1da7
docs: --mcp-tools in COMMANDS.md, the MCP skill reference and CHANGELOG
joyful-ii-V-I Sep 26, 2026
b8bd41b
mcp, wrap: keep the --mcp-tools plumbing inside the existing contracts
joyful-ii-V-I Sep 26, 2026
10fd5eb
--impact: list the blast radius nearest first, with its hop depth
joyful-ii-V-I Sep 26, 2026
b063fd6
CHANGELOG: state the measured byte cost of depth-labelled --impact
joyful-ii-V-I Sep 26, 2026
8a02f27
columnar/graphlegend: one writer for the optional dense columns and b…
joyful-ii-V-I Sep 26, 2026
33d559f
columnar: keep the tested column as it was; write the depth column once
joyful-ii-V-I Sep 26, 2026
1b12a08
quality-delta: error-masking also counts log-only and rethrow-only ha…
joyful-ii-V-I Sep 26, 2026
d9d6a85
quality-delta: placeholder, the eleventh kind (stubs and TODOs a chan…
joyful-ii-V-I Sep 26, 2026
950a0ab
quality-delta shapes: reuse the tree's helpers instead of new copies
joyful-ii-V-I Sep 26, 2026
ba8a35f
qualitykindscheck: report the three new exit/gating arms through if/else
joyful-ii-V-I Sep 26, 2026
16be67c
docs, test: re-anchor the claims the new --mcp-tools flag moved
joyful-ii-V-I Sep 27, 2026
4f70e26
mcp, docs: name runMcp's config `config`; disclose --mcp-tools in the…
joyful-ii-V-I Sep 27, 2026
2fb5ac7
Merge origin/main (v0.6.5) into lane/qd-masking-stubs-065
joyful-ii-V-I Sep 27, 2026
496f6ad
tests: re-pin printf parity for the new --help text; qsnap blob layou…
joyful-ii-V-I Sep 27, 2026
3a6c7ad
handlershape: spell lowerCopy so it is not a structural twin of an un…
joyful-ii-V-I Sep 27, 2026
7484e93
test(ruby): a red gate for RSpec's described_class as a constant rece…
andriytyurnikov Sep 25, 2026
0178f8d
feat(ruby): RSpec's described_class is the constant its example group…
andriytyurnikov Sep 25, 2026
5efb071
test(ruby): describe nil passes the parent's described_class through,…
andriytyurnikov Sep 26, 2026
ddd567d
fix(ruby): describe nil passes the parent's described_class through, …
andriytyurnikov Sep 26, 2026
fb97fc1
test(ruby): floor (e) reads a local described_class by Ruby's own sco…
andriytyurnikov Sep 27, 2026
46494e4
refactor(ruby): rubyFinalConstant reads its name: child through field…
andriytyurnikov Sep 27, 2026
ed6bd61
fix(ruby): a local described_class declines where Ruby reads it as th…
andriytyurnikov Sep 27, 2026
35daa0a
refactor(ruby): Ruby's local-scoping kinds are one table, and fieldCh…
andriytyurnikov Sep 27, 2026
24fa0cb
docs(changelog): RSpec's described_class under [Unreleased], with flo…
andriytyurnikov Sep 27, 2026
3f81d6e
Merge origin/main (v0.6.5) into lane/mcp-tool-profile-065
joyful-ii-V-I Sep 27, 2026
ed39488
test, docs: re-derive the merge-moved figures from the merged binary
joyful-ii-V-I Sep 27, 2026
e413e59
wrap: spell wrapWritesToolsArg as a switch over McpForm
joyful-ii-V-I Sep 27, 2026
bec53bd
--metrics: one row per definition, split overloads carry l=
joyful-ii-V-I Sep 27, 2026
a3aad2d
docs: hand-correct the --legend-dict dictv/entries figure for the l= …
joyful-ii-V-I Sep 27, 2026
4bf2bdf
metrics per-def: no new fixed-buffer site, split pass 1 out; skilltru…
joyful-ii-V-I Sep 27, 2026
beb15b1
Merge origin/main (v0.6.5) into lane/impact-depth-065
joyful-ii-V-I Sep 28, 2026
7690b77
gates: re-anchor three --impact readers for depth-labelled rows
joyful-ii-V-I Sep 28, 2026
986540c
docs(lang): adding a language is data first; common mechanisms stay c…
joyful-ii-V-I Sep 28, 2026
30b6061
fix(mcp): whereis, uses and find_symbol stop claiming more than they …
joyful-ii-V-I Sep 28, 2026
caedb00
test(gateexit): pin mcptwinclaimscheck's heredoc rc (forced on the pr…
joyful-ii-V-I Sep 28, 2026
1289d69
perf(merge-scout): archive each arm without the subtrees the crawl pr…
joyful-ii-V-I Sep 28, 2026
7e2600f
fix(skillscan,#353): EXFILTRATE:net-exfil is CRITICAL only with a cre…
joyful-ii-V-I Sep 28, 2026
fddfcd7
test(traceasanlinear,#352): arm B compares medians of five round-robi…
joyful-ii-V-I Sep 28, 2026
0fa9276
fix(history): the history verbs say so when a clone is shallow
joyful-ii-V-I Sep 28, 2026
96c19af
fix(resolve): a Python class defined in the caller's file no longer v…
joyful-ii-V-I Sep 28, 2026
fcfe1b7
fix(honesty): --mentions, --pattern and --pack-top-n disclose what th…
joyful-ii-V-I Sep 28, 2026
57ccbb8
refactor(honesty): split the new cut disclosures into helpers; compac…
joyful-ii-V-I Sep 28, 2026
5675810
refactor(honesty): reuse readWholeFile; fold the bare-declaration tes…
joyful-ii-V-I Sep 28, 2026
97cd2e1
refactor(mentions): split the whole-identifier test and the markdown …
joyful-ii-V-I Sep 28, 2026
e222427
refactor(mentions): one identifier-token pass instead of a whole-word…
joyful-ii-V-I Sep 28, 2026
c63e8d0
docs(changelog): name the tree the --mentions figure was measured on
joyful-ii-V-I Sep 28, 2026
e6b5051
fixup(skillscan,#353): suite findings — capture legend-dict figure, p…
joyful-ii-V-I Sep 28, 2026
0b76df8
fix(history): keep the refusal literals whole; allowlist the quoted g…
joyful-ii-V-I Sep 28, 2026
68f195c
fix(skillscan,g1): hasCredentialToken takes a file operand's base nam…
joyful-ii-V-I Sep 28, 2026
0e0b778
test+docs: settle the suite's findings on the lane
joyful-ii-V-I Sep 28, 2026
0023256
fix(review): keep same-file annotated Python callers; never prune a t…
joyful-ii-V-I Sep 29, 2026
bf9d9f9
refactor(resolve): the same-file token scan is a free function beside…
joyful-ii-V-I Sep 29, 2026
7ff30c9
test(cppqual): --uses=readWholeFile 29 -> 30 for the gate's same-file…
joyful-ii-V-I Sep 29, 2026
910e563
docs(capture): the rankGraphTeleport seed is src/graph.h:4528 now (l=…
joyful-ii-V-I Sep 29, 2026
e6a1d48
fix(skillscan,#353): net-exfil needs a destination (R1) and a sensiti…
joyful-ii-V-I Sep 29, 2026
bae4d12
refactor(skillscan): inline the sensitive-shape and keychain-dump che…
joyful-ii-V-I Sep 29, 2026
a8cdfd0
fix(skillscan,#353): R1 never silences a real upload — netcat HOST PO…
joyful-ii-V-I Sep 29, 2026
53323a9
fix(skillscan,#353): close four review false-negatives — runner prefi…
joyful-ii-V-I Sep 29, 2026
3cb3ed5
fix(skillscan,#353): a sensitive read inside <( ) still feeds an uplo…
joyful-ii-V-I Sep 29, 2026
2d4406c
fix(ingest): a name bound to a function literal owns the literal's bo…
joyful-ii-V-I Sep 29, 2026
7137858
fix(ingest): a bare `x => …` literal counts its one parameter; DefBod…
joyful-ii-V-I Sep 29, 2026
5132cbe
test(fnliteralcheck): ok() records a failed PASS write; verdicts thro…
joyful-ii-V-I Sep 29, 2026
0d6b218
Merge origin/main into lang-guide-066
joyful-ii-V-I Sep 30, 2026
456e6fb
docs(add-a-language): correct the resolver, grep-step, Clojure and pa…
joyful-ii-V-I Sep 30, 2026
2b3d01a
Define diffable= in the --stray-content legends (compact, full, MCP t…
joyful-ii-V-I Sep 30, 2026
e3996fe
fix(dead-code): a pytest method is not an internal-linkage orphan (0.…
joyful-ii-V-I Sep 30, 2026
9567607
skills: ripwire-quality-bar gains a bounded fix loop for existing debt
joyful-ii-V-I Sep 30, 2026
37dbb71
skills: quality-bar fix loop - measure before commit, churn exemption
joyful-ii-V-I Sep 30, 2026
010f9ff
memguardcheck B12: hold on throttled and many-core hosts (64M floor, …
joyful-ii-V-I Sep 30, 2026
c292e3c
fix(resolve): a function-local def yields to what a call outside its …
joyful-ii-V-I Sep 30, 2026
bb17dc7
fix(naming-consistency): a JSX component keeps its PascalCase
joyful-ii-V-I Sep 30, 2026
baa8da8
docs(changelog): the fn-literal entry says what the resolver now does…
joyful-ii-V-I Sep 30, 2026
91af069
fix(connect): search a many-definition terminal from the definition t…
joyful-ii-V-I Sep 30, 2026
c6133db
memguardcheck B8/B8b: a fixture far over the limit, not src/ (#364)
joyful-ii-V-I Sep 30, 2026
5325578
Merge lane/skillscan-severity-nightly-066 (3cb3ed55) into train22 fixups
joyful-ii-V-I Sep 30, 2026
3b79318
One base-name cut: rw::namesplit::afterLast, used by the four copies
joyful-ii-V-I Sep 30, 2026
386a708
CHANGELOG: the memguard real-footprint arm no longer runs on src/
joyful-ii-V-I Sep 30, 2026
692f6fd
SkillSpector: related work, not lineage; the scanner's markdown readi…
joyful-ii-V-I Sep 30, 2026
0a89aac
fix(from-trace): next= never splices a frame's line onto another file…
joyful-ii-V-I Sep 30, 2026
3f74150
fix(compact legend, capture): component_exempt= is a completeness ter…
joyful-ii-V-I Sep 30, 2026
b8370af
refactor: split the D1/D4 helpers under the quality bar (0.6.6 D1/D4 …
joyful-ii-V-I Sep 30, 2026
5a7fad9
fix(doc-drift): thousands commas, language built-ins, inherited relea…
joyful-ii-V-I Sep 30, 2026
b0e4562
fix(flags): read JavaScript/TypeScript process.env switches as env ga…
joyful-ii-V-I Sep 30, 2026
141b09f
refactor: share the quoted env-name reader; lift heading dates out of…
joyful-ii-V-I Sep 30, 2026
5610ed1
perf(ingest): the function-local scope is found in one descent from t…
joyful-ii-V-I Sep 30, 2026
6898de8
--scan-skills: a bundled shell script is scanned as code; other code …
joyful-ii-V-I Sep 30, 2026
09d55bd
skillscan: split the kind probe and the full legend out (quality-delta)
joyful-ii-V-I Sep 30, 2026
5a83d56
fix: suite findings on the lane — svLess for the builtin tables, if-f…
joyful-ii-V-I Sep 30, 2026
eacf5c2
fix(resolve): globally-binding nested functions, C-family defs and bu…
joyful-ii-V-I Sep 30, 2026
18e8998
fix(cache): kCacheVersion 26 -> 27 — round 2 changed the fnScope VALU…
joyful-ii-V-I Sep 30, 2026
fee43d5
fix(review): template literals are strings for --flags; split decorat…
joyful-ii-V-I Sep 30, 2026
bd4bea7
quality: ack forEachCodeByte's deliberate TemplateStack parameter (0.…
joyful-ii-V-I Sep 30, 2026
26a1928
skillscan: the code pass reads a leading `---` block as code (review M1)
joyful-ii-V-I Sep 30, 2026
060530c
skillscan: disclose every code extension the scanner cannot flow-scan…
joyful-ii-V-I Sep 30, 2026
1ee9367
skillscan: a UTF-8 BOM before #! still names the shell; env -u/-C, bu…
joyful-ii-V-I Sep 30, 2026
1d071b1
skillscan: shell startup dotfiles are shell code (review S3)
joyful-ii-V-I Sep 30, 2026
c91401a
skillscan: past the 200-row cap, CRITICAL rows print first (review S1)
joyful-ii-V-I Sep 30, 2026
43f7773
compactlegendcheck, legendcoveragecheck: an empty HOME of their own (…
joyful-ii-V-I Sep 30, 2026
5c0d7e7
skillscan: define <f rule= sev=> in both --scan-skills legends (revie…
joyful-ii-V-I Sep 30, 2026
322331a
--scan-skills: refuse a positional root the bare form never reads; na…
joyful-ii-V-I Sep 30, 2026
294707f
wrap: the pre-install scan reads every file of a skill, scripts inclu…
joyful-ii-V-I Sep 30, 2026
3b07e11
quality acks: each F3 false-positive ack names its own pair (review nit)
joyful-ii-V-I Sep 30, 2026
bd34a5d
skillscan: capped rows by one pass per severity, not an index sort (q…
joyful-ii-V-I Sep 30, 2026
eece756
wrap: follow directory symlinks with a (device, inode) cycle guard (r…
joyful-ii-V-I Sep 30, 2026
805ed7a
wrap: split the skill scan into a visit guard, a walk and a scan (qua…
joyful-ii-V-I Sep 30, 2026
87e5e61
Merge lane/lang-guide-066 (456e6fb5) into train 22: the add-a-languag…
joyful-ii-V-I Sep 30, 2026
f6d6cf0
Merge lane/qd-masking-stubs-065 (3a6c7ad8) into train 22: --quality-d…
joyful-ii-V-I Sep 30, 2026
2df0de0
Merge lane/metrics-per-def-066 (4bf2bdfc) into train 22: --metrics pr…
joyful-ii-V-I Sep 30, 2026
89f6beb
Merge lane/mcp-tool-profile-065 (e413e591) into train 22: --mcp-tools…
joyful-ii-V-I Sep 30, 2026
83f3056
Merge lane/impact-depth-065 (7690b779) into train 22: --impact states…
joyful-ii-V-I Sep 30, 2026
b5ef831
Merge lane/honesty-mcp-shallow-066 (0b76df81) into train 22: MCP twin…
joyful-ii-V-I Sep 30, 2026
ac65b66
Merge lane/honesty-cuts-066 (910e5638) into train 22: answers that cu…
joyful-ii-V-I Sep 30, 2026
982b152
Merge lane/skillscan-severity-nightly-066 (3cb3ed55) into train 22: s…
joyful-ii-V-I Sep 30, 2026
4827922
Merge lane/fn-literal-bodies-066 (18e8998c) into train 22: a name bou…
joyful-ii-V-I Sep 30, 2026
3418eba
Merge PR #338 (24fa0cb7) into train 22: RSpec described_class resolve…
joyful-ii-V-I Sep 30, 2026
d38a0e3
Merge PR #325 (5b455cdc) into train 22: Ruby has inheritance edges
joyful-ii-V-I Sep 30, 2026
39af30d
fix(ruby): a Ruby base left on the final-segment rule is disclosed as…
joyful-ii-V-I Sep 30, 2026
1e77b64
Merge lane/honesty-false-066 (bd4bea77) into train 22: five answers s…
joyful-ii-V-I Sep 30, 2026
c431d99
Merge lane/train22-fixups-066 (805ed7a7) into train 22: diffable lege…
joyful-ii-V-I Sep 30, 2026
dc8597e
Merge lane/c4-fixloop-067 (37dbb712) into train 22: the quality-bar s…
joyful-ii-V-I Sep 30, 2026
cfc544e
train 22 fixups: pins and figures from the merged binary, CHANGELOG u…
joyful-ii-V-I Sep 30, 2026
122dcbc
train 22 follow-up: the four per-lane gate reds the full suite found
joyful-ii-V-I Sep 30, 2026
bf841d4
skillscan: a shell script's two-pass merge keeps the worse severity p…
joyful-ii-V-I Sep 30, 2026
4e702d7
handlershape: a log receiver is a whole word, not a substring
joyful-ii-V-I Sep 30, 2026
2ab827c
lintrules: the error-masking query group is unbounded, like the walk …
joyful-ii-V-I Sep 30, 2026
e15e823
handlershape: bound mentionsName's recursion at the handler walk's depth
joyful-ii-V-I Sep 30, 2026
40189c4
docdrift: a grouped number past the digit cap is no claim, not its pr…
joyful-ii-V-I Sep 30, 2026
0524db8
mentions: disclose indexed markdown the unbackticked scan could not read
joyful-ii-V-I Sep 30, 2026
a17df9a
pattern: the unmatched_qualified reading says it is a floor under the…
joyful-ii-V-I Sep 30, 2026
62d4df1
report: shallow-history qualification probes every mined root
joyful-ii-V-I Sep 30, 2026
eac4eef
rubyrecvnarrowcheck: the Unrelated::build absence arm fails on a fail…
joyful-ii-V-I Sep 30, 2026
04b8151
quality-bar skill: 11 quality kinds on the routing bullet; skilltruth…
joyful-ii-V-I Sep 30, 2026
dbd4365
report: the --owners=SYM root probe reads fileRoot only on a multi-ro…
joyful-ii-V-I Sep 30, 2026
7e55814
handlershape: split isLogReceiver's word split into edgeWordsOf
joyful-ii-V-I Sep 30, 2026
3a54b3d
docs: cap inventory counts kMentionsNameMaxDepth (230 caps)
joyful-ii-V-I Sep 30, 2026
99b227e
handlershape: mentionsName walks an explicit stack, not recursion
joyful-ii-V-I Sep 30, 2026
d2e9643
qualitykindscheck: 5m and 5n verdicts through if/else (gateexitcheck G2)
joyful-ii-V-I Sep 30, 2026
c99b8d2
docs: TUNING.md cap census counts kMentionsNameMaxDepth
joyful-ii-V-I Sep 30, 2026
e936826
handlershape: isLogReceiver's word tables share one local lookup
joyful-ii-V-I Sep 30, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 4 additions & 0 deletions .github/pargates-shard-weights.json
Original file line number Diff line number Diff line change
Expand Up @@ -234,6 +234,7 @@
"htmlhostcheck.sh": 22.5,
"htmlrendercheck.sh": 22.0,
"identitycheck.sh": 35.5,
"impactdepthcheck.sh": 4.0,
"impactimportcheck.sh": 1.8,
"impactpartitioncheck.sh": 74.7,
"importnarrowcheck.sh": 2.8,
Expand Down Expand Up @@ -316,7 +317,9 @@
"mcpstalecheck.sh": 1.3,
"mcpstdiolinecapcheck.sh": 7.0,
"mcptoolprunecheck.sh": 4.5,
"mcptoolsubsetcheck.sh": 3.0,
"mcptranchecheck.sh": 68.3,
"mcptwinclaimscheck.sh": 1.3,
"mcpverbscheck.sh": 10.8,
"mcpw2fixcheck.sh": 58.7,
"mcpw3fixcheck.sh": 125.9,
Expand Down Expand Up @@ -502,6 +505,7 @@
"selfcheckcheck.sh": 32.7,
"selfcontainedcheck.sh": 2.2,
"shadowcheck.sh": 11.2,
"shallowhistorycheck.sh": 9.3,
"shapingflagcheck.sh": 193.7,
"shellgateindexcheck.sh": 1.2,
"showcasecapturecheck.sh": 20.9,
Expand Down
17 changes: 12 additions & 5 deletions .ripwire_quality_acks

Large diffs are not rendered by default.

535 changes: 534 additions & 1 deletion CHANGELOG.md

Large diffs are not rendered by default.

20 changes: 19 additions & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -472,6 +472,24 @@ every input the tool ever sees, costs nothing in release, and tells the optimize
ordered container); and `unordered_dense` invalidates references on insert (values live in one
vector), so never hold a `T&` into it across an insert.

### Adding a language: common stays common

A new language is **data plus, at most, small per-language pieces for semantics that genuinely differ** —
never a copy of another language's mechanism. The step-by-step path is `prompts/add-a-language.md`; the
rules it enforces:

- **Data, not branches.** A `kLangTable` row, a `queries/<lang>/tags.scm` in the shared capture
vocabulary, and a row in each exhaustive `switch( Lang )` table. No language-named capture kinds.
- **Reuse the shared mechanism.** Scope walks, shadowing (`VarDecl` bindings with spans) and imports
(`Binding`/`Include`) each exist once. Extend them; a second copy under a new language's name is a
review finding, and `--clones` shows it. No language-neutral qualified-call resolver exists yet
(`src/elixir_resolve.h` is Elixir-specific); raise generalising it in your PR.
- **Refuse, don't guess.** A call whose qualifier (`Mod.f`, `ns/f`) cannot be resolved is counted as
unresolved, never laddered to every definition of that short name.
- **Known gap.** Tags-pass predicates (`#eq?`/`#any-of?`) do not run yet, so keyword-headed definitions
(Elixir today; a Lisp-style `defn` if one is added) keep a small keyword table in C++. That table belongs in `tags.scm` once the
mechanism lands; it is not a pattern to extend.

### Interfaces

- **Structured-binding returns** over out-params: `auto [ nodes, edges ] = build( … );`.
Expand Down Expand Up @@ -526,7 +544,7 @@ contract and well-formedness. The GCC/Clang language extensions this tree uses g
refuses a new `__builtin_*`, inline asm or `__attribute__` outside that pair, so a Windows break is caught on every
POSIX leg rather than discovered on Windows.

A green Windows matrix is **not** the same as a validated platform. The 650-gate suite does not run there — it needs
A green Windows matrix is **not** the same as a validated platform. The 658-gate suite does not run there — it needs
the harness on #44 — and the ASan flavour is compiled on Windows but never executed.

The **windows-x64 release zip** (a preview from 0.6.3) is built by `.github/workflows/windows-package.yml`, which
Expand Down
26 changes: 17 additions & 9 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -825,8 +825,9 @@ firing on the same function is corroboration rather than one metric counted twic

That matters most for code an agent wrote. Empty-catch error masking is **+47%** more common in
AI-authored commits, a function rewritten again inside two weeks **+15%** more likely, and reuse is
*declining* as AI's share of commits grows (GitClear, *AI Copilot Code Quality*, 2026). Each of
`--quality-delta`'s 10 kinds targets one measured mode like those, and it reports **only what your
*declining* as AI's share of commits grows (GitClear, *AI Copilot Code Quality*, 2026). Ten of
`--quality-delta`'s 11 kinds each target one measured mode like those (the eleventh, `placeholder`,
lists the stubs and TODOs a change adds, and never gates), and it reports **only what your
change made worse** — then `--exemplar` shows the pattern in your own repo to copy, and `--test-gate`
names the tests that must run before "done."

Expand Down Expand Up @@ -925,9 +926,9 @@ Full retrieval tables — including the MRR figures behind the router numbers ab
## What it answers

<details>
<summary><b>184 long flags</b> across seven families, plus the MCP server — and <code>--help-task</code> names the ONE command a task wants, or abstains honestly when the evidence is too thin</summary>
<summary><b>185 long flags</b> across seven families, plus the MCP server — and <code>--help-task</code> names the ONE command a task wants, or abstains honestly when the evidence is too thin</summary>

Around the core sit 184 long flags advertised in `--help`, across seven families — plus an MCP
Around the core sit 185 long flags advertised in `--help`, across seven families — plus an MCP
server, so a coding agent can call any of them mid-task instead of grepping and reading whole files.
`--help` prints one line per flag (~4.5K tokens); `--help=--FLAG` prints that flag's full entry with
every caveat, `--help=SECTION` one family, and `--help=all` the whole catalog.
Expand Down Expand Up @@ -2062,9 +2063,9 @@ wrong, and it has. These are the results that say so, all in-tree, all published
### In the tests

<details>
<summary><b>651 gate scripts</b>, five contracts no unit test can hold, and the house rule: write the gate before the code it measures</summary> <!-- gatecount -->
<summary><b>658 gate scripts</b>, five contracts no unit test can hold, and the house rule: write the gate before the code it measures</summary> <!-- gatecount -->

`test/regression.sh` names **651 gate scripts** and is the authoritative list; <!-- gatecount -->
`test/regression.sh` names **658 gate scripts** and is the authoritative list; <!-- gatecount -->
`python3 test/pargates.py . ./build/ripwire -j 6` runs the same set in parallel. On top of them sit the
contracts that do not fit a unit test: two runs byte-identical, warm output identical to cold, output
that pipes clean through `xmllint --noout`, a sanitizer build with `-fno-sanitize-recover=all`, and a
Expand Down Expand Up @@ -2414,7 +2415,7 @@ same renderer. One computation has one output shape.

| Item | Requirement |
| --- | --- |
| Operating system | macOS (arm64 or x86-64) or Linux (arm64 or x86-64). Native Windows x64 **builds** with both clang-cl and MSVC `cl.exe` — CI builds both on `windows-latest` every full matrix and smoke-tests each binary (`--version`, `ctest`, a real crawl, the two-run byte-identical contract, well-formed XML); the 650-gate suite does not run there, and ASan is compiled but never executed, so treat it as a build, not a validated platform. From 0.6.3 a prebuilt `windows-x64` zip ships as a **preview** ([Windows](#windows)): CI unzips it and compares its output with Linux's byte for byte, but no maintainer runs Windows, so WSL2 remains the fully supported way to run it on a Windows machine. |
| Operating system | macOS (arm64 or x86-64) or Linux (arm64 or x86-64). Native Windows x64 **builds** with both clang-cl and MSVC `cl.exe` — CI builds both on `windows-latest` every full matrix and smoke-tests each binary (`--version`, `ctest`, a real crawl, the two-run byte-identical contract, well-formed XML); the 658-gate suite does not run there, and ASan is compiled but never executed, so treat it as a build, not a validated platform. From 0.6.3 a prebuilt `windows-x64` zip ships as a **preview** ([Windows](#windows)): CI unzips it and compares its output with Linux's byte for byte, but no maintainer runs Windows, so WSL2 remains the fully supported way to run it on a Windows machine. |
| Prebuilt Linux floor | RHEL 8 or later (glibc 2.28) |
| Prebuilt macOS floor | macOS 14 or later, Apple silicon. 0.6.1 is the last release with an Intel macOS binary; on an Intel Mac, pin `RIPWIRE_VERSION=v0.6.1` or build from source. |
| x86-64 floor | x86-64-v3 (Intel Haswell, 2013, or later), for a prebuilt binary and a source build alike |
Expand Down Expand Up @@ -2563,6 +2564,13 @@ The server is a standard input and output MCP process. The complete configuratio
}
```

To list fewer tools, add `--mcp-tools=` to the server's arguments: a comma list of tool names and/or the `core`
profile (explore, batch, from_trace, impact, uses, fetch_body, edit_check, quality_delta, the loop the server's own
instructions teach). A client that loads every tool schema at session start then pays for 8 schemas instead of 33
(`tools/list` measured at 13,834 bytes instead of 46,368). A call to a tool that is not listed is refused with the
flag that enables it. The list is not access control: `batch` sub-queries still reach hidden verbs. `ripwire wrap AGENT --mcp-tools=core` writes the flag
into the recipe it prints. The default stays the full catalog.

For a socket instead of standard input and output, run `ripwire --listen=HOST:PORT`. A non-loopback
bind requires `--mcp-token`. The three edit verbs are disabled on a remote bind unless you pass
`--allow-remote-edits`. The socket speaks plain HTTP with no TLS, so on a non-loopback bind the bearer token and
Expand Down Expand Up @@ -2617,7 +2625,7 @@ identity of the index, and says which one is at fault.

### 5. Command families

The `--help` output groups 184 long flags advertised in `--help` into seven families. The `--help=`
The `--help` output groups 185 long flags advertised in `--help` into seven families. The `--help=`
column below is the argument that prints one family: `ripwire --help=navigate`. `ripwire
--help=--FLAG` prints one flag's full text — the caveats, the units, what it refuses and why.
`ripwire --help=all` is the whole catalog, about 46,000 tokens.
Expand Down Expand Up @@ -2809,7 +2817,7 @@ python3 test/pargates.py . ./build/ripwire -j 6
A new gate script must be added to `test/regression.sh` in the same change. The gate
`test/manifestcheck.sh` enforces this rule.

Another gate derives the cap inventory. The tool has 229 compile-time caps and 7 ranking parameters.
Another gate derives the cap inventory. The tool has 230 compile-time caps and 7 ranking parameters.
`docs/LIMITS.md` lists each cap, its value, and whether the file discloses a truncation when the cap
fires, and `python3 docs/limits_build.py --check` proves that list against `src/`. `docs/TUNING.md`
lists the measured cost of each cap.
Expand Down
Loading
Loading