| 2026-07-19 |
Batch 0 CLOSE: verification green; session changelog + ledger entry
...
Post-batch verification per the sweep plan: touched harnesses 42/42 +
44/44 + 33/33; full gauntlet ALL GREEN (69 harnesses); repo-lint 0 fail
1 legacy WARN, now running WITH the L10/C1 check active. Session
changelog opened (one for the whole sweep session, GA-R2/D1) with
per-item reverts; ledger gains the Batch 0 in-flight entry incl. the
L10 WARN->FAIL flip reminder due at Batch 1 open. G3 evidence cell
updated same commit (GA-R1 rule 8).
Revert: git revert this commit (docs-only).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VZbUeRE8weySLSGY1odrCi
|

Batch 0.4: extractor status scan keyed to the legal token set (GA-F10 / vocab H1)
...
record-audit.py now knows the ratified Option A vocabulary: legal set
OPEN/BLOCKED/HELD/CLOSED (OPEN was previously unscanned -- a post-
migration blind spot where OPEN-vs-CLOSED stage contradictions would
have gone undetected); DONE/TO RUN/RUNNING added to the token scan.
New report section 6 classifies every distinct token (legal/illegal/
event) and flags illegal tokens plus event words (VOID/REOPENED/
SUPERSEDED) minted in status position (**Status: line or table row);
prose event words stay legitimate row-history vocabulary per H1.
Report-only: the 0/1/2 exit contract stays contradiction-driven, so
Batch 6.1 semantics are unchanged. Live sanity run (scratch --out, the
Phase-1 capture untouched): 12 distinct tokens, 163 flagged counted
occurrences -- Batch 2.5's migration work-list. G3 cell updated same
commit (GA-R1 rule 8).
Harness: tests/record-audit +9 checks, 33/33 PASS; repo-lint 0 fail.
Revert: git revert this commit (restores the 8-token scan and the
section-5-only report).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VZbUeRE8weySLSGY1odrCi
|

Batch 0.3: ledger-scan wrap-aware next-free exclusion (GA-F15)
...
The per-line "next-free"/"reproduc*" exclusion went blind when a quoted
next-free value wrapped its hyphenated token onto the following line
(happened twice live inside the 2026-07-18 audit -- CURRENT-STATE
section 9). An excluded line now suppresses itself AND the immediately
following line; the window is exactly one line and resets at every file
boundary. Chose this over assignment-site counting: DOCFIX/BUNDLEFIX
have no single register file to key assignment sites on (unlike D
headers). Live counters re-verified unchanged post-fix: D=130,
DOCFIX=197, BUNDLEFIX=052. CURRENT-STATE section 9 marked FIXED + G3
progress cell updated same commit (GA-R1 rule 8).
Harness: tests/ledger-scan +3 checks (wrapped quote excluded, wrapped
repro example excluded, two-lines-below still counts), 44/44 PASS;
repo-lint 0 fail.
Revert: git revert this commit (restores the per-line grep exclusion
and the section-9 "recorded, NOT fixed" wording).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VZbUeRE8weySLSGY1odrCi
|
Batch 0.2: ledger-scan SEC reporting repointed at security-ledger.md (GA-R4/F3)
...
Scan output now emits open COUNT + ID list + register-of-record pointer;
row-level dispositions dropped (they live in docs/security-ledger.md
ONLY). Session ledger's machine-derived SEC bullet re-seeded to pointer
+ count form. G14 evidence cell repointed at security-ledger.md same
commit, and its count corrected 9 -> 8 per GA-R1/C2 (measurement wins:
the cell's own enumeration and the scan both measure 8; divergence noted
in the cell, not silently harmonized).
Harness: tests/ledger-scan +4 checks (count+IDs surfaced, pointer
present, disposition text absent), 41/41 PASS; repo-lint 0 fail.
Revert: git revert this commit (restores per-row scan output, prior
ledger bullet, and the 2026-07-18 G14 cell incl. its count error).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VZbUeRE8weySLSGY1odrCi
|

