Skip to content

teams: tile spend, refused writes said, no wake prompts on tiles, sub-cent caps, wrap-up time left, local closed reports - #1516

Merged
AbirAbbas merged 10 commits into
devfrom
fix/teams-surface
Sep 25, 2026
Merged

AbirAbbas merged 10 commits into
devfrom
fix/teams-surface

Conversation

@AbirAbbas

Copy link
Copy Markdown
Collaborator

Six should-fixes from the #1429 and #1494 reviews, one commit each.

What was wrong, and what is true now

  1. Wall tiles showed no spend. tui3: conversation overview #1429 promised it. Each tile's state line now ends in the figure that conversation's own status line shows: spendShown for the conversation in front, and the same rule (spendOf) for held ones. A held tile uses its books, read off the loop with the transcript, and its ledger tree, read at most every 5s. Zero draws nothing, and on a narrow tile the figure gives way before the state words do.
  2. A refused team write still said Made beta · 1. Every team edit now carries a number, and the write reports which edits it took and which it refused. Made, Organized and the teams page's close and move notices wait for their own edit. When the store refuses, the notice is replaced by a warning such as beta was not saved · <reason>.
  3. Tiles showed the wake prompt that the live conversation never draws. A reopened manager conversation drew it too. The wake sentences are now session constants (TeamWakeNote), and one aside classifier is shared by replay and the tiles: a team delivery draws as its lines, and an empty team wake draws nothing.
  4. A $0.001 cap read $0.00 and Raise to $0, which stored a ceiling of 0. There is now one cap spelling, teams.Money ($5, $5.50, $0.001). It is used by the packet, the refusal, the teams page header, the card, the settings card and the Settings row. RaiseTo is always twice the ceiling and strictly above it. A spend under a cent is no longer rounded to 0.
  5. Nothing showed a wrap-up's time left. The teams page header and the manager's side column now show wrapping up · 12m left, then under a minute left, then out of time. The figure comes from the held team's persisted wrap, never from a store read on the paint clock.
  6. A plain local launch said a closed team's report is not readable over this connection. localDoors now reads History from the engine's profile on this machine. --host is unchanged: no wire door carries History.

Validation contract

  • A tile's figure equals its conversation's status-line figure. Zero draws nothing, a frame never calls Usage or reads the ledger, and the state words are never cut for the figure.
  • A notice for a team write is drawn only after the store has taken that edit. A refused edit shows the refusal instead, and a sibling edit's refusal is not blamed on it.
  • No tile and no reopened conversation shows started this turn. A task landing still draws its line.
  • For every positive cap c, RaiseTo > c, and the label names exactly RaiseTo. $5 still reads Raise to $10, and every place spells one cap the same way.
  • A team with a wrap-up shows its time left, which changes as the clock moves. Nothing is shown for a team without one or for a closed team.
  • On a local launch a closed team shows its closing report. Over --host, History stays nil.

How it was checked

  • Each contract item has a test that fails on origin/dev and passes here.
  • make pr-ready passed.
  • Hand check: real binary, every seat on deepseek-v4-flash, $0.001 total. Two conversations answered one message each. On the wall their tiles read $0.0008 and $0.0003, the same as their own status lines, at both 200 and 100 columns.

Follows #1429 / #1485 / #1494 / #1436 review

🤖 Generated with Claude Code

AbirAbbas and others added 10 commits September 25, 2026 15:32
A plain `codeaf` reaches its teams through the engine on this machine
(localDoors), and that seam never had a History door, so a closed team's
pane said its report "is not readable over this connection" on the very
machine that holds it. The linked-local road now reads the engine
profile's packets for History. Over --host nothing changes: no wire door
carries a team's history, and the laptop's own files are never read.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A $0.001 cap read `harbor reached its $0.00 cap today` and offered
`Raise to $0`, whose stored ceiling was 0 and lifted nothing; the packet
also rounded a sub-cent spend to 0, and a sub-team's share of such a cap
came out as no cap at all. The team settings card said `$0.0010 a day`
beside it. Every cap figure now goes through one spelling in
internal/teams (Money: `$5`, `$5.50`, `$0.001`), the raise is always
twice the ceiling and strictly above it (RaiseTo), and measured spend
keeps sub-cent precision (RoundMoney). Whole and cent caps keep their
words; the card now says `$5` where it said `$5.00`, as the packet does.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
`Made beta · 1` was drawn at the keystroke, so a write the store refused
(a lock another codeaf held, a file that would not read, a far machine
whose teams kept changing) still said the team was made, and the refusal
went into a note in the conversation behind the wall. Each team edit now
carries a number, the write reports which edits it took and which it
refused and why, and every notice that says an edit happened waits for
its own edit's answer: the wall's `Made`, Organize's `Organized`, and the
teams page's close and move words. A refusal takes the notice's place in
the warning ink with the store's reason; the edit stays in the window and
Undo is still offered.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
The wrap-up clock is kept on the team in teams.json and survives a
restart, but nothing drew it, so a person who asked a team to wrap up
could not see whether it had twelve minutes left or none. The teams
page's header and the manager's side column now say `wrapping up · 12m
left`, `under a minute left`, then `out of time`, from the team the
window holds (started plus bound, never a store read on the paint clock),
and both caches are keyed by the words so they move on the clock alone.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
A turn woken by team traffic starts on a note the session writes for the
model ("Your team's replies started this turn; the person did not
speak. Act on them: ..."). The live conversation never draws it, but the
wall's tiles drew its first line, and so did a reopened manager
conversation when the note carried no team lines. The wake sentences now
live in one place in the session (TeamWakeNote reads the constants the
composers write), and one aside classifier decides for the reopened view
and the tiles: a team delivery draws as its lines, a team wake with
nothing in it draws nothing, and every other aside draws as before.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
#1429 promised each tile would show what it spent, and none did. A
tile's state line now ends in the figure the conversation's own status
line shows, in its spelling: for the conversation in front,
spendShown itself; for one held behind it, the same rule (spendOf, now
shared) over its books, read off the loop with its transcript, and its
tree on the ledger, read by one command at most every five seconds
through the status line's own two doors. Nothing spent draws nothing,
the figure gives way whole to the state words on a narrow tile, and a
frame never asks an agent or reads the ledger.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
# Conflicts:
#	internal/manual/chat/team-questions-and-caps.md
#	internal/session/team_wrapup.go
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
…them

Once Organized waits for the Apply's write, the window holds the teams
read back from the file, whose times carry UTC's location rather than the
clock's; on a machine whose clock is UTC the two print alike and are not
DeepEqual. The test now compares the times as instants.

Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
@AbirAbbas
AbirAbbas merged commit b32d34b into dev Sep 25, 2026
4 checks passed
@AbirAbbas
AbirAbbas deleted the fix/teams-surface branch September 25, 2026 21:41
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant