Skip to content

feat: companies, hire, Muninn gates, Slack hallway - #165

Open
scrypster wants to merge 4 commits into
developfrom
fix/wait-uncollected-done
Open

feat: companies, hire, Muninn gates, Slack hallway#165
scrypster wants to merge 4 commits into
developfrom
fix/wait-uncollected-done

Conversation

@scrypster

Copy link
Copy Markdown
Owner

Summary

Checkpoint of the local harden2 stack that was live as v0.4.0-local-harden2. Not a claim that Fable QA is closed.

  • Company isolation (companies are not workspaces; ADR 005)
  • Grant-gated create_agent / hire
  • Harness Muninn persist + memory gates
  • Leftover-speech strip (including wait-glue around a fresh clock stamp)
  • Threads, replies, For You, capability deny
  • Session queue / Slack hallway (new_request mid-turn)

This is a working-tree checkpoint onto fix/wait-uncollected-done after #163 (wait-uncollected / residual speech) already landed on develop.

Known Fable SNAPs still open — reviewers should not treat this PR as fixing them:

  • stale turn
  • keyring speech
  • muninn config path

Test plan

  • go test ./internal/spaces/ ./internal/server/ ./internal/tools/ ./internal/agent/ ./internal/backend/ ./internal/threadmgr/ (companies, hire, leftover speech, threads)
  • Web: company switcher / create / seat picker; hallway queue on mid-turn send; reply thread + For You
  • Hire / create_agent is grant-gated; capability deny for image / no-delegate on TierLow
  • Muninn: harness persist + memory gates; vault create does not return tokens
  • Confirm this does not close Fable SNAPs (stale turn, keyring speech, muninn config path)
  • Do not treat leftover .tmp-* / FABLE-QA-2026-08-27.md as part of this change (left untracked)

scrypster and others added 4 commits August 26, 2026 14:37
…eric LLM filler

- wait_for_threads with empty thread_ids now includes uncollected terminal threads
  (done/cancelled/error with CollectedAt.IsZero()) that finished before wait was
  called, preventing the race where fast specialists are lost with "No matching
  threads" error. Returns them as Completed immediately.
- Strip generic LLM filler phrases ("How can I assist you further?", "Not
  currently delegating…") from speech after tools, same as playbook glue and
  echoed fragments, keeping teammate prose intact.
- Tests: TestWaitForThreads_UncollectedFinished reproduces and verifies the race;
  TestStripResidualSpeechAfterTools_RemovesFillerLines verifies phrase stripping.

Co-Authored-By: Claude Haiku 4.5 <noreply@anthropic.com>
Empty wait (and invented <thread-id> waits) collect uncollected finished
specialists. After tools, strip playbook fences, stage directions, future-wait
glue, glued echoes, and leftover ticks. Speech-only turn after a specialist
result tells the lead to relay, and delegate_to_agent refuses the caller.

Live S5 on qwen2.5-coder:14b: "Reggie said PONG. 7 times 8 is 56."
Checkpoint of the local harden2 stack: company isolation, grant-gated create_agent, harness Muninn persist, leftover-speech strip, threads, capability deny, session queue.
Collapse persist "I'll wait for the task to complete" playbook around a fresh LocalClock stamp to teammate clock speech.
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