Batch 0.1: repo-lint gains L10 status-coupling check (GA-R1 rule 8 / C1)
...
L10: a change set modifying state-bearing surfaces (docs/audit/ incl.
ga-rulings.md; design-decisions.md **Status: lines; session-ledger.md
gate rows) without touching docs/CURRENT-STATE.md is flagged -- pending
working-tree set when dirty, HEAD commit when clean. WARN this batch
(L10_FAIL=False); flips to FAIL at Batch 1 open per the sweep plan.
Divergence noted: the sweep plan's paraphrase listed "CURRENT-STATE gate
rows" (vacuous -- such an edit touches CURRENT-STATE by construction);
implemented per the ratified C1 utterance, "ledger gate rows"
(docs/audit/ga-rulings.md:129). G3 evidence cell updated same commit
per the rule this check enforces.
Harness: tests/repo-lint T34-T41 added, 42/42 PASS; live lint 0 fail,
1 legacy WARN (unchanged).
Revert: git revert this commit (check + tests self-contained; restores
the prior G3 cell).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01VZbUeRE8weySLSGY1odrCi
|
Ledger: post-close addendum -- plan reviewed + S1-S5 applied; Batch 0 presented, HELD for fresh session
...
Keeps the GA-R4 close summary truthful about the post-close continuation
(review verdict arrived after the bookend). No other work remains in this
session.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
| 2026-07-18 |
Sweep plan AMENDED per external review (S1-S5, single commit); G3 row updated
...
S1 = item 2.10 R3-F residual disposition (none unaccounted); S2 = Batch-6
SEC-gate confirmation before G9 opens; S3 = G6 reconcile mechanism is a
GA-R5-format operator ruling; S4 = v7 collision-proof throwaway-v7-*
naming, scratch storage, verified teardown; S5 = batch-boundary-only
session breaks with GA-R4 closes + CLAUDE.md expectation-line demotion in
2.6. Diffable against reviewed draft 687dfa8. G3 evidence cell updated
same-commit per GA-R1 rule 8.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
SESSION CLOSE per GA-R4: bounded 14-line summary + full body to docs/archive/ (first live compliance run)
...
Grounding-audit session closed: Phases 1-4 complete and externally
reviewed, sweep plan drafted (687dfa8), Phase 5 deferred to a fresh
session. Fences OK post-append. F1 cap noted as not yet enforceable
pending the Batch-4 one-time rotation (GA-R4 rule 6). Revert: git revert
of this commit restores the pre-close ledger.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA Phase-5 sweep plan DRAFTED (batches 0-6, GA-F/GA-R traced, dependency-ordered)
...
Six batches + exit runs: tooling first (C1 lint check, F3 repoint, GA-F15
hardening, H1 extractor alignment), the v8->v7->D-130 decision chain with
the operator's contingent lean carried verbatim, record fixes per-GA-F,
memory hygiene, consolidation/rotation, skill sweep, Phase-6 exit
criteria. DRAFT: nothing executes until external review + per-batch
operator gates, in a FRESH session. G3 row updated same-commit (C1).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
Vocabulary RATIFIED: Option A + H1 (utterance quoted) -- PHASE 4 COMPLETE; G2 CLOSED
...
Four-state vocabulary (OPEN/BLOCKED/HELD/CLOSED); H1 makes the Phase-5
token migration mechanically complete via the extractor scan and defines
event words (VOID/REOPENED/SUPERSEDED) as row-history, never states. All
seven GA-R rulings + the vocabulary are ratified with paired
question/utterance Status blocks, drafts diffable per B2. G2 gate row
CLOSED same-commit per GA-R1 rule 8 (ruling-type closure per GA-R6 E1).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA-R7 RATIFIED (operator, amendments G1+G2+G3, question+answer quoted); vocabulary A/B staged
...
G3 = memory is scratch, durable observations graduate to repo surfaces;
G1 = stage-close memory review joins the GA-R6 close-out set; G2 =
auto-memory posture (enabled for operator sessions, disabled for probe/
audit sessions incl. the Phase-6 exit trio). All seven GA-R rulings now
RATIFIED. Stage-status vocabulary A/B (GA-F10) staged as the final
Phase-4 item. G2 gate row updated same-commit per GA-R1 rule 8.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA-R4 RATIFIED (operator, amendments F1+F2+F3, question+answer quoted); GA-R7 draft staged
...
F1 = cap binds at session close, live sections never rotated; F2 =
post-hoc closure of orphaned sessions (no status weight); F3 =
security-ledger.md is the SEC register of record, ledger carries
pointer+count only. GA-R7 (memory governance) delivered as DRAFT. G2 row
updated same-commit per GA-R1 rule 8.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA-R6 RATIFIED (operator, amendments E1+E2+E3, question+answer quoted); GA-R4 draft staged
...
E1 = gate typing (ruling-type gates close per GA-R5); E2 = harnessed
closers, vacuous-pass closures VOID (DOCFIX-194 class); E3 = no
conditional close, remainders split into their own gate rows. GA-R4
(ledger rotation) delivered as DRAFT. G2 row updated same-commit per
GA-R1 rule 8.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA-R2 RATIFIED (operator, amendments D1+D2, question+answer quoted); GA-R6 draft staged
...
D1 caps changelog creation at one per session; D2 widens the Phase-5
sweep to every docs/ file with manifested consolidation commits and
defines the under-25 counting scope. GA-R6 delivered as DRAFT (executable
definition of done; 5/0/6 superseded by the CURRENT-STATE section-5
mechanism). G2 gate row updated same-commit per GA-R1 rule 8.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA-R1 RATIFIED (operator, amendments C1+C2, question+answer quoted); GA-R2 draft staged
...
C2 folded into rule 1 (measurement beats the document); C1 is new rule 8
(status-changing commits must touch CURRENT-STATE.md -- applied to this
very commit: G2 gate row updated in-line). GA-R2 delivered as DRAFT per
B2. Phase-5 repo-lint check for C1 queued.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA-R5 RATIFIED (operator, amendments B1+B2, question+answer quoted); GA-R1 draft staged
...
GA-R5 Status block records both the question as presented and the exact
ratification utterance per B1's own terms; consolidated text extends
rules 2/5 (B1) and rule 4 (B2, draft-diffability -- this commit itself
satisfies it for GA-R1). GA-R1 delivered as DRAFT with the size budget,
rotation, and as-built division directives baked in.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA-R3 RATIFIED (operator, amendments A1+A2, utterance quoted); GA-R5 draft staged
...
Phase-4 rulings file opened. GA-R3 recorded with the exact operator
utterance in the Status block and the consolidated as-amended text;
implementation queued for Phase 5 (class tags, D-121..129 review, A1
D-129 split). GA-R5 delivered as DRAFT, awaiting ruling.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
G11 SIGNED: operator signature recorded in CURRENT-STATE.md (own commit per directive)
...
Signature block section 11 quotes the operator utterance verbatim; header
status and G11 gate row updated. Signed against the section-10 run at
8cdbf4a (zero divergences).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA register: standing proof-of-push rule (ls-remote hash on every completion report)
...
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA register: record the Phase-4 hold/order/format directive (was in-session only)
...
Operator guard applied: an unrecorded directive is not a directive. The
Phase-4 delivery order (GA-R3, R5, R1, R2, R6, R4, R7, vocab A/B), the
one-per-exchange format, and the hold-until-G11 rule are now in the
register. No GA-R text exists yet; Phase 4 remains HELD pending G11.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA register: Phase-3 ACCEPTED (external review); GA-F02 scope addition (banner demotion)
...
Reviewer cold-verified eight probe-cited lines; 21/21 judged earned.
GA-F02's Phase-5 fix now explicitly demotes the readiness doc's fresh-
session banner to a one-line pointer at the G9 canonical entry path, so
probe hole H1 cannot survive the sweep. Phase 4 HELD pending the
operator's personal G11 pass.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA Phase 3: grounding test PASSED -- 3 probes, 21/21; scorecard + line-neutral amendments
...
Three clean-context probes (repo-only, independent, read-only) each scored
7/7 with citations; all oriented CLAUDE.md -> SKILL -> CURRENT-STATE.md
unaided; all correctly concluded no apply is justifiable today. Zero wrong
or unanswerable items; double-weight rule had nothing to attach to. Holes:
H1 (minor, entry-doc divergence -- G9 row now names the canonical entry
path) + H2 (note only). Scorecard + normalized probe returns:
docs/audit/phase3-grounding-test-20260718.md. CURRENT-STATE.md amendments
are line-neutral (347 lines, within the GA-R1 draft budget). G1 CLOSED.
This amended version is the G11 review copy.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA register: Phase-2 ACCEPTED (external review); Phase-4 drafting directives recorded
...
Operator directives from the Phase-3 dispatch: G11 signs the post-probe
version; GA-R1 gains a ~350-line size budget + same-commit rotation to
as-builts; as-built division of authority (STATUS vs CONFIGURATION-of-
record); probe integrity rules. Recorded pre-dispatch so probes see only
committed state.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA Phase 2: CURRENT-STATE.md -- single status authority (DRAFT pending operator signature)
...
Authored by the fresh-context Phase-2 ground-truth agent from Phase-1
captures, tofu state, live measurement, and git history only (changelog
prose / ledger narrative / memory excluded per charter). Expected outer
plan count recorded as UNRESOLVED pending D-130 (last captured 7/2/7,
pre-reboot gate 5/0/6) per operator direction. 15 open gates, open
decision queue as exact operator questions, measured pin table, cold-
session re-derivation footer. Section 9 reworded token-free (GA-F15).
DRAFT: unsigned until charter Phase-6 item 5. Phase 3 does not start
until Chat review completes.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA-F15: ledger-scan counter self-inflation by audit outputs -- found, reworded, re-verified
...
Phase-2 authoring surfaced that the audit's own records inflated ledger-scan's
mention-derived counters twice (env snapshot wrapped line -> BUNDLEFIX +1;
CURRENT-STATE.md draft section 9 -> DOCFIX +1, inside the sentence claiming
DOCFIX was unaffected). Both surfaces reworded token-free; re-run confirms
true values D=130, DOCFIX=197, BUNDLEFIX=052. Scanner hardening deferred to
Phase 5 per the freeze. Also: GA-F14 addendum (autostart absent from state;
the collapse claim was structurally impossible, per the Phase-2 sharpening).
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA register amendments: GA-F03 evidence pointer corrected; GA-F01/GA-F10 operator directions
...
- GA-F03: the 1.12.3 pin lives at opentofu/README.md:41, NOT root README
(verified by grep; root README carries no pin). Notes the extractor scope
gap (opentofu/README.md is outside the doc scan set).
- GA-F01: authoring direction recorded -- expected plan count is UNRESOLVED
pending D-130; CURRENT-STATE.md must not pick a number.
- GA-F10: the legal stage-status vocabulary is an explicit Phase-4 operator
A/B ruling.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|

