Deferred Decisions (DD)¶
Long-horizon plans that must survive months of silence and wake up when a specific consumer force appears.
In epistemic-engineering terms (see practice note): stems and ADRs answer what is true; a DD answers when residual work may proceed and preserves the full plan so agents implement that plan under force—not a fresh invention from chat archaeology.
GitHub future issues alone are not enough: labels rot, comment threads bury
the plan, and new agents re-derive the wrong design. A DD is a greppable,
versioned doc that records:
- What we already decided (the plan)
- What is already shipped (do not re-litigate)
- Reopen when — concrete consumer signals, not “someday”
- Links to issues / ADRs / prove commands
When to write a DD¶
Write one when you would otherwise leave only an issue comment like:
“Park until consumer force — do not speculative-build.”
Typical cases:
- Umbrella phase leftover after substrate ships (
#1617→#1621/#1622) - Escape hatches pre-committed by an ADR but not productized
- Counter-priors (“never hand-roll
*_type+*_id”) that agents re-discover as “clever” shortcuts
Do not write a DD for ordinary backlog items with a near-term owner.
Lifecycle¶
| Status | Meaning |
|---|---|
PARKED |
Plan is valid; no implement without force signal |
FORCED |
Named consumer landed; implement against the plan |
DONE |
Shipped; issues closed |
SUPERSEDED |
Replaced by another DD or ADR |
Improve / /issues must not implement PARKED DDs (or issues labeled
future that link a PARKED DD) unless status has moved to FORCED.
How agents use this¶
# List parked decisions
rg -n '^status: PARKED' docs/decisions/
# Find plan for an issue number
rg -n '1621|1622' docs/decisions/
# When a consumer appears
# 1. Edit the DD: status FORCED + consumer section
# 2. Comment on linked issues with the consumer path
# 3. Implement; then status DONE
New DD: copy TEMPLATE.md, assign next free DD-NNN, add a row
below, link from the issue body (not only a comment).
Index¶
| ID | Title | Status | Issues | Notes |
|---|---|---|---|---|
| DD-001 | #1617 residuals: poly_ref polish + STI/EAV-as-JSONB | PARKED | #1621, #1622 | Substrate shipped; consumer-forced only |
| DD-002 | Pitch deck generator (dazzle pitch) |
PARKED | — | Removed under ADR-0057; restore from 82c9a8571 when AegisMark regenerates a deck |
| DD-003 | Agent-audience domain brief (domain_brief) |
PARKED | #1629, #1631 | Removed in flense ship C; restore from 003c01392 when a prose-bootstrapped consumer needs it |
| DD-004 | ledger / transaction / atomic constructs + fieldtest_hub |
PARKED | — | Constructs + atomic flows removed in flense ship F; reopen on pennydreadful royalties or cyfuture client money |
| DD-005 | Inbound webhook construct (signature verification, idempotent dispatch) |
PARKED | — | Outbound webhook removed in flense ship D; reopen when AegisMark or cyfuture asks to replace its hand-written webhook route |
| DD-006 | Events DSL (hless/stream/event_model/subscribe/projection/ingest) + Kafka bus + event-transport residue (Postgres/memory buses, /_dazzle/events explorer, live: SSE push, channel outbox) |
PARKED | #1069, #1189, #1676, #1399 | Event core (outbox, inbox, Redis bus) kept; transport parked in flense ship AR (_dazzle_outbox dropped by revision 0025, restore from 5bba9833f); reopen when pennydreadful rights auctions need an ordered or replayable bid stream, a consumer declares live: on, or one needs a Postgres-only deployment without Redis |
| DD-007 | Messaging DSL (message/channel/notification/asset/document/template) |
PARKED | #952 | Email kernel kept; reopen on cyfuture SLA on_breach: notify or AegisMark safeguarding alerts |
| DD-008 | job construct + dazzle worker |
PARKED | #953 | schedule kept; reopen when AegisMark replaces Heroku Scheduler (cohort_analysis) |
| DD-009 | Verified-domain self-service join | PARKED | #1424 | SSO domain verification kept; reopen when AegisMark school email domains need it |
| DD-010 | Process-step AI executor (llm_intent steps in a process) |
PARKED | #1454, #1457 | Never mounted (ADR-0043); removed in flense ship O; reopen when a consumer runs an llm_intent step inside a process |
| DD-011 | Rendering DSL-declared islands (src: / title / fallback:) |
PARKED | — | Only entity: is live (data route); dazzle validate warns since flense ship R; reopen when cyfuture or AegisMark needs a rendered island |
| DD-012 | String translation catalogue (.po/.mo, translate, dazzle i18n) |
PARKED | #955 | Removed in flense ship AB (display-locale profile kept, middleware now mounted); restore from 3844ec995 when a consumer ships .po files |
| DD-013 | Enterprise SSO / SCIM connections (OIDC, SCIM, domain verification, dazzle auth connection; SAML out, broker route) |
FORCED | #1342 | Removed in flense ship AD (revision 0023); operator ruled it a core requirement 2026-10-16; restoring OIDC + SCIM from 23cf59372 per docs/plans/2026-10-16-enterprise-auth-restore.md |
| DD-014 | Two-factor authentication (TOTP, email code, recovery codes, /2fa/* pages) |
PARKED | #829, #838 | Removed in flense ship AG with its two tables (revision 0024); restore from 229226a88 when a consumer declares 2FA or its assurance pack names MFA |
| DD-015 | Multi-source task inbox region (display: task_inbox, task_inbox_config:) |
PARKED | #1015, #1145, #1232, #1303 | Removed 2026-10-16 after AegisMark fb673bc8 dropped its last use; HM task-inbox Hyperpart kept; restore from a112b3d34 when a consumer needs one landing list across entities |
Related¶
- ADRs:
docs/adr/(accepted architecture — use when the system decision is final) - DD: plan + force conditions when the timing of work is deferred
- Representation hatches:
docs/reference/data-representation.md - AGENTS.md — Deferred decisions bullet under ship / agent discipline