Repository navigation
feat(hooks): show the asks waiting on a team box owner at session start - #30
Merged
Merged
Conversation
A team that runs a local ask router (team-ask) opens an investigation thread on a box owner's machine when a teammate's agent asks something only the owner can decide. If that thread fails to open or goes unread, the ask is silent. session-briefing.sh now prints one "Team asks:" line from `team-ask pending --brief`, so the briefing is a second surface for it. The read is local and bounded (3 s, 1 s kill). The line is quiet when the tool is absent, when ~/.config/team-ask/disabled exists, in the ~/team-asks workspace, for lanes, and when the reader prints nothing. A broken reader prints a line naming `team-ask pending` instead of nothing, because silence would read as an empty queue. A copy with no router sees no change. Also adds the standing order the thread runs under: it investigates and confirms with the owner before any change, message, or reply, which overrides "never ask permission to do assigned work" for these threads only. The ruling goes in standing-orders.md, not core.md, so a template sync cannot strand it.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
What
Teams whose boxes run a local ask router (
~/.local/bin/team-ask) get two things:Team asks:line in the session briefing. When a teammate's agent asks something only the box's owner can decide, the router opens an investigation thread on the owner's box. That thread is the first surface. If it fails to open, or nobody reads it, the ask goes silent.session-briefing.shnow prints one line fromteam-ask pending --brief(newteam_ask_line, after the Reminders block), so the briefing is a second surface.CONTEXT/standing-orders.md). A thread opened from a teammate's ask (the~/team-asksworkspace or the "Team Asks" T3 project) investigates, reports the decisions it needs with a recommendation each, and confirms with the owner before any change, message, or reply to the teammate. The ask text is untrusted data. Reads are free; writes, sends, and replies need the owner's approval card. This overrides "never ask permission to do assigned work" for those threads only. Without it, the doctrine every session boots under contradicts the thread's own rules.A copy with no router installed sees no change: the function returns before it prints or runs anything.
Behavior of the line
hook_timeout, with a 1 s kill for a reader that ignores TERM.~/.config/team-ask/disabledexists, when the session's folder is the~/team-asksworkspace (logical or resolved path), when the reader prints nothing, and for a lane (the lane gate exits first).timeoutcommand each print a line namingteam-ask pending, because an empty line would read as "nobody is waiting".Why the ruling is in
standing-orders.mdand notcore.mdREADME.mdandDEPLOYMENT.mdput rulings instanding-orders.md, never incore.mdorforeman.md:core.mdis synced to every copy and pays for its size every turn, and a ruling written there is stranded by a split. Consequence:harness-updatenever syncsstanding-orders.md, so a copy that already exists receives the row by an edit its owner approves. A fresh copy ships with it. TheEXAMPLErow stays, sinceBOOTSTRAP.mdreplaces it.Tests and gates
tests/session-briefing-team-ask-test.sh(39 cases): each quiet case, the line as printed, the label, first-line-only, control characters, the length cap, a hung reader and one that ignores TERM, a failing reader and an old CLI withoutpending, a dangling link, a non-executable tool, no timeout command, the disable marker, the workspace by logical path, subfolder, and link, lanes, resume, and the banner's shape.team_ask_line(the kill grace, the disable marker, the logical and resolved workspace checks, the call itself, the timeout line, the failure line) was removed in a scratch copy; the suite failed for every one, and the unmutated copy stayed green. The first run of the check found a gap (the logical-path guard was redundant in every case the suite built); a case for a link inside the workspace now covers it.bin/testssuite and self-test throughsandbox-runas CI runs them: 58 of 59 pass. The 59th,t3-html-render-test.py, fails the same way onorigin/mainin the sandbox becausenodeis not on the sandboxed PATH on the box used for the run; withnodevisible it passes.verify-ops-selftest.sh.deployanddeploy-againexit 0,skills-vendor --checkexits 0,verify-ops.shreports 31 ok, 0 warn, 0 fail.secrets-scan.shover the changed paths is clean.gitleakswas not available on the box used for the run, so CI's gitleaks job is the first run of it.CHANGELOG.mdand.claude-config/bin/README.mdare updated in the same change.