Development record
abcd owns the product thinker's surface
Context
The framework's working position has been that abcd does not render an interface. The host harness owns the pixels, the spinner, the dialogs and the status line it lets others draw on, and abcd owns the words. The reasoning was sound: an opaque host banner is not something a configuration layer can fix by drawing its own, and claiming otherwise would have been the strong form of a metaphor the project deliberately held at arm's length.
ADR-2609151528057260 changes what that position costs. The facilitator is a machine by default, the agents stop only to obtain a verdict, and a question the product thinker must answer travels to them rather than waiting at a terminal. The command line is the facilitator's surface, and the product thinker does not work there.
In this repository that gap is invisible, because one person occupies both roles and can read a question off the terminal. That is the unusual case. For the product thinker this framework is built for, there is no facilitator in the room to read anything aloud, and no reason for them to have a terminal at all. Under the old position their questions would reach them through a surface owned by a harness that knows nothing about roles, or not reach them at all.
Decision
abcd owns the product thinker's surface. A stop addressed to the product thinker is delivered through a surface abcd is responsible for, rendered in the register that role is owed, and answered there.
The original position holds everywhere else. abcd does not render the facilitator's interface: the harness owns that, the command line remains where a facilitator works, and nothing here licenses abcd to draw a developer-facing interface it has no business owning.
The mediated path is not replaced. Where a human facilitator and a product thinker are together, the facilitator reading a question aloud and entering the answer stays valid and needs nothing new.
Consequences
The product thinker's surface becomes a thing abcd builds, deploys and keeps working, which is a materially larger commitment than a configuration layer carries today. It is the first artefact abcd owns that a user does not obtain by installing a binary into a repository.
Delivery to that surface is asynchronous by construction, so the stop protocol must serialise a question whole, carry its options, outlive the session that raised it, and accept an answer that arrives later from somewhere else.
The narrower position is harder to hold at the edges than the original absolute one. A refusal, a banner and a status line are all words at a terminal, and the line between explaining a stop to a facilitator and rendering a product thinker's interface will need judgement rather than a rule.
Alternatives rejected
Keep the absolute position. Coherent, and it leaves the framework's target user with no way to be asked anything, which makes the loop unclosable for everyone except the person who also happens to be the facilitator.
Treat the product thinker's surface as a separate product. Preserves the position by definition rather than by argument, and the dependency remains: the framework's central claim would rest on a component the framework does not own and cannot guarantee.
Frontmatter
| id | adr-2609151528057131 |
|---|---|
| type | adr |
| status | accepted |
| date | 2026-08-29 |
.abcd/development/decisions/adrs/2609151528057131-abcd-owns-the-product-thinker-s-surface.md
open on GitHub ↗ · commit history ↗
References2
- adr-2609151528057260Three roles, who each artefact addresses, and when the loop stopsrelated
- itd-167The product thinker answers a stop in a medium they already use, and answers it whenever they get to itrelated
mentions2
- dcn-26091500000000092026-09-15 — The roles and loopback design workstream lands on main, executing the 2026-09-01 ruling that the branch waits for the mint verb and takes its ids at the merge. `abcd decide` now exists, so the two decisions the branch numbered 0055 and 0056 are re-minted as adr-2609151528057260 (three roles, who each artefact addresses, and when the loop stops) and adr-2609151528057131 (abcd owns the product thinker's surface), content, status and date unchanged; every citation that meant the roles decisions is re-pointed (rfc-3, the phase-8 page, the roles page, the out-of-scope list, three intent drafts, and iss-168, whose 29 August extension cited them by the colliding numbers), and main's own 0055 and 0056 keep their ids. The branch's twelve hand-numbered intent drafts (itd-165 to itd-176) collide with nothing and keep their ids, as adr-45's grandfathering allows. Occasion: itd-200 shipped today refining the two roles decisions, so their citations on main pointed at the wrong records until this landed.
- iss-168abcd's presence should be visible in the host harness's status line / command line: a managed repo shows an 'abcd-managed' indicator (and possibly guard health) so the user can tell at a glance whether the current session is under abcd management without running a command. Needs a per-host adapter (e.g. a statusline hook) with the usual basics-built-in stance.