Skip to content

ADR-010: feature-registry and parking-lot stay separate with an explicit handoff

Example from HELIX’s own docs. This generated page comes from docs/helix/. Use it to see the method in practice; start with the artifact-type catalog for reusable templates. Historical plans and reports may describe retired architecture.

ADR-010: feature-registry and parking-lot stay separate with an explicit handoff

DateStatusDecidersRelatedConfidence
2026-05-30AcceptedHELIX maintainersfeature-registry, parking-lot, frame-phase catalogHigh

Context

AspectDescription
ProblemThe artifact-type audit flagged feature-registry and parking-lot as similarly-shaped registries in the frame phase, raising the question of whether they should collapse into a single registry distinguished by a status enum.
Current Statefeature-registry is the source of truth for accepted features (FEAT-XXX, owners, priorities, status progression from draft through deployed/deprecated/cancelled). parking-lot is a separate registry for deferred or future work, keyed by Source and Revisit Trigger and explicitly outside current scope. They share a type: registry classification and live in the same activity, but encode different lifecycle states and serve different operator decisions.
RequirementsThe catalog must either (a) merge the two into one registry with a status discriminator, or (b) keep them separate with a documented handoff so the boundary the operator triages on stays visible and tracker-relevant.

Decision

feature-registry and parking-lot remain separate artifacts.

parking-lot is the staging area for deferred or future work — items kept visible but outside current scope until a recorded Revisit Trigger fires. feature-registry is the source of truth for accepted features that are in the active pipeline (draftspecifieddesignedin_testin_buildbuiltdeployed, or terminal deprecated/cancelled).

Handoff between the two is explicit: a parking-lot entry promotes to feature-registry when its revisit criteria are met. The promotion is a recorded transition (assign next sequential FEAT-XXX, set initial status, link back to the parking-lot source), not an implicit merge or status flip inside a single registry.

Key Points: deferred vs accepted is a real lifecycle boundary | promotion is a recorded transition, not an implicit merge | the operator triages on the boundary, so the boundary must be visible in the artifact shape

Alternatives

OptionProsConsEvaluation
Collapse into one registry with a deferred status valueOne file, one schema, one prompt; removes “similar shape” duplicationLoses the triage boundary the operator uses; mixes accepted features (with owners, priorities, dependencies) with deferred items (with revisit triggers); forces every consumer to filter by status before readingRejected: collapses a real lifecycle distinction
Keep separate, leave handoff implicit (current state)No new procedure to documentPromotion happens ad-hoc; no recorded link between parked source and registered feature; the audit’s “same shape” concern persistsRejected: the handoff is the thing that makes separation safe
Keep separate, document an explicit promotion procedurePreserves the lifecycle boundary; makes the transition auditable; addresses the audit’s concern without mergingRequires Phase 3 to document the promotion procedure once and cross-reference it from parking-lotSelected: smallest sufficient fix that keeps the boundary real

Consequences

TypeImpact
PositiveThe deferred/accepted boundary stays visible in the artifact shape, matching how operators triage.
PositivePromotion becomes a recorded transition with a back-link, so traceability survives the handoff.
PositiveThe audit’s “same shape” concern is resolved by procedure, not by losing structure.
NegativePhase 3 owes the promotion procedure write-up in feature-registry, with a cross-reference from parking-lot.
NeutralBoth artifacts keep their existing type: registry classification and their existing prompts/templates.

Risks

RiskProbImpactMitigation
Promotion procedure documented in one place but not cross-referenced from the otherMMPhase 3 acceptance requires both ends — feature-registry owns the procedure, parking-lot links to it
Operators bypass the procedure and recreate parked items in the registry without back-linksMMThe promotion step records the parking-lot source as the first dependency/trace link on the new FEAT-XXX
Future audit re-raises the “same shape” question after the procedure rotsLLThis ADR is the durable answer; future audits cite it instead of relitigating

Validation

Success MetricReview Trigger
feature-registry documents the promotion procedure exactly onceProcedure is duplicated in parking-lot rather than cross-referenced
parking-lot’s prompt cross-references the promotion procedureA parked item is promoted without a recorded back-link to its parking-lot source
Promoted features carry a recorded link back to the parking-lot entry that sourced themOperator triage cannot distinguish “deferred” from “accepted” at a glance

References

Innsigle seal: model-primary by HELIX

The signature covers the markdown source of this page, not these HTML bytes. This page quotes that seal; verify it against the source file.

Composition
model-primary
Issuer
HELIX helix
Signing key
ed25519:b0865d76d834a52c48506414d16f4e5a (build key)
Signed source
artifacts/adr/ADR-010-feature-registry-parking-lot-handoff.md
Signed
2026-09-23T14:11:58Z
Content digest
sha256:e275243d…ddb11231

This build key is endorsed by the human key for build signing; the signature is not a detector and not a truth guarantee.

Raw attestation JSON
{
  "payload": {
    "innsigle": "1",
    "type": "https://innsigle.dev/claim/colophon/v1",
    "issued_at": "2026-09-23T14:11:58Z",
    "issuer": {
      "id": "helix",
      "name": "HELIX",
      "key_id": "ed25519:b0865d76d834a52c48506414d16f4e5a",
      "key_url": "https://documentdrivendx.github.io/helix/.well-known/innsigle/keys.json"
    },
    "subjects": [
      {
        "uri": "https://documentdrivendx.github.io/helix/artifacts/adr/ADR-010-feature-registry-parking-lot-handoff/",
        "digest": {
          "alg": "sha256",
          "value": "e275243d66e1bb401b98013f620f693a1f9c1fd73bcb141477a323e2ddb11231"
        }
      }
    ],
    "colophon": {
      "schema_version": "1",
      "composition": "model-primary",
      "ingredients": [
        {
          "kind": "model",
          "name": "Claude",
          "role": "draft"
        },
        {
          "kind": "tool",
          "name": "sloptimizer",
          "role": "rewrite"
        },
        {
          "kind": "human",
          "name": "operator",
          "role": "structure-edit"
        }
      ],
      "notes": null
    }
  },
  "payload_encoding": "json",
  "signatures": [
    {
      "key_id": "ed25519:b0865d76d834a52c48506414d16f4e5a",
      "alg": "ed25519",
      "sig": "eHvYkwZl2qoXvhpb1s-HrTmMCdBv8dgf0hW-12KgwtzVN1FybPo08jWeg63culAf4ULHoRNQHtpRUtTFCGHuCQ",
      "signed_at": "2026-09-23T14:11:58Z"
    }
  ]
}