Skip to content

spec(automation): kanban-card-chat -- a card opens its agent conversation - #5389

Merged
gHashTag merged 6 commits into
masterfrom
feat/kanban-card-chat-spec
Oct 2, 2026
Merged

gHashTag merged 6 commits into
masterfrom
feat/kanban-card-chat-spec

Conversation

@gHashTag

@gHashTag gHashTag commented Oct 1, 2026 •

Copy link
Copy Markdown
Owner

Refs #5388 (EPIC: a card on the game's kanban opens its agent conversation).

What

specs/automation/kanban-card-chat.t27: the spec of record for "tap any card on app.t27.ai/game/kanban, a chat with the agent opens with its history, and any A2A agent continues the same thread".

It pins:

  • The thread key. task:gHashTag/<repo>#<n>, owned by this repo's owner only. A bare number takes the board's repository and is never guessed.
  • Ownership. The thread is per person and never splits. A specialist may join it; a client, a room or a ?c= conversation may not.
  • The frame envelope {v:1, type:'t27-app', kind:'open-card'}, accepted from the same origin only.
  • The task note handed to the model. It is bounded (NOTE_MAX 1200) and fenced as foreign text. It says so when the board is down or the card is untitled.
  • The sheet. It is mobile first: it opens at half, the composer stays pinned, GitHub is a secondary link, touch targets are ≥ 44 px.
  • The address ?card=<n>[&repo=].
  • A2A. Either metadata.task or a contextId equal to the thread key continues the thread. History is capped at 20 turns.
  • RUN_LIVE=false: the chat is designed but not yet live.

Checks

  • t27c typecheck: OK. t27c test-report: 19/19 at v4 (16 at v3, 10 at v1).
  • v2 adds the card's work: linked PRs, the worst check state, and "not measured" as distinct from "no PR".
  • v3 adds limits found against live GitHub. The timeline is read at both ends (TIMELINE_PAGES_MAX), the unread middle is a floor (more_is_lower_bound), checks take one read (CHECKS_ONE_READ), and an open costs at most 4 of the 60 public reads an hour (READS_PER_OPEN_MAX). Mutating TIMELINE_PAGES_MAX to 1 fails both new tests.
  • v4 adds the server read and the move contract. STATUS_DOOR with SERVER_TOKEN_ENV: the server reads once for everyone (SERVER_READS_PER_OPEN 1, newest SERVER_REFS_LAST references, a shared cache), and with no token the client reads as in v3 (status_source). MOVE_*: a move is one card through a Queen door that does not exist yet (MOVE_DOOR_EXISTS false, REGISTRY_PUT_IS_A_MOVE false), says the column the person saw, and targets only backlog or dropped. Mutating move_target_ok to accept done fails the move test.
  • Negative control: assert(RUN_LIVE) fails 1 test.
  • Every test is numeric or boolean. The Zig backend refuses == on []const u8, so the string values are pinned by the host test (999 render/src/spec/kanban-card-chat.test.ts).

The host implementation (render task thread, A2A continuation, the app's card sheet) lands in gHashTag/999-multibots-telegraf.

🤖 Generated with Claude Code

…ns its agent conversation

One conversation per (person, task), keyed task:gHashTag/<repo>#<n> in the
host's agent_messages; the same thread for the app's sheet, tri card and any
A2A agent (metadata.task or contextId = the key). The frame opens a card only
through the named same-origin envelope; the sheet opens at half with the
composer pinned; the agent's note about the card is bounded and fenced.

test-report 10/10; negative control (assert(RUN_LIVE)) FAILs as it must.
String constants are pinned by the host test: the Zig backend does not
compare []const u8 with ==.

Refs #5388 (EPIC)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-01 09:32:58 UTC

Summary

Status Count
Total Open PRs 46
PRs with Failing Checks 42
PRs with All Checks Green 4
READY 3
FAILING 42
PENDING 0
NO CHECKS YET 0

These columns do not partition: 3 + 42 + 0 + 0 = 45, and there are 46 open PRs. A PR is being counted twice or not at all.

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=403499176a5d != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

…, actions on a tap

The sheet says which pull requests name the issue and the worst state of
their checks; a read that did not happen is "not measured", never "no PR".
The agent's proposals are approve/decline cards in the card chat and run
only on the person's tap. The column is the Queen's verdict: no move is
offered, and the agent does not open PRs (the host holds no GitHub token).

test-report 14/14; negative controls on checks_rank and action_runs FAIL.

Refs #5388 (EPIC)

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-01 13:14:21 UTC

Summary

Status Count
Total Open PRs 49
PRs with Failing Checks 46
PRs with All Checks Green 3
READY 3
FAILING 46
PENDING 0
NO CHECKS YET 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=403499176a5d != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

PR Dashboard

Generated at: 2026-10-01 14:42:03 UTC

Summary

Status Count
Total Open PRs 48
PRs with Failing Checks 45
PRs with All Checks Green 3
READY 3
FAILING 45
PENDING 0
NO CHECKS YET 0

Seal Status

  • ⚠️ STALE -- sha256(compiler.rs)=403499176a5d != manifest seal=87e5cbd3ad94.
    The committed NMSE numbers were certified against an older compiler.rs.
    Run scripts/reseal-check.sh locally for the two-step reseal command (advisory; not a merge gate).

@github-actions

github-actions Bot commented Oct 1, 2026

Copy link
Copy Markdown
Contributor

📓 NotebookLM Notebook linked to this PR

This notebook contains session context, decisions, and artifacts for this work.

This was referenced Oct 2, 2026
@gHashTag gHashTag added the bee-reviewed A reviewer bee reviewed and verified this PR at its current head; the only merge signal (#5525) label Oct 2, 2026
@gHashTag

gHashTag commented Oct 2, 2026

Copy link
Copy Markdown
Owner Author

Reviewer bee W -- verified at head a6626feb10.

Evidence (fresh clone under /tmp, master 6111696, t27c built from master):

  • t27c typecheck specs/automation/kanban-card-chat.t27 -- OK
  • t27c seal specs/automation/kanban-card-chat.t27 --verify -- all hashes MATCH (also MATCH under the compiler of fix(compiler): assert (a & b) == c is one condition, not assert(a & b) then == c #5594, which lands alongside)
  • t27c test-report -- 23/23 pass, 0 FAIL
  • Diff is exactly what the title says: one new spec, its seal, one docs/now entry. No money / wallet / payments_v2 content.
  • The spec is VERSION 6 while the PR body describes v4; the body is out of date, but the spec is self-consistent. The token constants name env vars (GITHUB_READ_TOKEN, TRIOS_API_TOKEN) and carry no values.
  • 'Documented t27c subcommands' and duplicate-bodies are red on this older base (opened Oct 1); the PR touches neither.

Red checks are noise: Corpus ratchet, spec-guards, untrusted-input, coverage and Scorecard are red on master too; emit-bitexact fails on every open PR and does not run on master pushes.

@gHashTag
gHashTag merged commit e58f4be into master Oct 2, 2026
27 of 32 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

bee-reviewed A reviewer bee reviewed and verified this PR at its current head; the only merge signal (#5525)

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant