Skip to content

⏱ TIME MACHINE

UCCA / UCCO Build Session Handover

18 March 2026 — Session 19 (The Canvas Session)

"Infinite noodles. Free. Forever."

Paste this document as your first message in the next Claude session.


1. Session 19 Summary

Session 18 closed the market. Session 19 built the pipeline.

Four briefs written and closed in a single session:

  • B-PORT-01 — Authenticated RTO portal shell + member model. Role-aware nav, Carol's soft invite nudge, invite flow with live preview, accept flow at /invite/:token.
  • B-CAT-03 — Docket engine. Price It drawer now persists to DB. dockets table live. window.__priceItAddItem(sku, qty, meta) exposed by Alex — the Composer hook is ready.
  • B-COMP-01 — Composer canvas. Written, not yet deployed. Currently with Alex.

The stack is: portal shell → docket engine → Composer canvas. Each brief builds on the last. The Composer is the surface everything has been pointing at.

One architectural clarification made this session: everything built in B-CAT-01 through B-COMP-01 is RTOpacks only. UCCA infrastructure is the invisible plumbing underneath. RTOs never see UCCA branding in the portal.


2. What Alex Is Building Right Now

B-COMP-01 — Composer Canvas — currently with Alex, not yet deployed.

Seven deliverables: 1. Composer page shell at /dashboard/composer with URL pattern ?unit=UNITCODE 2. Unit drawer — search, results, loaded unit detail, recent units (localStorage) 3. Three canvas modes: Blank / Shell Fill (default) / Shell Fill + Edit 4. Canvas session record — composer_sessions table, autosave on blur, session continuity 5. Docket hook — [Generate Shell] fires window.__priceItAddItem once, carries meta.unit_code 6. "Open in Composer →" button on /catalogue page 7. Ops stub — Composer → Sessions in ops console

Confirm deployed with: - Shell Fill mode rendering with unit loaded, PCs, response fields - Coverage indicator updating live - Mode switcher working - Unit search returning results - Price It drawer showing unit after [Generate Shell] - "Open in Composer →" on catalogue page - Ops console Composer Sessions table - Autosave confirmed (type, refresh, content persists)


3. Build Sequence — Current State

B-CAT-01    ✅ closed — products table, catalogue API, ops console Commercial
B-CAT-02    ✅ closed — price list page, Price It drawer (session state), ops Price List Views
B-PORT-01   ✅ closed — portal shell, role-aware nav, member table, invite flow, Carol nudge
B-CAT-03    ✅ closed — dockets table, drawer persists to DB, docket switcher, window.__priceItAddItem
B-COMP-01   🔨 in progress — Composer canvas (with Alex now)
B-COMP-02   → to be written — Contextualiser (one run, one observation)
B-PORT-02   → to be written — Auditor surface
B-TRAIN-01  → to be written — Trainer Mapper

4. Infrastructure State

engine-db (0efa8970-0053-4623-8436-4e877af10887)

Tables live: 1. users 2. tenants 3. user_tenant_roles 4. platform_audit_log 5. impersonation_tokens 6. vc_tokens 7. vc_issuance_log 8. purchases 9. packs 10. products 11. price_list_views 12. portal_invites 13. dockets 14. composer_sessions ← lands when B-COMP-01 deploys

rtopacks-db (334ac8fb-9850-48c0-9da0-b56c55640e98)

  • 15,202 TGA units enriched across 52 training packages
  • 55,973 RTOs with email_domain populated
  • email_domain index live

rtopacks.com.au (ucca-surfaces)

Pages live: - / — home - /catalogue — 5 units, buy + "Open in Composer →" (lands with B-COMP-01) - /claim — 3-step claim flow - /dashboard — portal shell, role-aware nav, Carol dropdown, Price It drawer - /dashboard/scope — stub - /dashboard/composer — stub → real canvas landing with B-COMP-01 - /dashboard/trainer-mapper — stub - /dashboard/pricing — live (B-CAT-02) - /dashboard/members — live (B-PORT-01), team table, invite panel, Carol nudge - /dashboard/settings — stub - /invite/:token — accept flow (B-PORT-01)

