Skip to content

Commit a64608f

Browse files
hyperpolymathclaude
andcommitted
docs(contractile): add ADR-001 k9→svc relocation + migration log
- docs/ADR-001-k9-relocation-to-svc.adoc: formal decision record moving k9 out of .machine_readable/contractiles/ to .machine_readable/svc/k9/. Supersedes the 'k9-exception alongside verb dirs' language in CONTRACTILE-SPEC.adoc v1.1.0 (2026-04-17). Ratifies the 2026-04-18 practice already adopted at the top-level monorepo. - docs/CONTRACTILE-SPEC.adoc: pointer-update in the k9 definition + k9-exception section. Old-layout passages elsewhere remain for v1.1.0 fidelity; ADR is now authoritative. - .machine_readable/migrations/contractile-layout-2026-04-18.a2ml: machine-readable migration log — scope totals, outcomes (55 migrated, 150 blocked by stale Lust.a2ml hook, 31 dirty-tree, 11 diverged), and next-wave plan. - .machine_readable/migrations/contractile-layout-2026-04-18-DONE.tsv: per-repo list of successfully migrated repos (55 paths, one per line). Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent b8186d0 commit a64608f

4 files changed

Lines changed: 252 additions & 3 deletions

File tree

Lines changed: 55 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,55 @@
1+
./affinescript-vite
2+
./boj-server
3+
./developer-ecosystem/aspasia
4+
./developer-ecosystem/burble
5+
./developer-ecosystem/cookie-rebound
6+
./developer-ecosystem/gv-clade-index
7+
./developer-ecosystem/i-human
8+
./developer-ecosystem/katagoria
9+
./developer-ecosystem/kategoria
10+
./developer-ecosystem/krl
11+
./developer-ecosystem/nextgen-typing
12+
./developer-ecosystem/standards
13+
./developer-ecosystem/vscode-a2ml
14+
./developer-ecosystem/vscode-k9
15+
./fleet-ecosystem/cloudguard-server
16+
./fleet-ecosystem/game-server-admin
17+
./games-ecosystem/somethings-fishy
18+
./gossamer
19+
./InvestigativeJournalist.jl
20+
./JuliaKids.jl
21+
./JuliaPackage-Reuse-Audit.jl
22+
./natsci-studio
23+
./PostDisciplinary.jl
24+
./PRComms.jl
25+
./rsr-template-repo
26+
./snif
27+
./TradeUnionist.jl
28+
./verification-ecosystem/a2ml-deno
29+
./verification-ecosystem/a2ml-rs
30+
./verification-ecosystem/fraying-model-computational-testbed
31+
./verification-ecosystem/hypatia
32+
./verification-ecosystem/intsoc-transactor
33+
./verification-ecosystem/k9-deno
34+
./verification-ecosystem/k9-haskell
35+
./verification-ecosystem/k9iser
36+
./verification-ecosystem/k9-pre-commit
37+
./verification-ecosystem/k9-rs
38+
./verification-ecosystem/k9-validate-action
39+
./verification-ecosystem/methodologies
40+
./verification-ecosystem/mtpc-template-repo
41+
./verification-ecosystem/nesy-solver
42+
./verification-ecosystem/ochrance-framework
43+
./verification-ecosystem/pandoc-a2ml
44+
./verification-ecosystem/panll
45+
./verification-ecosystem/patch-bridge
46+
./verification-ecosystem/proven-servers
47+
./verification-ecosystem/session-sentinel
48+
./verification-ecosystem/squeakwell
49+
./verification-ecosystem/statistease
50+
./verification-ecosystem/the-nash-equilibrium
51+
./verification-ecosystem/typedqliser
52+
./verification-ecosystem/typell
53+
./verification-ecosystem/vcl-ut
54+
./verification-ecosystem/verisimdb-data
55+
./verification-ecosystem/verisimiser
Lines changed: 59 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,59 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// Machine-readable migration log for the 2026-04-18 contractile-layout sweep.
3+
// Applies: (3) bust/ addition + K9→svc/ relocation.
4+
// Paired with: docs/ADR-001-k9-relocation-to-svc.adoc
5+
6+
Migration {
7+
id: "contractile-layout-2026-04-18"
8+
title: "Estate-wide contractile layout sweep: bust/ addition + K9→svc"
9+
started-at: "2026-04-18"
10+
driven-by: "ADR-001-k9-relocation-to-svc"
11+
verb-set: ["intend", "trust", "must", "bust", "adjust", "dust"]
12+
svc-entries: ["k9"]
13+
14+
what-applied: [
15+
"Added .machine_readable/contractiles/bust/ (Bustfile.a2ml + bust.ncl) where missing",
16+
"Moved .machine_readable/contractiles/k9/ to .machine_readable/svc/k9/ where present",
17+
"Removed duplicate k9 in contractiles/ when svc/k9/ already existed"
18+
]
19+
20+
scope-totals {
21+
canonical-home-contractiles: 230
22+
root-home-contractiles: 287
23+
missing-bust-at-audit: 510
24+
k9-inside-contractiles-at-audit: 234
25+
}
26+
27+
outcomes {
28+
successfully-migrated-and-pushed: 55
29+
blocked-by-stale-lust-hook: 150
30+
blocked-by-uncommitted-work: 31
31+
blocked-by-local-remote-divergence: 11
32+
skipped-already-compliant: 2
33+
}
34+
35+
stale-hook-pattern: {
36+
error-message: "Missing contractile: Lust.a2ml"
37+
retired-verb: "lust"
38+
absorbed-into: "intend"
39+
absorbed-on: "2026-04-18"
40+
fix-path: "hook source uses 'lust' in iteration; must match 6-verb set (intend trust must bust adjust dust)"
41+
repo-count: 150
42+
feeds-into-task: "stale-hook repos cleanup (outside-workstream)"
43+
}
44+
45+
next-waves: [
46+
"wave-3: remaining ~100 canonical-home repos not yet attempted",
47+
"home-consolidation: 287 root-home contractiles/ → .machine_readable/contractiles/",
48+
"stale-hook sweep: 150 repos need pre-commit hook updated to 6-verb set",
49+
"diverged-repos: 11 repos need manual ff-reconciliation before layout sweep retries them"
50+
]
51+
52+
successful-repos-commit-shas-listed-in: "migrations/contractile-layout-2026-04-18-DONE.tsv"
53+
54+
scripts-used: [
55+
"/tmp/contractile-audit.sh — estate-wide audit, emits TSV of per-home state",
56+
"/tmp/fix-contractile-layout.sh — single-repo fix (bust/ add + k9 relocate)",
57+
"/tmp/wave[1|2|2b]-execute.sh — batch orchestrator with push-per-repo"
58+
]
59+
}
Lines changed: 127 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,127 @@
1+
// SPDX-License-Identifier: PMPL-1.0-or-later
2+
// (MPL-2.0 is automatic legal fallback until PMPL is formally recognised)
3+
// Author: Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
4+
= ADR-001: K9 Relocation to .machine_readable/svc/
5+
:toc:
6+
:sectnums:
7+
:icons: font
8+
Jonathan D.A. Jewell <j.d.a.jewell@open.ac.uk>
9+
v1.0.0, 2026-04-18
10+
11+
== Status
12+
13+
**Accepted** — 2026-04-18. Supersedes the `k9-exception` formulation in
14+
`CONTRACTILE-SPEC.adoc` v1.1.0 (2026-04-17).
15+
16+
== Context
17+
18+
`CONTRACTILE-SPEC.adoc` v1.1.0 (2026-04-17) placed k9 templates at
19+
`.machine_readable/contractiles/k9/` as an "exception alongside the verb
20+
directories". This was an uncomfortable compromise:
21+
22+
* The `contractiles/` directory is conceptually "one concern per verb,
23+
one verb per directory". k9 is not a verb and has no `K9file.a2ml`.
24+
* Contractile CLIs and audit tools that iterate over
25+
`contractiles/*` had to carry a hard-coded exclusion for `k9/`.
26+
* The estate pre-commit hook iterates the six active verbs; k9 being
27+
adjacent to them invited its own faulty verb-treatment drift.
28+
29+
One day after the spec landed, the top-level repos-monorepo moved
30+
k9 out to `.machine_readable/svc/k9/` (2026-04-18). The hook comment
31+
captured the rule explicitly: "k9 is svc, not a contractile".
32+
33+
This ADR ratifies that move and extends it estate-wide.
34+
35+
== Decision
36+
37+
k9 lives at `.machine_readable/svc/k9/` in every repo. The
38+
`contractiles/` directory contains only the six active verbs
39+
(`intend`, `trust`, `must`, `bust`, `adjust`, `dust`) — no exceptions.
40+
41+
== Rationale
42+
43+
* **Cleaner boundary.** `contractiles/` becomes a pure verb-set; `svc/`
44+
becomes the graded-automation (kennel/yard/hunt) home.
45+
* **No more exception handling in verb iterators.** Every entry under
46+
`contractiles/` is a verb directory, period.
47+
* **Matches actual role.** k9 is *trust-tier service automation
48+
infrastructure*; `svc/` names what it is.
49+
* **Keeps `INDEX.a2ml` honest.** The registry lists six verbs; k9 no
50+
longer needs a special "active vs exception" column.
51+
52+
== Directory Layout (after ADR)
53+
54+
----
55+
.machine_readable/
56+
├── contractiles/
57+
│ ├── _base.ncl
58+
│ ├── INDEX.a2ml
59+
│ ├── README.adoc
60+
│ ├── adjust/ ── Adjustfile.a2ml + adjust.ncl
61+
│ ├── bust/ ── Bustfile.a2ml + bust.ncl
62+
│ ├── dust/ ── Dustfile.a2ml + dust.ncl
63+
│ ├── intend/ ── Intentfile.a2ml + intend.ncl
64+
│ ├── must/ ── Mustfile.a2ml + must.ncl
65+
│ └── trust/ ── Trustfile.a2ml + trust.ncl
66+
67+
└── svc/
68+
└── k9/
69+
├── README.adoc
70+
├── template-kennel.k9.ncl
71+
├── template-yard.k9.ncl
72+
├── template-hunt.k9.ncl
73+
└── examples/
74+
├── ci-config.k9.ncl
75+
├── project-metadata.k9.ncl
76+
└── setup-repo.k9.ncl
77+
----
78+
79+
`svc/` is a **directory of named service-automation subsystems**. Today
80+
it holds only `k9/`. Future service-layer infrastructure (watchers,
81+
daemons, long-running automations) belongs here under its own name.
82+
83+
== Migration Rules
84+
85+
For each repo in the estate:
86+
87+
. If `.machine_readable/contractiles/k9/` exists and `.machine_readable/svc/k9/`
88+
does not: `git mv` the former to the latter.
89+
. If both exist, the `contractiles/` copy is the duplicate — remove it,
90+
keep the one under `svc/`.
91+
. If neither exists: do nothing — the repo does not use k9.
92+
. Repos that still have a root-level `contractiles/k9/` need the same
93+
move, paired with the root-home → canonical-home migration
94+
(separate pass; see `CONTRACTILE-HOME-MIGRATION-2026-04-18.adoc`).
95+
96+
== Consequences
97+
98+
=== Positive
99+
100+
* Cleanest verb/service boundary the estate has yet had.
101+
* Removes the need for k9 to keep claiming "I'm an exception" in the
102+
spec.
103+
* Unblocks future graded-automation services to sit alongside k9.
104+
105+
=== Negative — to be fixed
106+
107+
* The top-level `.machine_readable/contractiles/README.adoc` still
108+
mentions the retired `lust` verb and the old four-verb set
109+
(`must/trust/dust/lust`). Requires a sweep.
110+
* Pre-commit hooks across ~150 repos still enforce `Lust.a2ml`
111+
(retired 2026-04-18 — `intend` absorbed it). These hooks reject
112+
contractile-layout changes, blocking the estate migration. Feeds
113+
directly into the "stale-hook repos" cleanup work.
114+
115+
=== Neutral
116+
117+
* `CONTRACTILE-SPEC.adoc` §§ 82–83 and the `k9-exception` section
118+
must be updated to point to this ADR and remove the "alongside verb
119+
directories" language.
120+
121+
== Related Work
122+
123+
* `CONTRACTILE-HOME-MIGRATION-2026-04-18.adoc` — root-level
124+
`contractiles/` → `.machine_readable/contractiles/` consolidation
125+
(task 2 of the current migration wave).
126+
* `.machine_readable/migrations/contractile-layout-2026-04-18.a2ml` —
127+
machine-readable migration log with per-repo outcomes.

