Development record
The product thinker answers a stop in a medium they already use, and answers it whenever they get to it
Press Release
Seeded from a quoted-text intent capture. Expand into the full press-release narrative before planning.
Why This Matters
The product thinker is not at a terminal, and requiring them to be there reimposes the constraint this framework exists to remove. A stop that reaches them is answered later, by someone who was not present when it was raised, through a surface they already use.
That makes a stop a durable artefact rather than a prompt: it serialises whole, carries its options with it, outlives the session that raised it, and is resumable by whatever answers it. The loop parks on it and continues elsewhere rather than blocking. The synchronous command-line prompt is the first implementation of that contract, not the contract itself (adr-2609151528057260).
Selection over composition is what makes this possible at all: an option set survives a round trip through a web page or an app, and a request for free prose does not.
This does not remove the mediated case, it names it. The command line is the facilitator's surface and a human facilitator works there always, while the product thinker does not work there at all. The two are often in the same room or the same call, with the facilitator reading a question aloud and entering the answer given back. That path stays valid and needs nothing new. What this intent adds is the path where nobody relays: the product thinker answers directly, in their own medium, whenever they get to it, and the loop neither waits at a terminal nor depends on a facilitator being awake.
Whatever the product thinker's surface renders, it renders under the same bounds the register sets: three options at most, a null answer always available, no option marked as preferred, and an explicit statement that no recommendation is being made where the question is a judgement rather than a fact. A surface that quietly reorders options by a score, or that drops the null answer for lack of room, breaks the rule while appearing to keep it.
Acceptance Criteria
Required (the itd-1 discipline): add at least one Given-When-Then bullet describing the verifiable bar for "shipped" before this draft can be planned.
SOTA
Surveyed on 2026-10-23; sources, evidence tiers and the local fit risks are in the autonomous-loops SOTA note.
- The forge already has a durable, role-addressed approval. A GitHub environment's required reviewers hold a job in "Waiting"; one of up to six approves, a rejection fails the run, and a run waiting on approval is cancelled when it reaches the 35-day workflow-run limit, which "includes execution duration, and time spent on waiting and approval" (Actions limits; the 30-day failure is stated only by the Enterprise Server 3.5 page). It is yes-or-no, not three options with a null answer.
- Chat buttons notify; they do not store. Slack must be acknowledged within
3 seconds and a
response_urlworks five times within 30 minutes (Slack docs); the answer has to land in a store of abcd's own. - A phone needs no app store. Web Push retains a message at the push
service for a
TTL, carries anUrgency, and guarantees a 4096-byte payload (RFC 8030); iOS and iPadOS 16.4 deliver Web Push to home-screen web apps with no developer-programme membership, on a user gesture (WebKit blog). The push carries the stop's id; the page fetches the options. - The host's own media are bound to a live session or to its vendor. A
PushNotificationtool reaches a phone through the vendor's infrastructure when remote control is connected; channels (Telegram, Discord, iMessage) push into a running session only while it is open, and-pdisables multiple-choice questions so the session never stalls (Claude Code docs). - Waiting indefinitely is normal. LangGraph's interrupt "waits indefinitely until you resume", and the OpenAI Agents SDK serialises a durable run state whose approvals "may sit for a while" (framework docs). Escalation after a timeout exists but is configured, with a 30-minute default and a repeat count (PagerDuty docs); the ruling that it is off by default stands.
Path 2: the medium is an adapter over the stop record of itd-169; the record is the truth, each medium is a notification plus one way to write an answer back. First adapter: the web page with Web Push for reaching a phone, as decided, and MCP's URL-mode elicitation (specification 2025-11-25) as the standard way an MCP client hands the person to that page: the server sends a URL, the client shows it and gets consent, and a completion notification follows, which pairs with itd-169's record; second: the forge's approval, the only other medium that is durable and role-addressed on its own, linking to the page for the choice. The Web Push sender (VAPID and payload encryption) is a Go dependency wherever it is built; it belongs in the relay, not the binary, and needs explicit sign-off either way. A relay-notified phone sits against the local-only stance on agent messaging; the plan-time fit-challenge must say where that stance ends. The independent fit-challenge runs at plan time.
Open Questions
Decided 2026-08-29 (product thinker). The first surface is a web page the product thinker opens when they have time, with the loop carrying on meanwhile. The mediated path, where a facilitator reads a question aloud, stays valid and is not replaced.
- (SOTA 2026-10-23) Where the Web Push sender lives (the relay or the binary), given that it needs a dependency for VAPID and payload encryption, and how a stop's answer written from the page reaches the record on the machine that raised it.
- (SOTA 2026-10-23) Whether the forge's required-reviewer approval becomes the second adapter, carrying only the acknowledgement and linking to the page for the three options.
Audit Notes
Empty. Populated by intent-auditor when intent moves to shipped/.
Frontmatter
| id | itd-167 |
|---|---|
| type | intent |
| lifecycle | drafts |
| severity | minor |
.abcd/development/intents/drafts/itd-167-the-product-thinker-answers-a-stop-in-a.md
open on GitHub ↗ · commit history ↗
Referenced by1
- adr-2609151528057131abcd owns the product thinker's surfacerelated
mentions6
- adr-2609151528057260Three roles, who each artefact addresses, and when the loop stops
- dcn-26092200000000032026-09-22 — The control-programme idea is REFRAMED, not adopted as put (product thinker, after the ideate gauntlet; research/notes/2026-09-22-ideate-abcd-operator-console.md). Two kill attempts were fatal to the idea as stated: it named the product thinker as the configurer of operator-register material, which adr-2609151528057260 bars, and it made harness-less operation the destination, inverting the host-delegated boundary whose reversal itd-2609201916151817 records as opt-in only. The reframing, adopted: an operator console SERVED BY THE BINARY over local web (no new dependency), which is also the resident process that hosts the opt-in process driver, with a separate product-thinker pane in their own register (open stops, the plain-language verdict, the pace) — the web page itd-167 already decided on; configuration stays operator-side; many repositories waits for a registered-checkout store; a localhost surface that accepts secrets needs a per-launch token; the whole sequenced after the runner and routing intents; and it must carry a falsifier, since no evidence exists that a GUI control plane beats a CLI plus a status page. Ruled with it: where abcd runs as the binary with no host session, the fallback is a HOST THE OPERATOR CONFIGURED (their main connector), never nothing; and EVERY fall back to the host is recorded — a receipt per event and a count per runner and per role in the run record — as intel on what to improve (itd-2609201916056194, planned; itd-22 widened so that "any harness" includes none).
- iss-2610262043114601itd-168 claims the plain-language-and-options defaults for how abcd talks to the product thinker; shipped itd-201 already fixes them.
- itd-1Every Intent Has Acceptance Criteria; Every Audit Verifies Them
- itd-169An agent loop that stops says who it is asking and what it needs, and never simply halts
- itd-201Every question abcd's agents put to a human is asked one at a time, in plain language, with options that widen