Continuous-maintenance index for in-process spine tenants.
Typed catalog: lib/harness/maintenance.ts · registry: spine/tenants.ts.
Daemon: bun run spine:schedule · once: bun run spine:schedule:once · --tenant=<id>
Each active tenant must have signal · intervention · proof · retirement (retirementVerified: false):
tenants/docs-integrity.md — claim docs-integritytenants/install-verify.md — claim install-verify-journeyTo retire a tenant:
tenants.<id>=true in lib/harness/ci-owned-tenants.json once CI/operate owns the periodic re-proof.retirementCheck passes (bun scripts/retirement-check-ci-owner.ts --tenant=<id>).RETIRED_TENANT_RUNBOOKS with retirementVerified: true and remove it from SPINE_TENANTS / SIGNAL_MONITORS in the same PR (keep spine-multi-tenant ≥2).retirementCheck for every tombstone and rejects the commit if it fails.Closed maintenance loop — each edge is machine-checked by bun run test:tenant-runbooks:
TenantRunbook.proofId → ProofPath.id — why the tenant existsassertRunbookProofLinksTenantRunbook.tenant ↔ SPINE_TENANTS — no orphan docs, no undocumented tenantassertRunbookTenantLinksretirementVerified: false; remove from spine only by moving to RETIRED_TENANT_RUNBOOKS with retirementVerified: trueassertRetirementEnforcementretirementCheck; tombstones execute it (command and/or proof freshRerun must exit 0; missing check warns)assertRetirementCheckShape · assertRetirementConditionCheck · ci-owned-tenants.jsonpackage.json schedule scripts / GHA cron: map to a tenant + runbook or an explicit exemptionassertScheduledJobCoverage · lib/harness/discover-scheduled.tscheckCommand) + alertChannel; spine-tick probes name --tenant=assertSignalMonitorTenantLinks · assertSignalMonitorFields · lib/harness/signal-monitoring.tsassertSignalMonitorAlignedWithRunbooklastCheckPath exists, observation age ≤ maxAgeMinutes (SIGNAL_MONITOR_FRESHNESS=strict requires the file)assertSignalMonitorFreshness · ticks: reports/spine-tenant-ticks.jsonldocPath markdown — human signal · intervention · retirement sections## Signal / ## Intervention / ## Retirementintervention contains linked proof freshRerun — first repair step is the claim commandassertRunbookInterventionContainsProofFreshRerun`bun …` resolve (bun run script / file path); no shell metacharacters; allowlisted headsassertInterventionCommandsValid · lib/harness/intervention-validity.tssignal · intervention · retirementassertRunbookFieldsNonEmptyfreshRerun executes — each docs:tenant-* (or catalog command) exits 0assertRunbookFreshRerunsPassproofId’s freshRerun exits 0 (deduped)assertLinkedProofFreshRerunsPassDay-loop / CI code-health tenants use the same runbook shape but are not in SPINE_TENANTS:
→ code-quality.md · bun run test:code-quality · claim code-quality-tenants
Required CI envelopes and deploy scripts:
→ ci-deploy.md · bun run test:ci-deploy · claim ci-deploy-runbooks
Production SPINE_TENANTS are not mutated. A fixture tenant (heal-fixture) lives under tests/fixtures/tenant-heal/ and is copied into .cache/journey-tenant-heal/ for the journey:
check exits 0health.json ok: falsecheck exits non-zerofix restores healthcheck exits 0Ratchet → bun run test:tenant-heal · claim spine-tenant-heal · lib/harness/heal-fixture.ts
Included in bun run test:tenant-runbooks.
bun run test:tenant-runbooks · claim spine-maintenance-runbooksbun run test:tenant-heal · claim spine-tenant-healbun run docs:spine-tenants (this index + live registry)bun run docs:spine-tenants
bun run test:tenant-runbooks
bun run test:tenant-heal
bun run docs:tenant-install-verify
bun run docs:tenant-docs-integrity