ops.ucca.online (ops-v2)

Nav sections live: - Platform: Identity & Tenancy - Credential Infrastructure: VC Output, PassKit - Commercial: Product Catalogue, Price List Views, Portal Invites, Dockets - Composer: Sessions ← lands with B-COMP-01 - Apps: Overview - Infrastructure: existing

FastAPI backend (ucca-engine)

Routers live: - identity.py — users, tenants, roles, audit, impersonation - onboarding.py — RTO lookup, verify, provision - packs.py — pack generation - catalogue.py — products CRUD - portal.py — price list views, invites - dockets.py — docket CRUD + line items - (composer sessions router lands with B-COMP-01)


5. Pending Decisions / Tim Queue

  • ⚠️ Invite email sendernoreply@rtopacks.com.au or hello@rtopacks.com.au. Unresolved since B-PORT-01. Blocking invite emails going live. Answer this first thing next session.
  • Record explainer video — 2-3 mins, what RTOpacks builds against a unit. Embed container waiting on unit detail page. Do this once B-COMP-01 is confirmed live — you can show the real canvas.
  • Contact Mavis — first content production conversation. Composer pipeline is real now. Brief Mavis on what a context_spec.json looks like and what she produces back.
  • DNS cutover — rtopacks.com.au → Moodle on Hostinger (82.112.249.102). Still in Alex queue item 4. Composer being live makes timing matter. Confirm with Alex before it happens.
  • Think on the Contextualiser — B-COMP-02 is next. One run. One observation. Not a report, not a list. One considered prompt displayed with weight. Start forming that picture before Session 20.
  • Apple Developer cleanup — "United Community Colleges of America Inc" Distribution cert. Dead entity name. Low priority but needs doing.
  • Register merchant.online.ucca Merchant ID in Apple Developer portal. When payment brief drops.
  • ucca.com.au / ucca.asia — domains confirmed under control (Session 19).

6. Alex Queue — In Priority Order

  1. B-COMP-01 — IN PROGRESS. Confirm deployed before B-COMP-02 drops.
  2. DNS cutover — Moodle on Hostinger (82.112.249.102) → rtopacks.com.au. Timing to be confirmed with Tim.
  3. Merge feature/finance-page-mercury → main (9 commits ahead)
  4. Mobile breakpoints — ucca.online missing 480px and 360px
  5. DMARC hardening — p=none → p=reject across all zones
  6. OIDF conformance suite — deferred, requires local Java 17 + Gradle
  7. Mattr wallet manual test — deferred, requires phone + app install

7. The Composer — What Was Decided

Three modes — LOCKED

Mode Description
Blank Clean canvas, element headings only, empty text areas
Shell Fill TGA structure pre-populated, RTO fills response fields. DEFAULT.
Shell Fill + Edit Same as Shell Fill but TGA text is editable. Edits get amber left border. "Reset to TGA" per block.

Two entry points — LOCKED

  • From search/catalogue: "Open in Composer →" button on unit listing. Navigates to /dashboard/composer?unit=CODE.
  • From inside canvas: Unit search in the left drawer. Same corpus query as site search, units only.

Docket hook — LOCKED

  • Trigger: [Generate Shell] button (first open only). Replaced by coverage indicator after shell generated.
  • Fires: window.__priceItAddItem('RTP-UNIT-GENERIC', 1, { unit_code, unit_title })
  • One unit = one docket line item. No duplicates. Checks meta.unit_code before adding.

Canvas session record — LOCKED

  • composer_sessions table. Permanent, immutable. Every session recorded.
  • Autosave on field blur, 800ms debounce.
  • Session continuity: returning to a unit loads the last active session.
  • canvas_state JSON carries pc_responses, ke_responses, tga_edits.

