InChat Callouts

ENOK Foundry · six acts, one resolution law
0 waiting
Prose only — the problem
Ora4:12 PM

The staging run finished and five files landed, though the catalog entry is still pending because I need you to decide whether this goes out as a candidate or straight to the shelf, and separately I can't flip the app public without your approval, and the font subset is blocked on a license question I couldn't answer myself.

Three different things are waiting on you in that paragraph. Nothing in the transcript records which one you answered, or when.

InChat Callouts — every ask resolves in place
Ora4:12 PM

Staging run is done. Here's the state, and the two things that need you.

RESULT

What landed

4:11 PM
files staged5
smoke test97 / 97 passed
dependencies0
PLAN

Three moves left

  1. Stage the component files
  2. Update the catalog entry — status stays candidate
  3. Report with links
DECISION

Which shelf does this land on?

Candidate keeps it MCP-readable and off the public shelf until you approve. Live puts it on the shelf now.

CONSENT

Flip the app to public?

I can't do this on my own say-so, and I won't stamp it done because a button moved — approving here hands it to the platform, and the callout waits.

BLOCKED

Font subset is stuck

The upstream face ships under a license I can't read as permitting a subset redistribution. What would unblock it: a link to the license text, or a decision to ship the full face instead.

NOTE

A note is the only act with nothing to answer — it never counts in the waiting tally, and it has no resolution to stamp.

Event log — one cancelable event per answer
waiting for an answer…
The law. An answered callout does not disappear — it stamps what was chosen · by whom · when and goes quiet, so the transcript keeps the ask and the answer. Consent is different on purpose: dashed and never filled, both options equal weight (an asymmetric pair manufactures the yes), the deny side takes focus first, and Esc does nothing — you cannot slip past a consent gate. The publish gate above is host-owned: it calls preventDefault(), shows InChat.pending() while the platform is asked, and only stamps when the work actually lands.
The whole component — two files
<link rel="stylesheet" href="inchat.css"> <script src="inchat.js"></script> <section class="ic-callout" data-kind="consent" data-ic-id="publish"> <div class="ic-head"><span class="ic-act">CONSENT</span> <h4 class="ic-title">Flip the app to public?</h4></div> <div class="ic-options"> <button type="button" class="ic-opt" data-ic-opt="declined">Not now</button> <button type="button" class="ic-opt" data-ic-opt="approved">Approve</button> </div> </section> <script> InChat.init(document); // Let the event through and the callout resolves itself. Take it over // with preventDefault() when the answer starts real work: document.addEventListener('inchat:resolve', function (e) { if (e.detail.id !== 'publish') return; e.preventDefault(); InChat.pending('publish', true, 'Asking the platform'); askPlatform(e.detail.value).then(function (r) { InChat.resolve('publish', { outcome: r.outcome, by: 'Daniel' }); }); }); </script>