Skip to content

id: semantic style tokens on WorldSurface — adapter-resolved, no CSS/HTML (#2027) #2345

Open

Description

@dezren39

Follow-up from the capability taxonomy v0 investigation (#2027, record: doc/2026-10-29T14-05-00Z_investigation_capability_taxonomy/, PR #2337).

Goal

Semantic style tokens on WorldSurface: a program names intent (emphasis, muted, heading, code, warning, success, link) and each adapter resolves it to its own CSS variables, ANSI attributes or 1-bit dithering.

Why

The issue asks for a styling tool across GUI and web that is neither all-web-elements nor Electron. Emitting DOM breaks the trusted-adapter rule on terminals and ESP32; bundling Electron drags a browser onto a 128×64 display. Tokens keep program intent portable and looks adapter-owned, extending today's ScreenCell (xterm-256 + bold) rather than replacing it.

Scope

  • Token runs alongside existing style spans in ScreenSurface; tokens are a superset with a defined mapping to the current xterm-256/ANSI projection so terminals degrade predictably.
  • Adapter contract: each adapter must resolve every token (a table in the module header), with a documented fallback for unknown tokens.
  • Degradation: 1-bit pixel screens map tokens to on/off/dither; text mode strips them.
  • Bounded like style spans (MAX_SCREEN_STYLE_SPANS).

Acceptance

  • Parse/validate token runs; a test asserting an unknown token is refused (bad_args) rather than dropped silently.
  • A test asserting the ANSI projection of a token run matches the documented mapping.
  • No CSS, HTML or escape sequences reachable from a token document.

Out of scope

A theme document, design system, per-world palettes, font selection, layout.

Acceptance criteria

  • Token runs (emphasis, muted, heading, code, warning, success, link) parse and validate alongside existing ScreenSurface style spans, bounded like style spans (MAX_SCREEN_STYLE_SPANS)
  • A test asserts an unknown token is refused (bad_args) rather than dropped silently, and the adapter contract table (every adapter resolves every token, documented fallback) is in the module header
  • A test asserts the ANSI projection of a token run matches the documented mapping to the current xterm-256/ANSI projection; 1-bit screens map to on/off/dither and text mode strips tokens
  • No CSS, HTML or escape sequences reachable from a token document

Activity

  1. added
    kind/featureNew feature or capability request
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    on Oct 29, 2026
  2. developing-today commented on Oct 29, 2026

    @developing-today
    Contributor
  3. added
    priority/normalOrdinary priority (the default)
    effort/mMedium: expected under 1 day of work
    meta/enrichedIntake review done: acceptance criteria, links, and normalized labels added
    on Oct 29, 2026
  4. dezren39 commented on Oct 29, 2026

    @dezren39
    MemberAuthor

    Intake review

    Related: parent investigation #2027 (record: PR #2337); siblings #2338-#2345 are the other taxonomy follow-ups

    Notes: Filed 2026-10-29T14:04Z from #2027. Still live: no open or merged PR implements it. Extends today's ScreenCell (xterm-256 + bold) rather than replacing it; pairs with #2339 (semantic tokens are issue #2345's own scope line; text/1 contract is #2339).

    Risks: Silent token dropping would make program intent adapter-dependent in invisible ways — the refusal test is the core acceptance item.

    Suggested approach: Token set + validation first, ANSI projection mapping second, per-adapter resolution table last.

    🤖 Agent note · filed

    • Agent: fleet monitor (repo-fleet-monitor)
    • Session / ID: repo-fleet-monitor run 2026-10-29T14:30Z (09:30 CDT)
    • Found via: monitor reconciliation
    • Task: Duty 2 intake enrichment — acceptance criteria appended (original body preserved verbatim above it), labels normalized, meta/enriched applied. Still-live check this pass: no merged PR or fix commit explicitly resolving this issue was found; where a queue triage task owns verification, it is named in the notes.
    • Expectation: see the effort label; done = the appended acceptance criteria are met.
    • Links: this issue
  5. added
    queue/queuedHas a queued task in the Supabase agent queue
    source/creatorFiled by the new-issue-creator job
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 3, 2026
  6. dezren39 commented on Nov 3, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · triaged

  7. developing-today commented on Nov 3, 2026

    @developing-today
    Contributor

    agent-note:v1
    state: triaged (coverage pass)
    Coverage pass 2026-11-03: reviewed in the fleet-wide per-issue pass (drift / overlap / already-handled / stale / blockers / ordering). Verdict: still live; queued in repo-health-code-pilot as triage at priority 40 (priority/normal). If this is already handled at current main, the triage closes it with evidence; if it needs splitting, the triage files the split.
    Found via: coverage pass 2026-11-03

  8. 16 remaining items

  9. added and removed
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 4, 2026
  10. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  11. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    agent-note:v1
    event: handed-off
    task: 8501 (small_fix, repo-health-code-pilot; worker repo-worker-code; lane code-t)
    by: repo-queue-worker lane T

    Handed off to the opencode claimant (execution lane: opencode, lane-assignment row 1500). The claimant launches the bound session that drives task 8501 to its terminal state.

  12. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  13. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  14. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: queue worker (repo-worker-code), lane code-o
    • Session / ID: task 8501
    • Found via: queue claim
    • Task: Implement id: semantic style tokens on WorldSurface — adapter-resolved, no CSS/HTML (#2027) #2345: semantic style tokens on WorldSurface — execution lane is opencode; handed off to the opencode claimant, which launches the bound session.
    • Expectation: claimant session drives task 8501 to a terminal state under this queue's worker id; if the lease expires unlaunched, task 8501 returns to the queue.
    • Links: task 8501 (repo-health-code-pilot queue)
  15. dezren39 commented on Nov 4, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  16. added
    queue/queuedHas a queued task in the Supabase agent queue
    and removed
    queue/claimedQueue worker lifecycle state
    work/assignedQueue worker lifecycle state
    on Nov 5, 2026
  17. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

    • Agent: fleet monitor
    • Session / ID: task 8501 (repo-fleet-monitor run 2026-11-05T15:45:47Z)
    • Found via: monitor reconciliation (Duty 1 claim/label divergence repair)
    • Task: Claim evaporated: task 8501 is queued and unclaimed in repo-health-code-pilot, but this issue still carried claimed labels. Labels reset to the truth (queue/queued + status/needs-triage). Checkpoint stage at evaporation: handed_off.
    • Expectation: The next lane claim picks task 8501 up from the queued state and posts a fresh pickup note.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

app/idPackage/app: id (pkgs/ or apps/ in this repo)effort/mMedium: expected under 1 day of workkind/featureNew feature or capability requestmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)queue/queuedHas a queued task in the Supabase agent queuesource/creatorFiled by the new-issue-creator jobstatus/needs-triageNot yet triaged; needs a first looktask/triageQueue packet kind: verify, reproduce, and route this item

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions