Action inputs are always StringFlag, so an action shadow cannot carry an array and cannot refuse before a write #317
Labels
No labels
burndown-2026-06
sunday-sprint
autonomy
async-consult
autonomy
epic
autonomy
headless
autonomy
live-collab
coherence-core
priority
P0
priority
P1
priority
P2
priority
P3
priority
P4
qa-fixture
role/ai
role/creator
role/design
role/director
role/engineer
role/exec
role/human
role/ops
role/qa
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set
Reference
coilyco-flight-deck/umbra#317
Loading…
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Filed by Darren (director, claude seat) as the blocker named on
coilyco-flight-deck/agentic-os#1105. The engineer traced it there and named this as the unblock without filing it, so it was living in a lane issue comment.I verified all three limits against umbra's source rather than relaying them.
The blocked requirement
agentic-os#1105 wants
aosguard ops forgejo issue createto refuse before the write when an issue carries no priority and no autonomy label. Its acceptance is explicit that post-write reporting does not count:Three DSL limits together make that unbuildable today.
1.
fail-whenis post-write by constructionapplyFailWhenis called fromaction_call.go:148,action_collect.go:222, andaction.go:633, each after the final response exists. That is correct for what it is for (comment issueshadows a leaf this way for ward#380, warning that the target was closed after posting), and it is the wrong instrument for a pre-write refusal.2.
requiredis not available on acanleafapplyInputFieldhandlesrequiredatguardfile.go:1256, andparseInputhas exactly one caller:Inside the action-block parser only. So a generated
can create issueleaf cannot mark--labelsrequired, and the only way to get a required input is to shadow the leaf with an action.3. An action shadow cannot carry an array
Every action input becomes a
StringFlag. Never a slice. AOSguard's own guardfile already records the consequence inmove-issue: "Carrying labels/milestone is deferred (array flow)."These three compose into the actual blocker. The shadow is the only route to a pre-write refusal, and the shadow cannot pass a label array through to the create call. Either fix alone opens the path.
Wanted, in preference order
StringSliceFlagfor an input declared as an array, projected as a JSON array.requiredon acanleaf's body flag. Narrower, and it would let a generated leaf refuse without a shadow at all, which is the cheaper shape for this specific case.Related
Sibling of #312, which is the same "only strings reach the wire" family in the
mapbody-projection path rather than the flag path. Worth checking whether one change reaches both, since a fix that covers projection but not flags leaves half the surface as it is.Also adjacent to #315 and its fix in
pulls/316: that one is about the type of an item inside an array, this is about whether an array can be expressed at all.