Skip to content

Commit 6bbb4f8

Browse files
hyperpolymathclaude
andcommitted
feat(contractiles): fill bust + adjust with 007-lang drift semantics
Task #11. bust (hard-stops, merge-blocking): - `bust/Bustfile.a2ml` — 16 hard_stops across six classes: banned_pattern (believe_me, assert_total, Admitted, sorry, unsafeCoerce, Obj.magic, .expect("TODO") antipattern) banned_language (python, typescript, package.json, v-lang, makefile, dockerfile) proof_regression (canonical-proof-suite scorecard decline, v0-differential floor 17/17) spec_drift (EBNF↔Pest rule-count divergence, Harvard invariant, SCM-file-at-repo-root) hype_drift (commercial/revolutionary register in docs) expiry (0-AI-MANIFEST.a2ml > 12 months stale) - `bust/bust.ncl` — runner with severity gate (critical/high block merge; medium warns; low informs), read-only probes, self-contained (no estate _base.ncl dependency). adjust (allowed drift corrections, advisory): - `adjust/Adjustfile.a2ml` — 8 adjustments with detect/correct pairs + automation flags + frequency hints. Covers: EBNF↔Pest resync, symbol-line-number rot (0-AI-MANIFEST design-doc-convention rule), 6a2 missing-or-stale, duplicate STATE/META root-vs-6a2 (current 007-lang drift acknowledged), lowercase xfile stubs, k9-under- contractiles (fixed 2026-04-20 in commit f6f3c91, retained as regression detector), missing SPDX headers, README ↔ Justfile recipe drift, .lia.cache hygiene. - `adjust/adjust.ncl` — runner with `check` / `fix` modes, filesystem- write allowed for deterministic fixes only, continue-with-warnings. - Removed the lowercase `adjustfile.a2ml` stub (generator drift, superseded by canonical `Adjustfile.a2ml`). Justfile: - `contractile-check` now depends on `bust-check adjust-check` too. - `bust-check` with per-probe 10s timeout (fast pre-commit gate) plus `bust-check-full` for the no-timeout variant. Slow probes (canonical-proof-suite, v0-differential) return "deferred" rather than failing when they exceed 10s. - `adjust-check` reports drift entries without blocking. Known finding (pre-existing, not introduced here): `bust-check` surfaces one Harvard-invariant violation — `DataExpr` enum in oo7-core contains control-flow variants (semiring symbols). Tracked as the `harvard-invariant-violated` bust hit; resolution is out of scope for this task (either refactor `DataExpr` or record an explicit variance in the intend trident). `just contractile-check` will therefore fail on fresh clones until this is addressed — please land the fix or variance in a follow-up commit. Assail clean on new files (11 pre-existing Rust weak points unchanged). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent f6f3c91 commit 6bbb4f8

7 files changed

Lines changed: 496 additions & 18 deletions

File tree

.machine_readable/contractiles/README.adoc

Lines changed: 8 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -13,8 +13,14 @@ one lowercase `<verb>.ncl` runner.
1313
* `dust/Dustfile.a2ml` — rollback and cleanup semantics.
1414
* `intend/Intentfile.a2ml` — north-star intents + horizon wishes + session
1515
lifecycle hook declarations.
16-
* `adjust/` — allowed drift corrections (work in progress).
17-
* (planned) `bust/Bustfile.a2ml` — what breaks and how to react.
16+
* `adjust/Adjustfile.a2ml` — allowed drift corrections with their
17+
authorised (often automated) fix runners.
18+
* `bust/Bustfile.a2ml` — hard-stops. What must not appear: banned
19+
patterns (believe_me / assert_total / Admitted / sorry / unsafeCoerce
20+
/ Obj.magic), Rust anti-patterns (`.expect("TODO")`), banned
21+
languages (Python / TS / V / npm), Makefile/Dockerfile, proof
22+
regression, spec drift (Harvard invariant, EBNF↔Pest divergence),
23+
and SCM-file-at-root drift.
1824

