Skip to content

Spec 083 frame evidence: conversation-scan under-fires for flow-style owners #108

Description

@PinkException

Field report against spec 083 — Capturing decisions settled mid-session
(IN_PROGRESS). Posting as an issue rather than a PR because 083's frontmatter
carries frame_review: true"Phase 2 widens the load-bearing premise (recall
vs scan) — frame-critique the new premise before READY_FOR_REVIEW (ADR-0020)"

and this is evidence bearing on exactly that premise. It's yours to weigh, not
mine to pre-empt.

Reported from a live session on a downstream scaffolded project
(project-dashboard), 2026-07-16, owner in permission mode Auto. Upstream
files confirmed identical to the scaffolded copy that failed — the markers at
decision_scan.py:41-42 match byte-for-byte.

What happened

I said, verbatim: "It's too long for laptop views...."

That's a UI decision superseding the 1100px cap chosen in that project's slice
012-01. That project's refinement-todo.md even names the trigger explicitly:
"Resolution trigger: Owner tunes the value in-browser against the live data."
The trigger fired. The agent changed --card-cap: 1100px → 720px.

Contents of .jig/decision-scratch/<session>.log afterwards, in full:

{"quote": "How hard should the guardrail be on ad-hoc edits to this project's source (public/, src/)? Enforcement Hard block ...", "source": "askuserquestion", "who": "user"}
{"quote": "How hard should the guardrail be on ad-hoc edits to this project's source (public/, src/)? Enforcement Hard block ...", "source": "askuserquestion", "who": "user"}

Two identical entries, both quoting the agent's own question, which I
dismissed. My actual decision was never captured. Neither was the code change
that encoded it.

The part I'd most like you to look at

Not the regex gap — the selection bias. Tier 1 (AskUserQuestion) is the
only high-precision tier, and it fires only when the agent opens a formal
dialog. An owner who works in flow and dismisses those dialogs generates ~zero
Tier-1 events. So capture is weakest for exactly the owners who most need it, and
the log fills with the questions they rejected. That's the observed outcome above,
and I don't think it's specific to me.

The Tier-2 net (decision_scan.py:38-45) is five regexes — should not,
instead, actually, override…default, reverse…default. Natural owner
phrasing — "it's too long for laptop views", "make the cards shorter",
"that's too big", "no, smaller" — matches nothing. The comment at :36-38
argues actually is high-signal, and I think that's right; the failure mode
here isn't false positives, it's the false-negative floor, which is currently
unmeasured.

Third, capture never writes: jig-decision-capture.sh surfaces candidates as
additionalContext and says so explicitly ("it never writes a decision
itself"
). Persistence depends on the agent attending at Stop. In this session it
didn't.

A direction — with the objection I can't answer

The obvious move is to stop asking the conversation whether a decision happened
and ask the diff instead: a PostToolUse trigger on Edit|Write|MultiEdit
that appends a stub with source: "code-change". Durability would come free from
083-07, which already re-surfaces un-recorded stubs until something covering them
is written down — so the nag targets the agent and the owner sees nothing new.
append_stub's signature already takes an arbitrary source.

But I don't think that survives its own argument, as stated. Widening the
Tier-2 regexes is the wrong move because it trades a false-negative floor for a
false-positive flood — and edit-anchoring is a false-positive flood by
construction. Most source edits encode no decision at all; they're just
implementation. The defense is that the flood lands on the agent, not the owner —
but that's only free if agent attention is free, and specs 055/057 say it isn't
(orchestrator context × turns is the cost). Worse: since a stub only clears when
a covering entry exists, a routine edit produces a nag that can never be cleared,
and the predictable agent response is to write junk entries to silence it or to
learn to ignore stubs — which degrades the 083-07 machinery the idea leans on.

So if there's something here, I suspect it's the narrower version: stub only
edits that change an existing value or constant, not edits that add new code.
That's much closer to what actually happened — a 1100px cap being overwritten
with 720px, against a recorded decision.

Constraints from my side (as the downstream user)

  • I run Auto deliberately and trust the agent to write. Per-edit permission
    prompts are a non-starter for me.
  • What I actually need: when we change something that contradicts a previous UI
    decision or mockup, it gets persisted — so we don't rewrite it and ask for the
    same modifications again tomorrow.
  • So: no new interruption surface for the owner.

Open questions for you

  1. Scope. Which paths are "decision-bearing"? jig is layout-agnostic, so this
    probably needs a default plus a config key. Deciding this well is most of the
    work, which is a large part of why this is an issue and not a PR.
  2. Division with 083-06. The reconciliation/memory-sync judgment prompt is
    currently the designated owner of "trigger-phrase-free load-bearing decisions."
    Anything diff-anchored overlaps it deliberately — 083-06 relies on agent
    judgment at reconcile time, this would fire deterministically at edit time.
    What's the intended split?
  3. 083-08 (Codex host-validation) is DRAFT/deferred — would a new
    PostToolUse trigger need host validation on Codex before it could ship?

Cheap measurement that would settle most of this

Replay N archived sessions that ended in a committed source change and count how
many produced a stub. For flow-style owners I'd expect near zero today. That turns
"the net has holes" from my anecdote into a number, and it'd also show whether the
narrow value-change variant keeps the precision.

Happy to do the work on a slice if you want it, once 1 and 2 are settled — but
this is your spec and your frame review, so I'd rather hand you the evidence than
guess at the design.

Activity

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't workingenhancementNew feature or request

    Projects

    No projects

      Milestone

      No milestone

      Relationships

      None yet

      Development

      No branches or pull requests

      Issue actions