GA Phase 1: deterministic record inventory + measured evidence (freeze upheld)
...
- scripts/record-audit.py + tests/record-audit/ (24/24; gauntlet 69 GREEN):
doc census, status-claim extractor, reference integrity. Exit 0 == zero
contradiction groups (the Phase-6 re-run criterion).
- docs/audit/record-inventory.md: 179 files, 858 claim rows, 12 contradiction
groups (plan counts, version pins, stage statuses), reference-rot counts.
- docs/audit/outer-plan-20260718.txt: captured outer plan -- 7 add / 2 change
/ 7 destroy; voffice1 seed volume forces replacement. THE citable
plan-count source from here forward.
- docs/audit/env-snapshot-20260718.md: measured host/guest/toolchain state
(vcloud, -136 bookend done, autostart enable, tofu 1.12.4, MAAS 3.7.2,
LXD 5.21.5).
- docs/audit/grounding-audit-20260718.md: findings register GA-F01..GA-F14
incl. the operator provenance rulings on the two memory files and the
07-16 06:41 churn-mechanism correlation.
No fixes applied; no existing file touched. Findings only, per the charter
freeze. Phase 2 (CURRENT-STATE.md rebuild) starts from this evidence base.
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018ZV3uqyU9oWoFTcwiE4a21
|
GA: grounding-audit charter + proposed skill additions (freeze in effect; audit session charter)
|
Ledger: session-close bookend -- DC0 apply STOPPED, superseded by grounding audit charter
...
Bookend for the 2026-07-18 session. Records what was established (source-verified
autostart bounce path, the /tmp cloudinit root cause, the corrected 3-VM blast
radius), what remains open (D-130 mechanism ruling, verifications 7 and 8, the
doc-integrity list), and points at the full record in
docs/finding-20260718-voffice1-cloudinit-seed-replace.md (43b29d7).
Notes that this session is superseded by a grounding audit charter arriving via
git, to be read first by whoever picks this up.
Nothing applied, no module touched, no state written. Gate before any apply
stands: plan must read EXACTLY 5 add / 0 change / 6 destroy.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YArUfQQe6VasfTvzzb9D6P
|