Coverage indicator — LOCKED

  • Count of PC response fields with any content vs total PCs.
  • Shown as "X / Y addressed" in top bar.
  • Advisory only. No gate. No warning. Just a signal.

8. What's Next After B-COMP-01

B-COMP-02 — The Contextualiser

One run. One observation. Not a chat. Not a bot.

Input: the canvas state from B-COMP-01 (pc_responses, ke_responses, tga_edits, coverage). Output: one observation. Displayed with weight. Logged yes/no (did they act on it).

The brief needs to define: - What the observation UI element looks like — this is a design decision, not just a data problem - What "one run" means technically — does it call the AI once and lock? Can they run again (at what cost/tier)? - How the reference layer toggles (AQF, AQTF, training package frameworks, legislation) - The corporate fork mechanic (same unit, different context layer for a named client)

Tim to think on this before Session 20.


9. Operating Rules

All rules from Sessions 16–18 unchanged. No new rules added this session.

Full standing rules: - INFINITE-NOODLES RULE: Composer L0 is free forever. No expiry. No degradation. - ONE-OBSERVATION RULE: Contextualiser returns one observation per run. One. Logged. - CAROL RULE: Trainer identity is employer-agnostic. RTO owns content. Trainer owns identity. - USI-BREADCRUMB RULE: Right to be forgotten = personal data scrubbed, USI retained, audit chain intact. - AUDIT-FOLDER RULE: Everything goes in the audit folder. One folder. Always complete. - STRIPE-ZIP-ZAP RULE: Stripe receives amount + currency + reference only. L3 is product authority. - CATALOGUE-AUTHORITY RULE: No hardcoded prices anywhere in any frontend ever. - SESSION-RECORD RULE: Every Composer canvas session is a permanent record. Immutable audit trail. - COVERAGE-OPINION RULE: Coverage checks advisory only. Never a gate. RTOs hold scope. - PASSKIT RULE: Apple Wallet uses PassKit (.pkpass), NOT mdoc. Team ID B29TSCBPHD. - USI RULE: Never describe UCCA as competing with USI. Complementary layers. - JUKEBOX RULE: Off-shelf and compose are the two product tiers. - FIVE WORLDS RULE: Internal ops worlds built before any public-facing corpus surface. - VERIFY PAGE RULE: keys.ucca.online/verify/<hash> returns HTML for browsers, JSON for API. - TWO JUKEBOX RULE: RTOpacks output is VET-native. Engine output is UCCA-native. Never mix. - No time alerts for Tim. Never. Go go go. - Every 10 messages: check context length. YELLOW = warn. RED = write Time Machine immediately. - Every Alex brief: SURFACE + DO NOT TOUCH + CF account ID. - Brief drip rule: one brief at a time. Confirm deployed before next drops. - OPS-AS-OS RULE: if it doesn't exist in ops.ucca.online, it doesn't exist. - Truth over comfort. - Two sections in every Alex brief: → ALEX and → TIM.


10. The Big Picture

The pipeline is real now.

Composer (design — free to noodle)
    → Contextualiser (one run, one observation, reference layer)
        → Auditor (self or AI — unit outcomes + ASQA standards)
            → Trainer Mapper (credential verification, three verdicts)
                → Application video (evidence + hire, app only)
                    → Fill It (content production, meter starts here)
                        → SCORM + Moodle delivery
                            → PassKit certification
                                → Wallet verification
                                    → Upscaler (scope expansion)
                                        → Submission package
                                            → Audit ready

The corpus was always the moat. The Composer is the gate. The docket is the record. UCCA invisible throughout.

"The internet moved data without knowing who sent it. UCCO moves capability with full knowledge of who holds it, what they're certified to do, and what they actually did."


UCCA Inc · Session 19 · 18 March 2026

"Infinite noodles. Free. Forever."

"A schmoke and a pancake?" — Goldmember