session TTL fell from 24h to 12h in prod
Reconciliation & Drift
Atomic primitives in the reconciliation & drift family. Click any tile for the live render, the spec it was built from, and the code that fell out.
DRIFT-072 / SPEC-038
Session TTL drifted from 24h spec to 12h prod after security review tightened the policy. Intent matched, spec lagged.
Change request arrived outside the active spec on surface checkout.tax-rounding.
Spec is fundamentally correct. Add the missing acceptance criterion and re-validate.
Intent has materially moved. Update the spec, then re-validate against existing assurance.
- 1. rewrite spec from current intent
- 2. rebuild assurance suite
- 3. recompose implementation
root cause dependency upgrade narrowed default TTL
70%REGRESSION
18%UNKNOWN
12%
Step 7 chose to expire sessions at 12h to reduce risk — but spec mandates 24h for UX.
// codebase audit · auth/
Every handler silently rejects emails with leading dots. No spec mentions this rule. Six services have learned it by copy-paste.
Each drift event is tagged with exactly one cause from this closed set.
// inbox · CR-2041
Field-team request: add a hard cap on weekend retries. No matching acceptance criterion in any active spec. Awaiting routing verdict.
- SMALL 0–25 PLAN-AMEND
- MEDIUM 26–60 SPEC-UPDATE
- LARGE 61–100 RE
// routing decision
request CR-2041 · gap 78
// routing decision
request CR-2042 · in-spec
// routing decision
amends SPEC-038 · gap 42
requested by @author Weekend retry storm flooded the queue; cap retries at 3/hour per tenant.
// inbox row
CO paused pending RE
RE-0118 · spec-038 under reconciliation
// timeline · 2026-05-21 14:02
RE-0118 returned verdict: spec amendment merged, intent preserved. Composition queue resumes on next tick.
// routing tree · node 02
// SPEC-038 amendment · from CR-2041
new acceptance criterion
Retries are capped at 3 per hour per tenant on weekend windows.
// SPEC-038 amendment · from CR-2042
new spec section
## Weekend Retry Policy
// router verdict · RE-0118
RECOMPOSE
REQUIRED
// plan · PLAN-2026-W21
Small-gap fold: weekend retry cap incorporated as a task on the active plan. Spec untouched, ICS unchanged.
Routed change to SPEC-038 contradicts an active criterion in SPEC-019.
// batch BATCH-2026-W21 · 5 changes
recommended
SPEC-UPDATE
fold into active spec
alternative
RELEASE REVIEW
ship as-is, no spec change
// CR-2041 · reassigned
routed verdict requires governor sign-off
// change ledger · append-only
// src/billing/proration.ts
Prorate refunds to the nearest minute when a customer downgrades mid-cycle — recovered from three years of bug fixes and one handwritten comment on line 41.
Refund Proration
Prorate refunds to the nearest minute when a downgrade occurs mid-billing-cycle.
SPEC-114 · meta
id: SPEC-114
status: implemented
review: pending
surface: billing/proration.ts
All handlers strip leading dots from email addresses before lookup.
e.g. auth/login.ts:24
it('refunds to whole minute', () => {
expect(refund(29)).toBe(25)
}) --- id: SPEC-114 status: implemented owner: @author ---
- INTENT TODO
- ACCEPTANCE TODO
- FAILURE MODES TODO
Spec backfill is queued — intent here is contested across at least three teams.
Round refunds to whole minutes
Customers complained that 28-second slivers got tossed. This change rounds DOWN to whole minutes during proration.
SPEC-114 · billing/proration.ts
Recovered intent reviewed across three sessions, characterisation tests green, no contradictions surfaced. Cleared for stable.
pattern: retry-with-jitter
- SPEC-012
- SPEC-038
- SPEC-051
- SPEC-077
// candidate · retry-with-jitter
writes conventions/retry.md
requires @governor approval
--- id: CONV-014 owner: @governor scope: all-handlers --- # Retry With Jitter Rule: all outbound calls retry with exponential backoff + 20% jitter.
- scope all auth handlers
- scope lib/http/*
- scope this spec only
all UUIDs are lowercase before persistence
CONV-007 · http-retry-naive
Retry 3 times with fixed 200ms delay. Superseded by jittered exponential backoff for outbound calls.
3 specs → 1 convention · @governor signed
- CONV-014 activeretry-with-jitterscope: all-handlers · @governor
- CONV-019 reviewno-retry-paymentscope: pay/* · @gatekeeper
- G @governor owner
- G @gatekeeper approver
- A @author requester
- ✓ pattern present in ≥3 specs
- ✓ precision score ≥ 70
- ✓ scope selector is concrete
- … governor signature attached
- × no conflict with active conv.
pinned by @author · upgrade requires @governor
idempotency-key on all POST handlers — observed in 5 specs
Contract gap
GET /v1/users/{id}/groups
array<{id, name, role}> “User IDs are stable for the lifetime of an account and are never re-issued.”
Trail row
callers retry on 5xx with no backoff — assumed idempotent.
Archaeology closed
identity user-id stability contract, between billing-svc and identity-svc
filed 2026-05-22 · @architect
The framework is real.
The community is forming now.
DoCoDeGo is in Alpha. The framework is documented, the practices are battle-tested at small scale, and the next release is being shaped in public.
If it produces anything, it should produce engineers and teams who think more clearly about what they are building and why.
Discord is where specs are debated, the framework gets sharper, and decisions land in writing. The conversation is the artefact.