Findings: post-reboot outer plan would BOUNCE Office1 headend + edge -- DC0 apply STOPPED
...
Read-only orientation + pre-apply re-verification. NOTHING applied, no module
touched, no state written. Records findings only, before any fix work.
WHAT WAS FOUND
Outer `tofu plan` post-reboot = 7 add / 2 change / 7 destroy, NOT the committed
5 add / 2 in-place / 6 destroy in docs/dc0-deploy-readiness.md. The entire delta
is `voffice1` (the live headend), not DC0 scope.
1. DOMINANT RISK -- the 2 "in-place" changes bounce both guests. VERIFIED FROM
PRIMARY SOURCE (dmacvicar/libvirt v0.9.8 internal/provider/domain_resource.go):
Update's only no-bounce path (L1090) requires
`domainConfigUnchanged && runningChanged && autostartUnchanged`. An
autostart-only diff has runningChanged=FALSE, so it falls through to
stopDomainIfRunning -> DomainUndefine -> DomainDefineXML -> DomainSetAutostart.
The guest is STOPPED. Applies to voffice1 AND office1-opnsense.
2. `-refresh-only` CANNOT fix it. Read is self-gating (L938):
`if isImport || (!state.Autostart.IsNull() && ...)`. State's Autostart is NULL,
so autostart is never read back. Matches empirical `grep -c autostart` = 0 on
both domains. (isImport DOES read it -- `tofu import` is a candidate
bounce-free reconcile path.)
3. Seed-volume replacement is STRUCTURAL, not drift. modules/cloudinit-vm chains
libvirt_cloudinit_disk.seed (stages the ISO in /tmp) -> libvirt_volume.seed
(create.content.url = that /tmp path). The 2026-07-17 host reboot cleared /tmp,
so the disk re-creates with a NEW random filename, so the url changes, so the
volume force-replaces -- while attached to the RUNNING domain as sda. The real
ISO is intact. Recurs after every host reboot. Warrants D-130 (next-free
confirmed 2026-07-18).
ALSO RECONCILED
- Bookend item (a) CLOSED (measured): vcloud host patched to 6.8.0-136 and rebooted
2026-07-17; apt clean; no reboot-required. D-127 autostart chain PROVEN by a real
unattended reboot -- both VMs + all 3 SSH targets recovered with zero manual
intervention; base-leg ok, NetBox 302, edge 0% loss. Item (b) STAYS OPEN (edge
guest still on 14.3-RELEASE-p16; a host reboot does not patch it).
- Stage-3 "HELD NetBox addressing" blocker in dc-dc-deployment-workflow.md is STALE.
Measured live against the apex: 172.31.0.0/30 (Transit, scope VR1 DC0), the
172.31.0.0/24 container, and 10.12.8.2/22 all PRESENT. Needs DOCFIX-196.
- Version drift: OpenTofu on the jumphost is v1.12.4; README.md:41 says v1.12.3.
Coincidental to the above -- the cause is /tmp, not the version bump.
TWO OF MY OWN CLAIMS CORRECTED IN-FLIGHT (both were inferences, per hard rule 2)
- Cited platform-traps.md 1e as the warrant for the autostart bounce. 1e was
measured on a MEMORY change and does NOT transfer to an autostart-only diff. The
conclusion held but the reasoning was wrong; replaced with the source evidence
above. 1e's operational rule ("0 to change is the only assurance") stands.
- Claimed the /tmp trap hits "all 9 DC0 node VMs and every containment VM". WRONG,
retracted. libvirt_cloudinit_disk appears in exactly ONE module (cloudinit-vm),
instantiated TWICE (main.tf:181 voffice1, main.tf:361 vvr1_dc0). The 9 nodes use
modules/node-vm = blank-disk PXE, NO cloud-init; edges use REST config (D-113(a2)).
Real exposure = voffice1 + vvr1-dc0 (+vvr1-dc1) = 3.
PRIOR-SESSION ROOT CAUSE
docs/changelog-20260717-d127-iac-autostart-and-guest-updates.md asserts "the 2
in-place collapse to 0 once the bookend sets those two autostart live" and "no
forces-replacement on any existing". Both are FALSE. The collapse prediction was
wrong WHEN WRITTEN, not made wrong by the reboot -- it inferred that `virsh
autostart` would be picked up by refresh, without reading the provider's Read path.
Correcting those assertions is queued as Class 1 doc-integrity work.
OPERATOR RULING (2026-07-18): do NOT proceed to DC0 leaving these behind. Fix
scripts/data/settings to 100% correct first; the post-teardown redeploy must be
error-free from these deliverables.
repo-lint: 0 fail (1 legacy WARN).
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01YArUfQQe6VasfTvzzb9D6P
|