docs/CONTRACTILE-SPEC.adoc

Lines changed: 11 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -79,8 +79,10 @@ run-behaviour::
7979
report format, and runner-specific flags. Defaults factored into `_base.ncl`.
8080

8181
k9::
82-
Service-automation trust-tier infrastructure. Lives alongside the verb
83-
directories but is NOT itself a contractile verb. See <<k9-exception>>.
82+
Service-automation trust-tier infrastructure. Lives at
83+
`.machine_readable/svc/k9/` — NOT inside `contractiles/`. See <<k9-exception>>.
84+
Moved out of `contractiles/` per `ADR-001-k9-relocation-to-svc.adoc`
85+
(2026-04-18); this spec's v1.1.0 language predates that ADR.
8486

8587
== The Verb Set
8688

@@ -433,7 +435,13 @@ Adopters writing new xfiles should prefer the structured form where possible.
433435
== K9 Exception
434436

435437
`k9/` is **not a contractile verb**. It is trust-tier template infrastructure
436-
that sits alongside the verb directories.
438+
that lives at `.machine_readable/svc/k9/`, separate from the verb directories
439+
under `.machine_readable/contractiles/`.
440+
441+
NOTE: Prior to 2026-04-18, k9 lived inside `contractiles/` as an "alongside
442+
exception". That placement was retired by ADR-001 (`docs/ADR-001-k9-relocation-to-svc.adoc`).
443+
Other sections of this spec still refer to the old layout in places; those are
444+
superseded by the ADR.
437445

438446
=== Why k9 is different
439447

0 commit comments

Comments
 (0)