cacti-demos subrepoAfter each milestone, record changed files, checks performed, browser pages exercised, console errors, and unresolved questions. Stop after the requested milestone.
messages or field annotationssatp-demo/index.html — page metadata and social tags, navbar/footer mirrors of _includes/navbar.html and _includes/footer.html, chapter navigation, theme toggle markup, full site introduction (what the page is, the transfer path it follows, how to read it, illustrative-data and accessibility expectations), and concept-first chapter headings with placeholder mount pointssatp-demo/assets/css/satp-tutorial.css — complete “Light Organic Editorial” token set in one :root block (surfaces, ink, semantic stage/role/network accents, radius, shadow, spacing ramp, type scale, motion), “Night Paper” dark variant under both prefers-color-scheme: dark and [data-theme="dark"], paper texture washes, header and chapter-nav styling, introduction layout, footer, focus rings, responsive rules down to 380px, and prefers-reduced-motion handlingsatp-demo/assets/js/satp-tutorial.js — theme cycling (system → light → night) with localStorage persistence and updated ARIA labels, IntersectionObserver chapter-nav highlighting, and chapter-controller mounting when controllers existsatp-demo/plans/progress.md — this recordfile:// and served locally; no console errors, no network requests to third partiesFraunces / IBM Plex Sans are requested by name and fall back to system serif and sans faces._includes/navbar.html or _includes/footer.html change, update satp-demo/index.html to match.assets/css/satp-tutorial.css — Chapter 2 narration is now a framed, independently scrollable panel matched to the diagram box height; sticky columns are bounded so they cannot be cut off; hover/focus tooltips for step names; Chapter 3 hash-chain block spans both columns; .stage-note and prologue arrow stylingassets/js/chapter-02-stages.js — Alice (user) lane and the two pre-protocol hand-offs (user to application, application to gateway); stage badge no longer carries the Cacti-extension caveat, which moved to a note under it; narration height sync and scroll observation rooted in the narration panelassets/js/primitives/lane-diagram.js — optional prologue hops drawn left of the first protocol column, with the column grid shifted to make roomassets/js/chapter-01-table.js — step names are hoverable and focusable with a tooltip describing the step; caption links SATP_PROTOCOL_MAP to types/satp-protocol.ts upstreamassets/js/chapter-03-messages.js — illustrative-data notice removedindex.html / build-index.py — states that the modelled protocol is draft version 3 as implemented by SATP Hermes, describes the operator hand-off in Chapter 2, and adds the SATP Hermes talk and Cacti workshop recordings to the referencesindex.html, opened over file://, no console errors, no third-party requests beyond the Google Fonts stylesheet; checked scrolling of both chapters at 1280x900 and at 420pxindex.html — chapters reordered: Chapter 1 (why it is hard) now ends with the hash-chain explainer “What ties the four messages together”; Chapter 2 is the Stage 1 message explorer; Chapter 3 is the whole-conversation flow diagram plus the 36-step reference table; new scaffold chapters 4 (API1) and 5 (adapter layer); chapter nav updated to five entries; Stage 0 is described as being specified in draft-avrilionis-satp-setup-stage instead of “not part of the core draft”assets/js/chapter-01-table.js — wire message names are hoverable/focusable with a placeholder message-format tooltip (common envelope + payload); caption updatedassets/js/chapter-02-stages.js — shorter actor role captions so the gateway boxes no longer overflow their rounded rectangles; stage note links the IETF setup-stage draftassets/js/chapter-03-messages.js — hash-chain block can be mounted into a separate container (#hash-chain-anatomy in Chapter 1)assets/js/satp-tutorial.js — passes the Chapter 1 hash-chain containerassets/css/satp-tutorial.css — “The transfer we are following” column is no longer sticky (it used to run past the viewport and cover the prose below); styles for in-chapter section headings and the message-format tooltipassets/data/satp-stages.json — Stage 0 note points at the IETF setup-stage draftfile:// at 1280x1400, no console errors; checked the reordered chapters, the table hover tooltips, the actor boxes and the previously overlapping scenario cardTransactRequest shape, enriched private SessionData, Stage 0 setup messages and the signed Stage 1 proposal. Empty or invalid required values stop the transformation before SATP, generated/default values are distinguished from application input, and every view links to its controlling Cacti source. The no-JavaScript fallback describes the same path and notes that the current endpoint awaits manager.transfer(session) before returning sessionID and status.index.html, assets/js/chapter-04-api1.js, assets/js/satp-tutorial.js, assets/css/satp-tutorial.cssgit diff --check clean; browser checks at 1280×900 and 420×900 confirmed four selectable views, validation blocking, Stage 0 rendering and no horizontal overflow.TransferProposalRequest; reused lane and packet primitives with explicit actor endpoints; added four configured before/after bindings, 13-step execution table, raw payload inspector, event log and human-operated hook clients connected to both gateways. Gateway 1 reviews 100 Digital Pound from Alice on Besu to Bob on Fabric and returns outbound HTTP success/error; Gateway 2 acknowledges notification, then posts approve/reject decision before proposal validation. Success returns INIT_RECEIPT; sender HTTP failure and receiver rejection stop before Stage 2. No timeout UI or timer-driven workflow is present.newSessionRequest; chapter clearly labels its equivalent Stage 1 configuration as an adaptation. Runtime sequence follows current stage1-handler.ts: sender transferProposalRequest before/after, receiver checkTransferProposalRequestMessage before, then transferProposalResponse after. There is no receiver validation after-hook in current handler.index.html, assets/js/chapter-05-adapters.js, assets/js/primitives/lane-diagram.js, assets/js/satp-tutorial.js, assets/css/satp-tutorial.css, plans/progress.mdgit diff --check clean; browser checks covered visible packet motion, full five-action success path, sender HTTP error, receiver rejection, replay, reduced motion, 13 rows, four actors and operator transfer summary. Chapter 2 retained 36 protocol rows and original gateway geometry. At 390px adapter canvas scrolls inside its viewport; observed page overflow belongs to pre-existing Chapter 1 table.ACK_COMMIT_FINAL (drawn as an “after SATP” hand-off to the right of the flow, mirroring the Stage 0 prologue); new Chapter 6 scaffold for the end-to-end CBDC integration with its todo list; the “What ties the four messages together” illustration now reads as a chain of blocks with a block index, a monotonically increasing sequence_number under common.hash_previous_message, and drawn connectors between consecutive blocks.assets/js/primitives/lane-diagram.js, assets/js/chapter-02-stages.js, assets/js/chapter-03-messages.js, assets/css/satp-tutorial.css, assets/data/satp-stages.json, index.html, plans/progress.mdPOST /transfer request, including placeholder request fields; protocol numbering continues after those entries and ends with Gateway 2 notifying Bob’s application, including placeholder result fields. The diagram labels the first two arrows as Stage 0/API1 and changes the caption to “earlier” during later stages. In the reference table, the Stage 1 label now uses the same colour as “Message on the wire”.assets/js/primitives/step-list.js, assets/js/primitives/lane-diagram.js, assets/js/chapter-02-stages.js, assets/css/satp-tutorial.css, plans/progress.mdnode --check; reloaded the served page at 1280×900 and 420×900; confirmed 39 numbered flow entries, the Stage 3 “Stage 0 · earlier” caption, matching Stage 1/wire-message colours, stacked mobile columns, no horizontal overflow, no editor diagnostics, and no browser console errors.assets/js/chapter-03-messages.js, assets/css/satp-tutorial.css, plans/progress.mdnode --check, editor diagnostics and the browser console were clean./transfer call, then enter the gateway protocol at newSessionRequest. The two Stage 0 hand-offs and the final Gateway 2-to-Bob’s-app result now expose packet geometry, active-arrow state and click targets in the lane diagram.assets/js/primitives/lane-diagram.js, assets/js/chapter-02-stages.js, assets/css/satp-tutorial.css, plans/progress.mdservice/stage_0.proto through service/stage_3.proto; the four ledger-only rows say “No wire message”. A separate “Implemented in” column links all 36 steps to their actual client/server stage-service methods at pinned Cacti commit 9195eccc0a1b81112107e3e5be325c85efb95b72. Three boxes above the table introduce the Stage 1–3 CommonSatp envelope, shared Error enum and persisted SessionData. Source chips support commit refs and show their exact line anchors.assets/js/util.js, assets/js/chapter-01-table.js, assets/js/primitives/source-chip.js, assets/css/satp-tutorial.css, plans/progress.mdnewSessionResponse example points to newSessionErrorResponse at line 537; the table points to the actual newSessionResponse declaration at line 428. node --check passed for all changed JavaScript files. At 1280px the page rendered 36 pinned, line-anchored implementation links with no page overflow. At 420px the schema boxes collapsed to one column, the table scrolled inside its frame, and the browser console and editor diagnostics were clean.draft-ietf-satp-core-15 section. Stage 1 maps to Sections 8.3, 8.4, 8.6 and 8.7; Stage 2 to 9.1 and 9.2; Stage 3 to 10.1 through 10.5. Links use the exact named anchors in the archived Core 15 HTML. Cacti’s Stage 0 messages are not linked because their concrete definitions are outside Core 15; the Cacti-only transfer-complete response shares Section 10.5 with its request. Message-format tooltips contain only the exact proto definition link and symbolic/numeric message ID. Each wire-message cell visibly shows its linked Core §… destination; Stage 0 cells say “Not defined in Core 15”. The table’s “Kind” filter and column are labelled “Message type”, and a composable “Acting gateway” filter selects client or server steps. Draft metadata and the embedded file:// fallback use Core 15.assets/js/chapter-01-table.js, assets/css/satp-tutorial.css, assets/data/satp-stages.json, assets/data/stage1-messages.json, index.html, prompt.md, plans/progress.mdfile:// check at 420px kept table overflow inside its frame and had no console errors.SATP Core section N before the proto definition and message ID. The Core reference was removed from native title attributes and from the separate always-visible badge, so the custom hover/focus panel is the single explanatory surface. Cacti’s four Stage 0 message types explicitly point to the Core 15 Section 7 overview and note that concrete setup messages are outside that draft’s scope; Core 15 has no Section 7.2.assets/js/chapter-01-table.js, assets/css/satp-tutorial.css, plans/progress.mdtitle, all 32 hover panels contained an explicit Core section, all Stage 0 panels included the scope caveat, and the page had no horizontal overflow or console errors. At 420px keyboard focus opened the same custom panel, table overflow stayed inside its frame, and the console remained clean.SATPWrapperContract.sol entrypoints: lock at line 203, mint at line 296, burn at line 341 and assign at line 389. Smart-contract payload examples now match the Solidity ABI: tokenId, assetAttribute, and, for assign, an EVM receiver_account. Incorrect lockAsset / mintAsset / burnAsset / assignAsset contract names, generic amount, and distinguished-name receiver were removed. Notes explain onlyOwner, boolean success, fungible amount semantics and wrapper balances.assets/js/chapter-01-table.js, assets/data/satp-stages.json, index.html, plans/progress.mdfile:// fallback retained all four definitions, kept overflow inside the table and had no console errors.assets/js/chapter-03-messages.js, assets/css/satp-tutorial.css, plans/progress.md9195eccc0a1b81112107e3e5be325c85efb95b72. StepList maps each flow function tag to its line; the message explorer maps each source role to its proto, sender, or receiver function line. Labels expose the line number.assets/js/primitives/step-list.js, assets/js/primitives/message-card.js, assets/js/chapter-03-messages.js, plans/progress.mdcustody: client marker before playback. Each source or destination ledger write shows its own compact 3-second clock on that chain after the packet lands; the countdown clears before playback advances. The clock hand uses the chain colour and stops rotating when reduced motion is requested.assets/js/chapter-02-stages.js, assets/js/primitives/lane-diagram.js, assets/js/primitives/ledger-band.js, assets/css/satp-tutorial.css, plans/progress.mdSessionData gateway-record card uses neutral gray. SessionData includes a keyboard-accessible button that opens one representative full 69-field v02 session record in a modal. CommonSatp has a separate modal example covering all 16 envelope fields, including its full payload profile, and Error has an out-of-sequence failure example. All three follow the Stage 1 message explorer’s structure: type line, descriptive heading, plain summary, nested field rows, and an explanation beside every value. Raw JSON blocks were removed; controls use unique ARIA relationships. During Stage 0, the Besu and Fabric rows now follow session opening and transfer negotiation without implying an on-chain asset change. The Settlement row defaults to “custody of asset”. Each confirmed blockchain transaction appends a persistent datapoint: client custody at lockAsset, separate shared-custody points at mintAsset and burnAsset, and server custody at assignAsset. A neutral-grey pointer marks the latest confirmation. Ledger-write arrows run from the acting gateway to the correct network; Fabric operations mintAsset and assignAsset use destination green.assets/js/chapter-01-table.js, assets/js/chapter-02-stages.js, assets/js/primitives/lane-diagram.js, assets/js/primitives/ledger-band.js, assets/css/satp-tutorial.css, plans/progress.mdnode --check passed for all changed JavaScript. Browser checks at 1280×900 and 420×900 confirmed all Stage 0 labels, the four-point custody history, grey current-state pointer, backward-navigation contraction, three ledger rows, source/destination arrow geometry and colors, the modal 69-field session example, the complete 16-field CommonSatp example, the SATP error example, unique control targets, internal modal scrolling, focus restoration, no raw JSON blocks, no horizontal overflow, no console errors, and no editor diagnostics.index.html, assets/js/chapter-02-stages.js, assets/css/satp-tutorial.css, plans/progress.md3s, 2s, 1s, then advancement after lockAsset, mintAsset, burnAsset and assignAsset; pause held the active ledger step after five simulated seconds. No horizontal overflow.assets/js/chapter-02-stages.js, assets/js/primitives/lane-diagram.js, plans/progress.mdnode --check passed for both changed JavaScript files; git diff --check passed and VS Code reported no diagnostics in either file.TBD: