Skip to content

id: design amendment to boards v1 for identity and content-hash contracts (#2054) #6164

Open

Description

@dezren39

Design amendment candidate for #2054, identified while comparing the governing design with the current implementation for #5525. This issue records unresolved protocol contracts; it does not block PR #6158, which only adds signed GamePost metadata.

Decisions needed before changing these existing wire contracts

  1. Board ID derivation. id: design: ID boards v1 #2054 §1 says derive the stable board ID from (creator signing key, random nonce), but the current ^[[0mBoard.board_id^[[0m is a creator-chosen validated string. Specify the domain separator, nonce bytes/size, derivation and encoding, duplicate behavior, and compatibility for already-published roots.
  2. Content hashes. ^[[0mboards::ArtifactHash^[[0m is lower-case SHA-256 and is used by attachments/assets; ^[[0mdocuments::DocumentRef^[[0m / Iroh blobs use BLAKE3 plus length verification, while the merged id: PoC: game-post with async turn passing — tic-tac-toe as a board post, signed turns, concession result, save-point fork (from #2053) #2266 PoC package reference uses SHA-256. Specify the hash and size contract per board attachment, theme asset and game package, including verification/migration of existing signed objects.
  3. Pinned view provenance. id: design: ID boards v1 #2054 invariants 97 and 108 require a saved view to identify configuration, frontier and resolution, but current ^[[0mBoardView^[[0m has no provenance fields and the design does not specify their representation. Decide the smallest reproducible view receipt before adding persistence or relying on saved projections.

Guardrail

Do not silently change hashes or board IDs in implementation. Either record a design amendment in #2054/doc with explicit compatibility rules, or affirm the existing v1 choices and amend the design to match. Related implementation umbrella: #5525.

Acceptance criteria

  • Board ID derivation: the contract is decided and recorded in id: design: ID boards v1 #2054/doc — domain separator, nonce size/derivation/encoding, duplicate behavior, and compatibility for already-published roots — or the existing creator-chosen validated string is affirmed as v1 and the design amended to match.
  • Content hashes: the hash + size contract per artifact class (board attachment, theme asset, game package) is decided and recorded, including verification/migration of existing signed objects.
  • Pinned view provenance: the smallest reproducible view receipt (configuration, frontier, resolution) is specified, or provenance is explicitly deferred with the reason recorded.
  • No implementation change silently alters board IDs or hashes before these decisions land (guardrail in the body); PR feat(id): wire signed game posts into board objects (#5525) #6158 remains unblocked throughout.

Activity

  1. added
    app/idPackage/app: id (pkgs/ or apps/ in this repo)
    on Nov 5, 2026
  2. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor
  3. added
    kind/designA design proposal (design-architect): multi-step, phased, decision-bearing
    source/humanFiled directly by a human
    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 Nov 5, 2026
  4. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Intake review

  5. added
    queue/queuedHas a queued task in the Supabase agent queue
    task/triageQueue packet kind: verify, reproduce, and route this item
    on Nov 5, 2026
  6. added
    queue/parkedQueue task is parked (waiting on CI, time, or an event)
    status/parkedDeliberately paused with a recorded resume condition
    work/assignedQueue worker lifecycle state
    on Nov 5, 2026
  7. developing-today commented on Nov 5, 2026

    @developing-today
    Contributor

    🤖 Agent note · handed off

    • Agent: queue worker (repo-worker-code), lane code-i
    • Session / ID: task 10460
    • Found via: queue claim
    • Task: Work issue id: design amendment to boards v1 for identity and content-hash contracts (#2054) #6164 — assigned_lane=opencode, handed off to opencode claimant per §1b; parked 1800s for claimant launch (note re-sent via developing.today App after user-token comment hit secondary rate limit)
    • Expectation: claimant launches bound opencode session
    • Links: n/a
  8. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    🤖 Agent note · handed off

  9. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Agent note - handed off

  10. dezren39 commented on Nov 5, 2026

    @dezren39
    MemberAuthor

    Triage — current main (00a294a)

    Disposition: still live; keep #6164 open as a design-amendment/decision record. It is not already handled or superseded. No code changes were made.

    Evidence and scoped fix path

    • Board identity conflicts across the design and implementation. The design says derive the stable ID from (creator signing key, random nonce) but leaves the derivation details unstated (design §1). Current Board.board_id is instead a creator-chosen string with only length/character validation (boards.rs, validator). Amend id: design: ID boards v1 #2054 to choose one contract and, if derivation is chosen, specify domain separator, nonce size/encoding, duplicate behavior, and compatibility for already-published roots.
    • Hash and size behavior is not one uniform contract. ArtifactHash is canonical lower-case SHA-256 (boards.rs); DocumentRef uses BLAKE3 plus a byte length and verifies both (documents.rs, verification). The design amendment needs a per-class hash/size/verification and compatibility rule for attachments, theme assets, and game packages. In particular, existing signed objects cannot be rewritten in place; spell out any additive migration/new-version path. Current main also has GamePostRef pointing at a same-board Post rather than a dedicated GamePost object; PR feat(id): wire signed game posts into board objects (#5525) #6158 is still open and introduces metadata only.
    • Pinned-view provenance is not represented. Design invariant 5 requires exact board/rules/theme inputs, frontier, and resolution context (design), while current BoardView returns the projection without a receipt/provenance field (boards.rs). Specify the smallest reproducible receipt or explicitly defer it with rationale.

    Blocker and ordering

    Resolve these choices in doc/2026-11-01_design_id2054.md (linked from #2054) before changing serialized board IDs/hash semantics or relying on saved-view provenance. Do not block PR #6158 as scoped; its metadata-only slice must not silently redefine these contracts. Land the amendment/affirmation before unblocking #6160's package/hash-sensitive async-turn work; #6161 follows #6160. #6163 remains separately gated on #5858 and #5679. #6160 is currently blocked and #6161 parked. Keep #6164 open until the design record is updated, then close it as the amendment record.

  11. added
    status/blockedQueue or user escalation state
    and removed
    status/parkedDeliberately paused with a recorded resume condition
    queue/queuedHas a queued task in the Supabase agent queue
    on Nov 5, 2026
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/designA design proposal (design-architect): multi-step, phased, decision-bearingmeta/enrichedIntake review done: acceptance criteria, links, and normalized labels addedpriority/normalOrdinary priority (the default)queue/parkedQueue task is parked (waiting on CI, time, or an event)source/humanFiled directly by a humanstatus/blockedQueue or user escalation statetask/triageQueue packet kind: verify, reproduce, and route this itemwork/assignedQueue worker lifecycle state

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions