Address the root cause of rework-causing hedging: the architect was
put in a logical bind where it couldn't express justified uncertainty
('the pieces exist but the shape isn't clear yet'). The only options
were 'decide now' (premature) or 'deferred(scope)' (false — the
information isn't missing, it's un-synthesized). The agent picked
deferred(scope) with a circular blocking condition (OQ-64 blocked on
OQ-55, OQ-55 needs OQ-64) because there was no honest way to say 'I
can see the pieces but I can't see the shape.'
Changes to the architect role spec:
- Add deferred(unclear) state: the pieces exist but the composition
isn't clear; resolution requires investigation (work through
examples, POC), not waiting. Has an investigation target and an
impacts field.
- Add 'Impacts' field to the OQ format: what does this block
downstream? Be specific ('blocks the first hub deployment because
the hub dials workers' not 'blocks the hub crate'). The triage
signal that makes deferral urgency visible — the field that would
have made the AlknetClient circular hedge visible.
- Add circular-reasoning guard to self-review: 'check that your
blocking condition isn't a prerequisite of the thing you're
deferring.'
- Trim anti-patterns #9-#11 (hedging synonyms catalog, ~40 lines):
detection belongs in the reviewer, not the architect's self-review.
The architect is too close to its own reasoning to see its own
circular hedges.
- Trim door-types section (30→10 lines): keep the one-paragraph
summary, cut the elaboration.
Changes to the architecture-reviewer role spec:
- Add Decision Quality (F) category: false-deferral check
distinguishing three cases — (1) hedging on a resolved decision, (2)
false deferral / circular hedge (the blocking condition is a
prerequisite of the thing being deferred), (3) legitimate deferral.
- Add Impacts Field Coverage (G) category: check that unresolved OQs
have specific impacts fields.
- Note: the Decision Quality category is often the highest-value
check on poorly-defined projects — the architect cannot self-review
it (circular reasoning is invisible from inside the circle).
Retrofit existing OQs:
- Add Impacts field to all 16 unresolved OQs (10 deferred, 6 open).
- Update OQ-63 (TlsError shape) to reflect ADR-087's client-side
addition — the error type now covers both server and client
variants.
- Move OQ-65 (WebSocket carrying channels) to alknet-http theme
(done in prior commit; this commit adds its impacts field).
- Verified: no circular reasoning found in existing deferrals. The
AlknetClient hedge (OQ-64) was the circular one; it's already
resolved by ADR-087.
2.2 KiB
2.2 KiB
OQ-51: Container Create Options Surface
- Origin:
crates/docker/docker-operations.md
§"Out of scope for v1";
crates/docker/docker-operations.md
§"
docker/container/create". - Status: deferred(scope)
- Door type: Two-way
- Priority: medium
- Impacts: Blocks the full
docker/container/createinput schema — v1 uses the high-frequency fields; the long tail (mounts, port bindings, networks, volumes, capabilities) is deferred to the implementation pass. Does not block thecreateoperation itself (ADR-060 §5 is decided); blocks the schema detail. - Blocked on: v1 implementation. The v1
createinput schema accepts the common fields (image, command, env, labels, name) and the fullCreateContainerOptionssurface (mounts, port bindings, networks, volumes, capabilities, etc.) is deferred to the implementation pass, where the input JSON Schema can be designed against bollard'sConfigstruct and tested against real create calls. This is not an architectural decision (thecreateoperation is already decided — ADR-060 §5); it's a schema-detail decision best made with the bollard types in hand. - Resolution: Not yet decidable. bollard's
create_containertakes aConfigstruct (container.rs:296) with ~40 fields (Image,Cmd,Env,Labels,HostConfigwith mounts/ports/ networks/etc.). The v1 input schema accepts the high-frequency fields and omits the long tail; the full surface is a JSON Schema design task (which fields are required, which are optional, howHostConfigis nested, how thealknet.*labels merge with caller labels). The deferral is to the implementation pass, not past it — the schema is finalized whenregister_docker_opsis written and tested. TheOperationSpec.input_schemais the one-way surface; its exact field set is a two-way-door refinement within it. - Cross-references:
ADR-060
§5 (
createrecords ownership — the architectural decision this OQ defers the schema details of), crates/docker/docker-operations.md §"docker/container/create"