Skip to content

Commit a645db8

Browse files
hyperpolymathclaude
andcommitted
chore(contractiles): add bust/ + relocate k9 to svc/
Applies estate-wide contractile layout fixes: - Adds .machine_readable/contractiles/bust/ (Bustfile.a2ml + bust.ncl) to complete the 6-verb set (intend/trust/must/bust/adjust/dust) - Moves k9 out of .machine_readable/contractiles/ to .machine_readable/svc/ per the k9-is-svc-not-contractile rule (2026-04-18 convention) Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent b876891 commit a645db8

2 files changed

Lines changed: 94 additions & 0 deletions

File tree

Lines changed: 28 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,28 @@
1+
// Bustfile.a2ml — meta-repo bust contractile (breakage / rollback)
2+
// SPDX-License-Identifier: PMPL-1.0-or-later
3+
4+
Bust {
5+
name: "universal-language-server-plugin"
6+
version: "1.0.0"
7+
description: "Rollback procedures when something breaks in the meta-repo"
8+
9+
scenarios: {
10+
"bad-pointer-bump": "git revert <bump-commit> in meta-repo; child repo itself untouched"
11+
"submodule-pointer-points-at-missing-sha": "git submodule update --init --checkout <path> resets child to parent-recorded SHA; OR revert the stale bump commit"
12+
"submodule-orphan-after-local-only-commit": "roll back locally with git reset to before the stranded commit; fix remote situation before re-attempting"
13+
"accidental-private-repo-content-leaked-to-public-submodule": "hard-rotate the leaked secret immediately; git-filter-repo or BFG on the submodule's own history; public re-publication only after rotation complete"
14+
}
15+
16+
escalation-ladder: [
17+
"1. revert the meta-repo commit (reversible, low blast radius)",
18+
"2. reset the local submodule clone (affects only local workspace)",
19+
"3. force-push to main — PROHIBITED without explicit user confirmation (violates branch protection)",
20+
"4. registry-level (delete/archive the GitHub repo) — human-only action, never by AI"
21+
]
22+
23+
backup-points: [
24+
"GitHub serves as the durable backup for every submodule's own history",
25+
"Meta-repo history on origin/main is the durable backup for pointer state",
26+
"Local backup tags (backup/pre-<operation>-<date>) retained on risky rewrites"
27+
]
28+
}
Lines changed: 66 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,66 @@
1+
# SPDX-License-Identifier: PMPL-1.0-or-later
2+
# Bust — error-handling / failure-recovery runner
3+
#
4+
# Pairs with: Bustfile.a2ml (same directory)
5+
# Verb: bust
6+
# Semantics: every declared failure mode must have a recovery path that has
7+
# been exercised. Runner injects failures (via declared probes)
8+
# and verifies the recovery path works. Hard gate on any
9+
# failure-mode with missing or broken recovery.
10+
# CLI: `contractile bust check` → list failure modes + recovery status
11+
# `contractile bust drill` → inject declared failures, verify recovery
12+
#
13+
# Anything else in this directory is human-only notes/archive; machines ignore.
14+
#
15+
# Base: ../_base.ncl provides pedigree_schema, run_defaults, probe_schema.
16+
# See: docs/CONTRACTILE-SPEC.adoc
17+
18+
let base = import "../_base.ncl" in
19+
20+
{
21+
pedigree = base.pedigree_schema & {
22+
contractile_verb = "bust",
23+
semantics = "error handling + failure recovery",
24+
security = {
25+
leash = 'Kennel,
26+
trust_level = "controlled failure injection; scoped to system-under-test",
27+
allow_network = false,
28+
allow_filesystem_write = true, # drills may write transient state (tmp dirs, test DBs)
29+
allow_subprocess = true,
30+
injection_scope = "system-under-test-only",
31+
},
32+
metadata = {
33+
name = "bust-runner",
34+
version = "1.0.0",
35+
description = "Exercises declared failure modes and verifies recovery paths. Hard-gates on any failure mode without working recovery.",
36+
paired_xfile = "Bustfile.a2ml",
37+
author = "Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>",
38+
},
39+
},
40+
41+
schema = {
42+
failure_modes
43+
| Array {
44+
id | String,
45+
description | String,
46+
class | [| 'network, 'disk_full, 'oom, 'timeout, 'partial_write, 'panic, 'crash, 'rollback, 'concurrency |],
47+
# TODO: migrate to base.probe_schema (structured probe) when CLI supports it
48+
injection_probe | String, # command that deterministically causes this failure
49+
# TODO: migrate to base.probe_schema (structured probe) when CLI supports it
50+
recovery_probe | String, # command that verifies recovery (exit 0 = recovered)
51+
expected_recovery_time_seconds | Number | default = 30,
52+
# status_core values: 'declared, 'verified, 'failing; bust adds 'drilled
53+
status | [| 'declared, 'drilled, 'verified, 'failing |] | default = 'declared,
54+
notes | String | optional,
55+
},
56+
},
57+
58+
# Runner behaviour — inherits from base.run_defaults.
59+
# bust adds record_recovery_times for performance tier feeding.
60+
run = base.run_defaults & {
61+
on_any_fail = "exit-nonzero", # missing or broken recovery blocks merge
62+
report_format = "a2ml",
63+
emit_summary = true,
64+
record_recovery_times = true, # feeds the performance tier
65+
},
66+
}

0 commit comments

Comments
 (0)