1925
K9 templates and validators live at `.machine_readable/svc/k9/` per
2026
ADR-001 (2026-04-18). `contractiles/` is reserved for the pure verb
Lines changed: 107 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,107 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Adjustfile — allowed drift corrections for 007-lang
3+
# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
# Paired runner: adjust.ncl
5+
#
6+
# Supersedes: adjustfile.a2ml (lowercase stub, removed in the same
7+
# commit; stub was generated 2026-04-08 and never ratified).
8+
9+
@abstract:
10+
Drift corrections that are allowed (and often automated). Each entry
11+
names a detected drift + the authorised correction. Distinction from
12+
Bustfile: Bustfile hard-stops "this must not appear at all"; Adjustfile
13+
acknowledges "this may drift, and here is the authorised correction".
14+
Distinction from Dustfile: Dustfile concerns end-of-life / deprecation
15+
rollback; Adjustfile concerns ongoing housekeeping.
16+
@end
17+
18+
## Spec / grammar drift
19+
20+
[[adjustments]]
21+
id = "ebnf-pest-resync"
22+
description = "EBNF and Pest grammar rule counts drift during development"
23+
detect = "just spec-check 2>&1 | grep -qE 'DRIFT|mismatch'"
24+
correct = "just grammar-check && human-review-required"
25+
automatable = false
26+
frequency = "per-commit"
27+
notes = "The correction isn't mechanical; it requires deciding whether EBNF or Pest is authoritative for a given rule. Log drift in 6a2/DRIFT.a2ml when not immediately corrected."
28+
29+
[[adjustments]]
30+
id = "symbol-line-number-rot"
31+
description = "Design docs / audits cite line numbers that have shifted (design-doc-conventions rule in 0-AI-MANIFEST.a2ml)"
32+
detect = "grep -rnE ':[0-9]+\\b' docs/ audits/ 2>/dev/null | grep -E '\\.(rs|idr|v)\\b' | head -20"
33+
correct = "Re-anchor the citation to a symbol path (e.g. `eval.rs :: ControlStmt::EnterDiscourse`) per 0-AI-MANIFEST.a2ml design-doc-conventions. The rule was added 2026-04-13 after T6 step-semantics flagged citation rot as bot-hostile."
34+
automatable = false
35+
frequency = "ad-hoc"
36+
37+
## 6a2 hygiene
38+
39+
[[adjustments]]
40+
id = "6a2-file-missing-or-stale"
41+
description = "One of the six A2ML files (STATE, META, ECOSYSTEM, AGENTIC, NEUROSYM, PLAYBOOK) is missing or older than the others by more than 30 days"
42+
detect = "find .machine_readable -maxdepth 2 -name '*.a2ml' -mtime +30 | grep -qE '(STATE|META|ECOSYSTEM|AGENTIC|NEUROSYM|PLAYBOOK)\\.a2ml$'"
43+
correct = "Regenerate or touch the stale file — per MEMORY rule '6a2 = six a2ml files — Update ALL SIX together', drift in one implies staleness across the set."
44+
automatable = false
45+
frequency = "monthly"
46+
47+
[[adjustments]]
48+
id = "duplicate-6a2-root-vs-subdir"
49+
description = "STATE.a2ml / META.a2ml exists BOTH at .machine_readable/ root AND at .machine_readable/6a2/ (drift currently present in 007-lang as of 2026-04-19)"
50+
detect = "test -f .machine_readable/STATE.a2ml && test -f .machine_readable/6a2/STATE.a2ml"
51+
correct = "Reconcile to a single canonical location — currently root is active (2026-04-19 timestamps) and 6a2/ copies are 2026-04-04 stale. Either delete the stale 6a2 copies or adopt 6a2/ as canonical estate-wide and refresh."
52+
automatable = false
53+
frequency = "once (drift cleanup)"
54+
notes = "The duplicate is acknowledged drift, not an intent. Do not automate the fix — estate-wide consensus needed on canonical location."
55+
56+
## Contractile structure drift
57+
58+
[[adjustments]]
59+
id = "lowercase-xfile-stub"
60+
description = "Lowercase `mustfile.a2ml` / `trustfile.a2ml` / `dustfile.a2ml` co-exists with the canonical capitalised form — the lowercase copy is generator drift"
61+
detect = "ls .machine_readable/contractiles/*/mustfile.a2ml .machine_readable/contractiles/*/trustfile.a2ml .machine_readable/contractiles/*/dustfile.a2ml 2>/dev/null | grep -q ."
62+
correct = "Delete the lowercase stubs; the capitalised files are canonical per estate rule ('verb dir = ONE <Verb>file.a2ml + ONE <verb>.ncl runner')."
63+
automatable = true
64+
fix_command = "rm -f .machine_readable/contractiles/*/mustfile.a2ml .machine_readable/contractiles/*/trustfile.a2ml .machine_readable/contractiles/*/dustfile.a2ml"
65+
frequency = "ad-hoc"
66+
67+
[[adjustments]]
68+
id = "k9-under-contractiles"
69+
description = "K9 templates found under contractiles/k9/ rather than svc/k9/ (ADR-001 2026-04-18)"
70+
detect = "test -d .machine_readable/contractiles/k9"
71+
correct = "git mv .machine_readable/contractiles/k9 .machine_readable/svc/k9 and update any references"
72+
automatable = false
73+
frequency = "once"
74+
notes = "Fixed 2026-04-20 in commit f6f3c91. Kept here as a regression-detection entry."
75+
76+
## License / header hygiene
77+
78+
[[adjustments]]
79+
id = "missing-spdx-header-on-new-source"
80+
description = "A staged Rust/Idris/Zig/Scheme/A2ML/NCL file lacks SPDX-License-Identifier"
81+
detect = "git diff --cached --name-only | grep -E '\\.(rs|idr|zig|scm|a2ml|ncl)$' | xargs -I{} grep -L 'SPDX-License-Identifier' {} 2>/dev/null | grep -q ."
82+
correct = "Prepend: `# SPDX-License-Identifier: PMPL-1.0-or-later` (or per 0-AI-MANIFEST.a2ml policy for dual-use code)"
83+
automatable = true
84+
fix_command = ".machine_readable/scripts/maintenance/add-spdx-headers.sh || just must-spdx-headers"
85+
frequency = "pre-commit"
86+
87+
## Docs drift
88+
89+
[[adjustments]]
90+
id = "readme-adoc-outdated-tool-list"
91+
description = "README.adoc references an oo7 CLI recipe that no longer exists in the Justfile"
92+
detect = "grep -oE 'just\\s+[a-z-]+' README.adoc 2>/dev/null | awk '{print $2}' | sort -u | xargs -I{} sh -c 'just --list | grep -q \"^\\s*{}\\s\" || echo {}'"
93+
correct = "Update README.adoc or re-introduce the recipe. Often signals a recipe was renamed without doc sync."
94+
automatable = false
95+
frequency = "ad-hoc"
96+
97+
## Cache / build artefacts
98+
99+
[[adjustments]]
100+
id = "lia-cache-committed-risk"
101+
description = ".lia.cache file present (Coq tactic cache — benign but should not enter git)"
102+
detect = "find . -name '.lia.cache' -not -path './.git/*' | head -1 | grep -q ."
103+
correct = "Add `.lia.cache` to .gitignore if not already present; remove from working tree."
104+
automatable = true
105+
fix_command = "grep -q '^\\.lia\\.cache' .gitignore || echo '.lia.cache' >> .gitignore"
106+
frequency = "ad-hoc"
107+
notes = "Observed in 007-lang working tree 2026-04-19 under both repo root and proofs/canonical-proof-suite/."
Lines changed: 62 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,62 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Adjust — drift-correction runner for 007-lang
3+
# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
#
5+
# Pairs with: Adjustfile.a2ml (same directory)
6+
# Verb: adjust
7+
# Semantics: each entry declares a detected drift + its authorised
8+
# correction. Runner in `check` mode reports; in `fix`
9+
# mode it runs the `fix_command` for every entry where
10+
# `automatable = true`. Non-automatable entries are
11+
# surfaced to the user.
12+
# CLI:
13+
# contractile adjust check — report drift hits without fixing
14+
# contractile adjust fix — apply automated fixes; list manual items
15+
#
16+
# Self-contained: does not import an estate _base.ncl.
17+
18+
{
19+
pedigree = {
20+
contractile_verb = "adjust",
21+
semantics = "allowed drift corrections",
22+
security = {
23+
leash = 'Kennel,
24+
trust_level = "deterministic fixes only; human review required for non-automatable",
25+
allow_network = false,
26+
allow_filesystem_write = true, # `fix` mode edits files
27+
allow_subprocess = true,
28+
},
29+
metadata = {
30+
name = "007-adjust-runner",
31+
version = "1.0.0",
32+
description = "Evaluates the 007-lang Adjustfile and applies deterministic fixes. Advisory: continue-with-warnings rather than hard-gate.",
33+
paired_xfile = "Adjustfile.a2ml",
34+
author = "Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>",
35+
},
36+
},
37+
38+
schema = {
39+
adjustments
40+
| Array {
41+
id | String,
42+
description | String,
43+
detect | String, # shell predicate; exit 0 = drift present
44+
correct | String, # prose description of the correction
45+
automatable | Bool | default = false,
46+
fix_command | String | optional, # shell cmd applied when automatable + `fix` mode
47+
frequency | [| 'per_commit, 'ad_hoc, 'monthly, 'once, 'pre_commit |] | optional,
48+
notes | String | optional,
49+
status | [| 'declared, 'verified, 'failing, 'partial |] | default = 'declared,
50+
}
51+
| optional,
52+
},
53+
54+
run = {
55+
on_pass = "continue",
56+
on_any_fail = "continue-with-warnings", # advisory, not blocking
57+
report_format = "a2ml",
58+
emit_summary = true,
59+
auto_fix_when_available = true,
60+
manual_items_to_stdout = true,
61+
},
62+
}

.machine_readable/contractiles/adjust/adjustfile.a2ml

Lines changed: 0 additions & 15 deletions
This file was deleted.
Lines changed: 181 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,181 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Bustfile — hard-stop / must-not-run declarations for 007-lang
3+
# Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
# Paired runner: bust.ncl
5+
#
6+
# Complement to Mustfile: Mustfile says "this must hold"; Bustfile
7+
# says "this must not appear". Catches re-introduction of banned
8+
# patterns by AI assistants, proof-regression, and spec drift.
9+
10+
@abstract:
11+
What breaks. Hard stops that trip CI and block release. Three
12+
categories: (1) banned code patterns — unsafe Idris2 / Coq escape
13+
hatches, Rust anti-patterns, banned languages; (2) proof regression —
14+
the canonical-proof-suite scorecard getting worse between commits;
15+
(3) spec drift — grammar.ebnf out of sync with grammar.pest, or
16+
Harvard invariant violated. Each entry declares: probe (detects the
17+
break), severity (what CI does), and a recovery pointer (how to fix).
18+
@end
19+
20+
## Banned-pattern re-introduction (Idris2 / Coq escape hatches)
21+
22+
[[hard_stops]]
23+
id = "idris-believe-me"
24+
description = "Use of `believe_me` in Idris2 sources (banned estate-wide)"
25+
class = "banned_pattern"
26+
probe = "grep -rnE '^[^-|]*\\bbelieve_me\\b' proofs/ crates/*/src 2>/dev/null | grep -v '\\-\\-\\|//.*banned\\|^[^:]*:[0-9]+:\\s*--' | grep -q ."
27+
severity = "critical"
28+
recovery = "Replace with a well-typed proof; use partial + idris_crash for stubs (see memory project_cerro_torre_postulate_conversion.md)"
29+
notes = "Code-only grep per feedback_code_only_grep_for_banned_patterns.md — string-literal tables and comment mentions don't count as violations."
30+
31+
[[hard_stops]]
32+
id = "idris-assert-total"
33+
description = "Use of `assert_total` in Idris2 sources"
34+
class = "banned_pattern"
35+
probe = "grep -rnE '^[^-|]*\\bassert_total\\b' proofs/ crates/*/src 2>/dev/null | grep -v '\\-\\-\\|//.*banned' | grep -q ."
36+
severity = "critical"
37+
recovery = "Rework the termination argument; if genuinely partial, annotate `partial`."
38+
39+
[[hard_stops]]
40+
id = "coq-admitted"
41+
description = "Admitted. in Coq proofs (unfinished proof committed)"
42+
class = "banned_pattern"
43+
probe = "grep -rn '^\\s*Admitted\\.' proofs/ 2>/dev/null | grep -q ."
44+
severity = "critical"
45+
recovery = "Either finish the proof, convert to a postulate with explicit narrow axiom, or move the result to wishes."
46+
47+
[[hard_stops]]
48+
id = "coq-sorry"
49+
description = "sorry in Lean-style comments — shouldn't appear in 007's Coq corpus"
50+
class = "banned_pattern"
51+
probe = "grep -rnE '\\bsorry\\b' proofs/ 2>/dev/null | grep -v 'Sorry\\|TODO.*sorry\\|not.*sorry' | grep -q ."
52+
severity = "high"
53+
54+
[[hard_stops]]
55+
id = "haskell-unsafecoerce"
56+
description = "`unsafeCoerce` in any source tree"
57+
class = "banned_pattern"
58+
probe = "grep -rnE '\\bunsafeCoerce\\b' crates/ 2>/dev/null | grep -q ."
59+
severity = "critical"
60+
61+
[[hard_stops]]
62+
id = "ocaml-obj-magic"
63+
description = "`Obj.magic` in any source tree"
64+
class = "banned_pattern"
65+
probe = "grep -rnE '\\bObj\\.magic\\b' crates/ 2>/dev/null | grep -q ."
66+
severity = "critical"
67+
68+
## Rust anti-patterns
69+
70+
[[hard_stops]]
71+
id = "unwrap-to-expect-todo-antipattern"
72+
description = "`.expect(\"TODO\")` and similar fake-debt markers. Per memory feedback_unwrap_to_expect_antipattern.md — identical panic semantics to .unwrap(), just disguised."
73+
class = "banned_pattern"
74+
probe = "grep -rnE '\\.expect\\(\"TODO\"\\)|\\.expect\\(\"FIXME\"\\)|\\.expect\\(\"unwrap\"\\)' crates/ 2>/dev/null | grep -q ."
75+
severity = "high"
76+
recovery = "Replace with real error handling (Result<_, E>) or convert to a typed anyhow context with a root cause. Reverting to .unwrap() is acceptable when the invariant genuinely guarantees Ok — but prefer the typed path."
77+
78+
## Banned-language re-introduction
79+
80+
[[hard_stops]]
81+
id = "python-reintroduction"
82+
description = "Python source files (banned estate-wide)"
83+
class = "banned_language"
84+
probe = "find . -type f -name '*.py' -not -path './.git/*' -not -path './target/*' 2>/dev/null | grep -q ."
85+
severity = "critical"
86+
87+
[[hard_stops]]
88+
id = "typescript-reintroduction"
89+
description = "TypeScript source files (convert to ReScript)"
90+
class = "banned_language"
91+
probe = "find . -type f \\( -name '*.ts' -o -name '*.tsx' \\) -not -path './.git/*' -not -path './target/*' -not -path './node_modules/*' 2>/dev/null | grep -q ."
92+
severity = "high"
93+
94+
[[hard_stops]]
95+
id = "nodejs-package-json"
96+
description = "package.json at repo root (Deno uses deno.json)"
97+
class = "banned_language"
98+
probe = "test -f package.json"
99+
severity = "high"
100+
101+
[[hard_stops]]
102+
id = "v-lang-reintroduction"
103+
description = "V-lang manifests (banned 2026-04-10; detected via v.mod / vpkg.json, not .v — collides with Verilog/Coq)"
104+
class = "banned_language"
105+
probe = "test -f v.mod || test -f vpkg.json"
106+
severity = "critical"
107+
108+
[[hard_stops]]
109+
id = "makefile-present"
110+
description = "Makefile or makefile at any level (use Justfile)"
111+
class = "banned_pattern"
112+
probe = "find . -type f \\( -name 'Makefile' -o -name 'makefile' \\) -not -path './.git/*' -not -path './target/*' 2>/dev/null | grep -q ."
113+
severity = "medium"
114+
115+
[[hard_stops]]
116+
id = "dockerfile-present"
117+
description = "Dockerfile at any level (use Containerfile + Podman)"
118+
class = "banned_pattern"
119+
probe = "find . -type f \\( -name 'Dockerfile' -o -name 'dockerfile' \\) -not -path './.git/*' -not -path './target/*' 2>/dev/null | grep -q ."
120+
severity = "medium"
121+
122+
## Proof regression
123+
124+
[[hard_stops]]
125+
id = "canonical-proof-suite-regression"
126+
description = "canonical-proof-suite scorecard declines between commits (any entry that was 'closed' becomes 'open' or 'in_progress')"
127+
class = "proof_regression"
128+
probe = "just canonical-proof-suite 2>/dev/null | grep -E 'regressed|DROPPED|\\bunclosed\\b' | grep -q ."
129+
severity = "critical"
130+
recovery = "Identify the regressed entry in audits/canonical-proof-suite/REPORT.a2ml, restore the proof or convert to a variance in the intend trident with justification."
131+
132+
[[hard_stops]]
133+
id = "v0-differential-floor-broken"
134+
description = "v0-differential agreement drops below the floor (17/17 per AI-WORK-007.md §3.6)"
135+
class = "proof_regression"
136+
probe = "just v0-differential 2>&1 | grep -qE '^(FAIL|[0-9]+/(1[0-6])\\b)'"
137+
severity = "critical"
138+
recovery = "Do NOT lower the floor. Either fix the v0 oracle or production to agree; or document the divergence with a variance in the intend trident."
139+
140+
## Spec drift
141+
142+
[[hard_stops]]
143+
id = "grammar-ebnf-pest-divergence"
144+
description = "EBNF and Pest grammar rule counts diverge (catches spec ↔ implementation drift)"
145+
class = "spec_drift"
146+
probe = "just spec-check 2>&1 | grep -qE '^DRIFT|\\bmismatch\\b'"
147+
severity = "high"
148+
recovery = "Run `just grammar-check` to identify unreachable / undefined rules; reconcile spec/grammar.ebnf with crates/oo7-core/src/grammar.pest."
149+
150+
[[hard_stops]]
151+
id = "harvard-invariant-violated"
152+
description = "Data expression contains control flow (Harvard invariant broken)"
153+
class = "spec_drift"
154+
probe = "just verify-harvard 2>&1 | grep -qE 'violat|FAIL'"
155+
severity = "critical"
156+
recovery = "Data exprs MUST NOT contain control flow — this is grammatical, not a lint rule. See 0-AI-MANIFEST.a2ml critical-invariants."
157+
158+
[[hard_stops]]
159+
id = "scm-file-at-root"
160+
description = "STATE.scm / META.scm / ECOSYSTEM.scm / AGENTIC.scm / NEUROSYM.scm / PLAYBOOK.scm / LANGUAGES.scm at repo root — SCM files MUST live under .machine_readable/ only"
161+
class = "spec_drift"
162+
probe = "ls STATE.scm META.scm ECOSYSTEM.scm AGENTIC.scm NEUROSYM.scm PLAYBOOK.scm LANGUAGES.scm 2>/dev/null | grep -q ."
163+
severity = "high"
164+
recovery = "Move to .machine_readable/ or .machine_readable/6a2/ per estate rule. Violation of the core invariant in hyperpolymath/CLAUDE.md."
165+
166+
## AI-failure expiry
167+
168+
[[hard_stops]]
169+
id = "stale-ai-manifest"
170+
description = "0-AI-MANIFEST.a2ml not touched in 12 months (stale universal entry point)"
171+
class = "expiry"
172+
probe = "test $(find 0-AI-MANIFEST.a2ml -mtime +365 2>/dev/null | wc -l) -eq 1"
173+
severity = "low"
174+
175+
[[hard_stops]]
176+
id = "commercial-hype-register"
177+
description = "Commercial / hype / revolutionary register in project docs (A5 grandiose-scale-hype defense)"
178+
class = "hype_drift"
179+
probe = "grep -riE '\\b(billionaire|revolutionary|game.changer|disrupt|monetis(e|ation)|trillion)\\b' README.adoc docs/ 2>/dev/null | grep -v 'banned\\|Bustfile\\|Mustfile' | grep -q ."
180+
severity = "medium"
181+
notes = "007 is dual-use, not commercial. This register tips into the wrong framing."

0 commit comments

Comments
 (0)