Skip to content

Shows the drafts tray in the reference embedder - #44

Merged
johnnyt merged 1 commit into
mainfrom
se-ihm-drafts-tray-uptake
Sep 1, 2026
Merged

Shows the drafts tray in the reference embedder#44
johnnyt merged 1 commit into
mainfrom
se-ihm-drafts-tray-uptake

Conversation

@johnnyt

@johnnyt johnnyt commented Sep 1, 2026

Copy link
Copy Markdown
Member

The drafts tray, visible in the reference embedder, and the beat it exists
for: a flow authored backwards from its sink.

The interim pin

statifier_blocks moves from Hex ~> 0.11 to a git ref on that repo's
main, a3833479257fb0692eea65ed50c00c939b489f36 - the merge of its PR 201,
the first commit carrying core.drafts, core.placeholder,
StatifierBlocks.Shelf and the .sb-slot--tray strip. 0.11.0 carries none
of them, so the fixture below would name two types no palette resolves.

This is INTERIM, on the established se-p22 pattern. FINAL re-pin
after the operator publishes statifier_blocks 0.12.0
: back to
{:statifier_blocks, "~> 0.12"}, retiring @statifier_blocks_ref and its
guard with it. Tracked by se-l9s's third half, alongside the open
statifier and statifier_persistence halves.

mix.lock moved by exactly that one entry. test/statifier_examples/ mix_deps_test.exs guards it the way the other two pins are guarded: one
@statifier_blocks_ref asserted against both mix.exs and mix.lock, so
an edit to one without the other cannot pass.

The uptake needed no wiring, and that is the finding

Nothing in lib/statifier_examples_web/** changed. The two new types reach
this app's editor on their own:

  • StatifierExamples.Charts.palette/0 builds with
    Palette.from_modules(registrations(), core: true), and core_types/0
    is now 15 rather than 13, so the palette is 28 entries rather than 26;
  • assets/css/app.css already imports the package stylesheet by path, and
    .sb-slot--tray is in it - no new --sb-* token, so no host theme
    change;
  • core.drafts declares the icon "inbox", and this app resolves icon
    names against the whole heroicons 24/outline set rather than a
    hand-written subset, so the tile draws.

For a package whose uptake bead expected palette registration and CSS
passthrough, that is worth recording as the reference embedder's answer:
the surface arrived and the host had nothing to do.

What the app does add

priv/fixtures/card_processing_sketch.json (bdoc_cp_sketch, key
card_processing_sketch) - the same payment flow as card_processing,
caught halfway through being authored. The tail the author already knows,
a Sequence of Build the receipt and Send the receipt, is parked
in a core.drafts shelf at the root's body; a core.placeholder stands
where the middle will go; a core.assign seeds capture.attempts; and the
datamodel declares amount and authorization ahead of the steps that
will use them, which is what authoring from the sink backwards looks like
in the document. It opens at Findings 2 - a shelf with anything in it and
a placeholder each raise an author warning on a compile that succeeds.

docs/demo-script.md gains section 13, the sink-backwards beat, and its
one falsified row is corrected (beat 1's palette count, 26 -> 28).

StatifierExamplesWeb.EditorLiveTest gains the beat's machine-verified
half: three rows that mount the sketch, assert the tray draws with the tail
in it, and then drive the whole sequence through the editor's own
insert-dragstart / insert-drop / remove / dragstart / drop
events - park the tail, build the sources, place the tail - ending with an
empty tray, the tail in the flow, and the header at Findings 0. That zero
is the publish gate read off the page: what a host does about parked work
is host policy off %Compiled{}.warnings, and this is that policy walked.

Four sibling assertions the new fixture falsifies are updated in place: the
fixture list in charts_test, the registration row in card_auth_test,
the per-fixture label counts in step_label_test, and the declared-roots
list in fixture_datamodel_test.

Evidence

Live on a private port (8651) on this branch, through the promoted DevTools
driver - the frozen demo ports were not touched:

  • se-ihm-light-tray.png, se-ihm-dark-tray.png, se-ihm-brand-tray.png -
    the tray at the foot of the canvas with the tail parked in it, in all
    three themes;
  • se-ihm-light-tray-drag.png - a palette entry dragged over the tray,
    driven by DragEvents carrying a DataTransfer from page JS
    (se-ihm-drag.js); the tray stamps data-drop="ok", which is
    palette-to-tray drop being permitted by the declaration rather than by
    new machinery;
  • se-ihm-light-tray-placed.png - the settled end state after the same
    sequence the test drives, run in a real browser (se-ihm-beat.js):
    Findings 2 -> Findings 0, 8 blocks/depth 4 -> 9 blocks/depth 3, tray empty.

Every mutation was run by hand and shown red before being reverted from a
backup copy: the shelf retyped to core.sequence, the shelf's body
emptied, the pin ref pointed at the previous statifier_blocks main
487cebf1, and the sketch dropped from @documents.

Full mix quality green on the branch: 243 tests, 77.5% coverage, dialyzer
clean.

Provenance

  • Bead: se-ihm (campaign 024, Lane A uptake A3).
  • Upstream: statifier_blocks PR 201 (sb-uag7), whose closing notes are
    the facts this uptake is written against.
  • Implements the editor half of campaign-024 ruling R-b (a shelf is a
    direct child of the root's body, at most one per document) as a
    consumer of it; the rule itself is enforced upstream.
  • No docs/adr/ path in this diff, so no direction-agent review gate
    applies.
  • No sibling PR was rebased over: the branch is cut from main at
    5bafc2f2 and no 024 sibling has touched these files.

Pins statifier_blocks to the drafts-shelf commit on its main
(a3833479, PR 201) - INTERIM, per the se-p22 pattern: 0.11.0 is
the published floor and carries neither core.drafts nor
core.placeholder. mix_deps_test guards the ref in mix.exs and
mix.lock together, as it does for the other two pins.

The uptake itself needed no wiring. Palette.from_modules/2 with
core: true carries both new types, the package stylesheet this
app already imports carries .sb-slot--tray, and "inbox" is a
name the host's heroicon set resolves. What the app adds is a
document that asks for the surface: card_processing_sketch, the
payment flow caught mid-authoring, with the tail parked in a
core.drafts shelf and a core.placeholder standing where the
middle will go.

Adds the sink-backwards beat on it - demo-script.md section 13,
and a LiveView test that drives the same sequence through the
editor's own drag, remove and drop events: park the tail, build
the sources, place the tail, and watch the header fall from
Findings 2 to Findings 0.

Refs: se-ihm
@johnnyt
johnnyt merged commit 4cba763 into main Sep 1, 2026
1 check passed
@johnnyt
johnnyt deleted the se-ihm-drafts-tray-uptake branch September 1, 2026 02:42
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant