Files
stack/agents/rocko/work/queue-124/suite-bus-second-schema.log
jason.woltje 068d868a99 lead: commit rocko's untracked evidence (4471 files: queue-124 queue-129 queue-171 queue-178 queue-280 queue-31 queue-84 queue-85 queue-94)
Unclaimed files left in the canonical checkout. Inventory: canonical-cleanup-inventory.md (commit-as-evidence groups). detect-secrets scan clean on 2026-11-02: hits are sha256 pins, git object ids, test sentinels already in tracked tests and unit-file lines.
2026-11-02 15:05:15 -06:00

389 lines
37 KiB
Plaintext
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
✔ agents: a held role with nothing on the bus is idle; a role session gets the claim rows unchanged (15.4003ms)
✔ agents: working counts what the holder received and has not read; routed alone is not working (15.520915ms)
✔ agents: input needed is the role's open decisions routed to the human, gated first, then oldest (27.682546ms)
✔ agents: working wins over waiting, and Input needed still shows (12.163397ms)
✔ agents: a new holder doesn't inherit what the last one left unread; decisions stay with the role (13.985177ms)
✔ agents: state reads only its own business, even for a run name both use (12.143687ms)
✔ agents: a message the holder released unread is stranded; the next holder gets nothing and cannot read it (14.344504ms)
✔ agents: a message the holder read is not stranded; one the current holder has not read is not listed (13.796599ms)
✔ agents: stranded is oldest first and capped at 50 for a role (69.044005ms)
✔ agents: stranded is per role and per business (23.883777ms)
✔ agents: a message routed to a held role and not yet received is not stranded (9.896061ms)
✔ REQ-DEC an approval outlives its run and a broker restart; a new run of the instance consumes it once (27.202568ms)
✔ REQ-DEC another instance of the same definition cannot consume an approval, and its refusal consumes nothing (12.465024ms)
✔ REQ-DEC REQ-THREAD-1 a thread approval is consumed only by a run holding the same thread (17.937441ms)
✔ REQ-DEC a later run of the same instance supersedes an open decision; another instance cannot (15.377072ms)
✔ REQ-DEC REQ-THREAD-1 a thread decision is superseded only from the same thread (17.534119ms)
✔ REQ-DEC REQ-THREAD-1 a thread instance decision raised before row 121 is not consumed or superseded by any thread run (21.082304ms)
✔ launch identity is stamped, payload identity is refused and stale holder cannot send (17.338985ms)
✔ decision classes route from policy; gated resolution is human-only, choice and target must match (18.612399ms)
✔ claim exclusion, holder release, gated revoke and rerouting to a new holder are atomic (18.466973ms)
✔ launch events require a human CLI capability; generic emit cannot forge authority events (11.547028ms)
✔ within-role decisions close atomically and invalid options or blocking omissions refuse (10.806124ms)
✔ a recommendation that is not exactly one option key refuses invalid-recommendation after the options (20.941876ms)
✔ observer capabilities read human inbox but cannot mutate or forge launch identity (12.049801ms)
✔ task action subjects and linked decision trail are complete and ordered (18.898219ms)
✔ launch binding is durable and reconnecting requires the identical trusted record (8.559414ms)
✔ business isolation includes inherited object names and cross-business message references (13.484957ms)
✔ authority never transfers between action, target, unresolved or replaced role holder; a later run of the instance keeps it (19.149118ms)
✔ task projection uses schema current view, skipping earlier and equal-start polls (10.739153ms)
✔ revocation permanently bars the old run from reclaiming first, including after broker restart (15.604747ms)
✔ empty message references refuse before storage; refusal-evidence failure stays a typed error (9.910086ms)
✔ both arbiters require human resolution when their cross-role route is themselves (16.578314ms)
✔ the shipped coder role raises task.reassign as gated to the human; task.scope.change stays cross-role (16.53728ms)
✔ S1 adapter takes resolved limits and refs, rejects mismatched instance, never mutates input (1.188303ms)
✔ REQ-COS-1, REQ-ROLE-2: the chief of staff ends a run with a reason and no decision, and the reason is logged (23.356148ms)
✔ REQ-ROLE-2: a role without role.end still needs a resolved decision to revoke (22.15661ms)
✔ REQ-ROLE-2: storage accepts a revoke with a reason or a decision and aborts one with neither (14.19876ms)
✔ REQ-ROLE-2: the chief of staff may still cite a decision, and a decision alone is the old path (14.631459ms)
✔ REQ-ROLE-2: a role without role.end still ends a run through a resolved decision, which is recorded and has no reason (17.528013ms)
✔ REQ-ROLE-2: a reason is required, bounded, and never sent with a decision (18.819811ms)
✔ REQ-COS-1: the chief of staff cannot end its own run; its end of the assistant gets past the protection (17.130368ms)
✔ REQ-LIMIT-1, REQ-COS-1: organization.set from the chief of staff reaches the shared writer, named as the actor (14.922317ms)
✔ REQ-LIMIT-1, REQ-COS-1: a refused organization.set logs action.refused and no action.allowed, like a refused limits.set (20.467332ms)
✔ REQ-LIMIT-1: organization.set is refused for every caller whose role file lacks organization.change (21.459832ms)
✔ REQ-LIMIT-1: the chief of staff is logged as allowed, and organization.set takes only the human's keys (23.735492ms)
✔ REQ-ROLE-3, REQ-LIMIT-1: a chief-of-staff change is validated, written and logged like a human's; an invalid one is refused (45.256837ms)
✖ REQ-ROLE-2, REQ-COS-1: the 3c→3d migration lets the chief of staff end a held role with a reason; neither is still refused (48.519329ms)
✔ comment cursors isolate businesses, move only forward and remain append-only (12.359872ms)
✔ only trusted sync writes validated cursors; events and cursor share rollback (9.118566ms)
✔ explicit 3b copy migration preserves evidence and opens as 3g; normal startup never migrates (45.641761ms)
✔ migration refuses active writers and drifted legacy schemas, with no partial upgrade (70.20129ms)
✔ named migration registry chains 3b through 3g to a fixture-only future version in order (50.41942ms)
✔ migration refuses mismatched source metadata without changing schema or evidence (33.897851ms)
✔ offline command migrates only the supplied fixture root and reports usage errors (131.241081ms)
✔ credentials gives human and reader sessions service, account, role, date and state, and nothing else (12.903601ms)
✔ credentials refuses a role session and any argument (11.826005ms)
✔ credentials reads the status on each request, and a broker without one lists none (15.307598ms)
✔ the broker process answers credentials without a token, path or variable in its output, log or store (91.076863ms)
✔ only validated broker references load; returned data and exceptions cannot expose a known token (2.300171ms)
✔ bad file modes, symlinks, repository/data paths, malformed tokens and missing dates refuse (1.393178ms)
✔ expiry refuses use and env references never become client data (0.472592ms)
✔ S1 parsed service refs work, service mismatch refuses, Gitea rotation due is a warning state (1.030219ms)
✔ opaque tokens shorter than 16 characters refuse before use (0.235842ms)
✔ each C-suite role file carries the same two lists: human, chief-of-staff, pm, cto (1.346071ms)
✔ chief-executive-officer: messages to and from the user, chief of staff, pm and cto pass (40.267974ms)
✔ chief-executive-officer: a message to or from the coder, reviewer or assistant is refused and logged, and nothing is stored (32.997772ms)
✔ chief-executive-officer: another C-suite role isn't on the lists either (26.288053ms)
✔ chief-financial-officer: messages to and from the user, chief of staff, pm and cto pass (31.88264ms)
✔ chief-financial-officer: a message to or from the coder, reviewer or assistant is refused and logged, and nothing is stored (29.806102ms)
✔ chief-financial-officer: another C-suite role isn't on the lists either (24.809854ms)
✔ chief-information-officer: messages to and from the user, chief of staff, pm and cto pass (29.831216ms)
✔ chief-information-officer: a message to or from the coder, reviewer or assistant is refused and logged, and nothing is stored (27.902479ms)
✔ chief-information-officer: another C-suite role isn't on the lists either (26.263508ms)
✔ chief-information-security-officer: messages to and from the user, chief of staff, pm and cto pass (30.608028ms)
✔ chief-information-security-officer: a message to or from the coder, reviewer or assistant is refused and logged, and nothing is stored (28.93643ms)
✔ chief-information-security-officer: another C-suite role isn't on the lists either (25.212081ms)
✔ chief-marketing-officer: messages to and from the user, chief of staff, pm and cto pass (31.202906ms)
✔ chief-marketing-officer: a message to or from the coder, reviewer or assistant is refused and logged, and nothing is stored (30.221627ms)
✔ chief-marketing-officer: another C-suite role isn't on the lists either (25.52277ms)
✔ a human resolve sends the raising role one message from the human, and its request is the answer (26.899815ms)
✔ a cross-role decision resolved by its arbiter comes from that role and run, with no request (16.299884ms)
✔ a human withdraw sends one message with the note (16.179181ms)
✔ a human seen before the close leaves the request on the close's answer, not the seen (18.669287ms)
✔ the raising run's withdraw, a supersede, a within-role raise and seen send nothing (20.191184ms)
✔ refused closes send nothing: invalid-choice, decision-closed, not-resolver (20.085271ms)
✔ a raising role nobody holds at the close gets the message on the next claim (17.668963ms)
✔ a human DECISION send keeps its own instruction as the request, not a close's answer (16.454503ms)
✔ a cross-role raise whose arbiter the raiser does not hear from is refused and stores nothing (25.350257ms)
✔ a gated raise by a role that does not hear from the human is refused and stores nothing (19.593823ms)
✔ a route the raiser hears from is allowed, checked from the route to the raiser (23.279124ms)
✔ a refused supersede withdraws nothing (19.383006ms)
✔ the assistant's within-role and gated raises still work (19.928865ms)
✔ roles lists open decisions routed to a role, and never the human inbox (37.052856ms)
✔ recent lists closed decisions of every route, newest close first, with how each closed (37.846659ms)
✔ recent gives the closing event as closed when the decision was seen first (21.709141ms)
✔ recent stops at RECENT rows (69.772575ms)
✔ every row is what trail already gives the same session for that id (32.694945ms)
✔ a role session can't list decisions, so it can't read another role's open decisions (30.955985ms)
✔ decisions is a read: one business, strict arguments, nothing written (28.341588ms)
✔ endLaunch writes session.ended, releases the run claim and kills its capabilities (13.397777ms)
✔ endLaunch refuses an unknown run, a second end and a rebind of the ended run (9.200438ms)
✔ a restarted broker refuses to rebind an ended run; a refused rebind leaves the run unbound (10.215548ms)
✔ endLaunch leaves a claim another run took alone (11.047967ms)
✔ refuse records action.refused against the caller with the code only (8.273152ms)
✔ launches off refuses role.launch with launch-revoked until launches on (12.017585ms)
✔ broker process: launch ops authorize role.launch, record refusals and end runs (99.40251ms)
✔ REQ-WAIT-1: the broker hard waits are exactly the list, and match the business vocabulary (1.056268ms)
✔ REQ-WAIT-2: a business granting a hard wait at either class is refused; the actions that left are grantable (11.621296ms)
✔ REQ-DEC-2: every hard wait goes to the human, cited or not, and the arbiter cannot resolve it (300.973751ms)
✔ REQ-DEC-2: a gated raise citing the current spec goes to the arbiter for its domain; uncited, to the human (152.844256ms)
✔ REQ-DEC-2: an arbiter-approved cited gated decision authorizes the raiser, and the human cannot resolve it (39.918635ms)
✔ REQ-DEC-2: a cited merge raised by merge-gate goes to the technical arbiter; a merge raised without the grant routes by citation (58.643214ms)
✔ REQ-DEC-2: a stale or unconfirmed citation refuses without a decision; an arbiter raising its own goes to the human (89.955406ms)
✔ Q169: the chief of staff's end of the assistant is not refused role-end-refused; its own run and another ender's are (25.329162ms)
✔ Q169: another role's cited revoke of the assistant, resolved by an arbiter, is refused (58.35241ms)
✔ Q169: a revoke of the assistant citing a decision the human resolved is not refused by the protection (40.772572ms)
✔ Q169: a cited revoke of a role not in END_PROTECTED still goes to the arbiter, and executes (40.905998ms)
✔ Q169: a role granted role.revoke at either class still sends a revoke of the assistant to the human (58.619953ms)
✔ human proof binds CLI entry, process start and nonce; agents and incomplete ancestry refuse (1.387269ms)
✔ process reader gets own kernel identity without exposing environment values (0.405047ms)
✔ EACCES ancestor environments skip only markers; commands and registered launches still refuse (0.598538ms)
✔ real pid 1 remains inspectable when its environment is protected (0.253704ms)
✔ REQ-DEC-2: a merge-gate raise its arbiter resolved lands through the host op: checkLand answers the facts and a ticket, records nothing, and recordLand spends the decision once (27.383073ms)
✔ checkLand refuses on the decision and the review (26.320241ms)
✔ REQ-LAND-1: a gated merge decision refuses not-authorized, cited and approved by the arbiter or uncited and approved by the human (70.628006ms)
✔ REQ-LAND-1: a within-role merge grant refuses not-authorized at the land (18.699904ms)
✔ a cross-role merge that routes to the human, because merge-gate is its own arbiter, lands on the human's CLI answer (20.012924ms)
✔ a merge option with no first line refuses no-subject, as land-work does (17.432979ms)
✔ checkLand refuses with land-work's codes past the authority check, and a decision raised for refactor never lands (45.835616ms)
✔ a ticket outlives the run that asked, and recordLand checks the task again (27.625444ms)
✔ landRefused files the code on the task, tells the role only with notify, and ends the ticket (27.27364ms)
✔ landHeld is true only for an approved, unspent cross-role merge decision this role raised for a task in this thread (21.50887ms)
✔ no run may write the action.allowed for git.merge.protected itself (12.406684ms)
✔ a message to a stopped role sends launch.by one notice, and the result says so (22.347371ms)
✔ a message to a role outside launch.instances says so in its result and in the notice (11.643229ms)
✔ a message to a running role sends no notice and its result is unchanged (9.070032ms)
✔ a re-route at a claim, a release and claim, and a broker restart send no second notice (15.084983ms)
✔ a run launched but not yet claimed counts as no holder (8.037861ms)
✔ no notice for a message to launch.by, from it, from a tester, to the human, or in a thread to a thread instance (17.955276ms)
✔ a business with no launch block tells nobody and says there is no launcher (7.76981ms)
✔ the notice sender stays internal: no role is named _bus and no caller can send as it or to it (28.647954ms)
✔ limits binds actor from human proof and rejects role, reader, tester and forged actor (18.336718ms)
✔ runtime wires verified human settings to the actual shared file writer and actor receipt (49.077041ms)
✔ uncertain organization receipts leave bus startup and reads alone but refuse writes until reconciled (26.729454ms)
✔ within-role sends cite an open gated launch decision without spending it or naming it in grants (22.455882ms)
✔ missing and foreign-business citations refuse and roll back message and grant (13.119654ms)
✔ cross-role sends still need a matching resolved decision and consume it once (17.299268ms)
✔ messages pages all human messages newest first without writes; read state is history (246.835433ms)
✔ messages refuses role callers, invalid paging and cursors outside this human feed (20.722405ms)
✔ views messages passes only its paging arguments through (0.229141ms)
✔ messages isolates businesses even with a valid foreign cursor (12.960492ms)
✔ the assistant sends to the user and to the chief of staff only (28.576967ms)
✔ an assistant send to any other role, or to the tester, is refused and logged (23.588851ms)
✔ only the user and the chief of staff may send to the assistant; the tester is refused by default (24.48619ms)
✔ REQ-ASSIST-2 REQ-THREAD-1 thread.send to an instance that does not hear from the user is refused and stores nothing (19.34334ms)
✔ a sender-side list alone refuses a send to a role that has no list (20.41218ms)
✔ a target-side list alone refuses a send from a role that has no list (21.533903ms)
✔ the sender list is checked before the target list (18.546778ms)
✔ roles without the field behave exactly as before (27.653456ms)
✔ a business with no role definitions at all is unlimited (20.916939ms)
✔ a malformed messaging field refuses at boot (9.010342ms)
✔ the assistant's review.request to a reviewer is refused and logged, even with an approved decision (24.747918ms)
✔ a review.verdict to the assistant from a role outside its receiveFrom is refused and logged (25.546146ms)
✔ review requests and verdicts between roles without the field are unchanged (22.301289ms)
✔ 3f copy migrates to 3g preserving every old column/row, with an empty instance_names and null to_name (66.228421ms)
✔ REQ-MSG-2: the chief of staff names an instance under its within-role grant, and the write is logged (18.256709ms)
✔ REQ-MSG-2: the human names an instance through the CLI (12.987203ms)
✔ REQ-MSG-2: a role without the grant, or holding it cross-role, is refused not-authorized (14.932609ms)
✔ REQ-MSG-2: a name is unique in the business and is never an instance key or a role name (27.3317ms)
✔ REQ-MSG-2: a send by name reaches the instance and records both; a send by instance key is unchanged (23.344626ms)
✔ REQ-MSG-2: an instance key beats a name that equals it, as when a later instance takes the key (13.327079ms)
✔ REQ-MSG-2: a role name beats a name that equals it, as when a later definition takes the word (sage-0590) (14.31475ms)
✔ plugins and plugins.set refuse every non-human session and a forged actor, and pass only the patch with the verified actor (15.857084ms)
✔ runtime: the switch changes the organization file, the receipt carries the actor, and a bad shape, an unknown module and a stale revision are refused with nothing written (55.638975ms)
✔ vikunja:19/309 through the broker, a patch switches the kinds it names and keeps the rest; null removes one kind and is trailed (23.080904ms)
✔ broker process binds trusted launches, offers reader capabilities, refuses human mutation, closes cleanly (90.513912ms)
✔ startup token refusal returns safe code without value or partial listening broker (63.410477ms)
✔ loaded fixture token is absent from socket replies and SQLite, including refusal evidence (94.23515ms)
✔ killed broker leaves an explicit stale lock; another process cannot silently reclaim it (140.534439ms)
✔ trusted host registers later launches; socket clients never have a registration verb (93.877053ms)
✔ runtime excludes declared project roots even when host supplies no repoRoots (66.684282ms)
✔ a refused launch binding leaves the broker and existing capabilities alive; bad protocol stops it (95.345769ms)
✔ D1: committed write with a failed receipt refuses outcome-unknown without action.allowed (15.281408ms)
✔ D2: spec.read refuses without content if its role is released during the read (10.199726ms)
✔ D3: spec.read secret check refuses flagged content without content (9.780224ms)
✔ D3: spec.read secret check refuses flagged subject without content (9.427349ms)
✔ a human lists, opens and saves; the save is one commit by the business human (100.417416ms)
✔ an agent and a reader refuse every file verb and nothing is written (36.69637ms)
✔ a stale base refuses stale-base and writes nothing (63.181214ms)
✔ paths outside the spec and docs refuse, as do unknown projects, missing files and odd arguments (50.550928ms)
✔ without a project adapter the file verbs refuse project-not-configured (22.844731ms)
✔ on the socket a save may carry 1 MiB of text; every other request keeps the 64 KiB limit (137.794766ms)
✔ a request that names the save verb first and another verb last is refused at 64 KiB (38.779469ms)
✔ two saves racing for one repository make one commit (79.219851ms)
✔ Broker keeps the existing sandbox client import closure: no new imports or lazy project import (1.436821ms)
✔ without a trusted project adapter all three async paths refuse project-not-configured (35.411706ms)
✔ real startBroker injects the project adapter for socket reads and bound-author record writes (61.283089ms)
✔ a reply is listed for human and reader sessions, and its delivery rows are unchanged (28.536755ms)
✔ the reply still reaches the human message.receive (mosaic talk) after the Console showed it (14.407067ms)
✔ a message with no reply gives an empty list (11.527833ms)
✔ replies come oldest first and stop at REPLIES (58.049969ms)
✔ an id that names no message in the business refuses message-not-found, and the refusal is recorded (21.420536ms)
✔ strict arguments; a role session gets human-required (24.552102ms)
✔ views passes replies through as one call with the id (0.206129ms)
✔ requirements returns the committed list to a holding role session, and no one else (20.84805ms)
✔ the PM's prd.approve with no task, when no id fits, reaches the human's Inbox (11.606686ms)
✔ the PM's non-blocking role.revoke with no task reaches the human's Inbox (12.086413ms)
✔ a push is recorded as the action.allowed for git.push.working on the task, and only the host records one (22.654605ms)
✔ review.request names the latest pushed commit and sends the reviewer a REVIEW-REQUEST (16.445312ms)
✔ review.request says which run holds the reviewer role, or null, and a null request waits for a claim (18.92025ms)
✔ review.request refuses a commit that isn't the latest push, a non-reviewer and a role without the action (26.302175ms)
✔ reviewFetch answers only the addressed reviewer, for the request it cites (17.034614ms)
✔ review.verdict answers one request once, to the role that asked (19.00404ms)
✔ task.close on a pushed task needs an approve verdict for the latest push (25.608249ms)
✔ a refusal the host decided is filed on the task it names, and only a task ref counts (15.831917ms)
✔ v3b prototype refusals, views and append-only mutations (68.393363ms)
✔ gated approval authorizes once, survives store reopen, and fresh approval works (23.738894ms)
✔ another run of the same instance consumes an approval once; a failed check leaves it usable (14.746639ms)
✔ two scheduled callers have exactly one grant and one consumed refusal (10.734457ms)
✔ failed commit rolls consumption back; cross-role consumes and within-role stays reusable (22.652281ms)
✔ class drift gated to cross-role refuses before consumption (14.62085ms)
✔ class drift cross-role to gated refuses before consumption (15.321881ms)
✔ class drift gated to within-role refuses before consumption (13.92681ms)
✔ class drift cross-role to within-role refuses before consumption (16.231194ms)
✔ class drift within-role to gated refuses before consumption (13.328797ms)
✔ class drift within-role to cross-role refuses before consumption (12.871907ms)
✔ message.send consumes approval and prevents a later send or authorize (16.398226ms)
✔ role.revoke consumes approval and prevents a later revoke or authorize (18.328821ms)
✔ 3e copy migrates through 3f to 3g preserving every old column/row and adding null spec citations (68.748289ms)
✔ a human spec save sends one notice to each pm and cto, naming the commit, and each commit sends its own (111.701033ms)
✔ no notice for a docs save, an agent record commit, a git commit outside the Console, or a refused save (126.70635ms)
✔ a notice to a role no run holds waits for a claim, and launches nobody and tells nobody (60.375168ms)
✔ a business without a pm or a cto saves the spec and sends nothing (52.74673ms)
✔ a notice that cannot be stored answers outcome-unknown, and the commit stands (60.6969ms)
✔ a BLOCK reaches the chief of staff, the chief relays it to the assistant in the user's thread, and the commit stands (69.346829ms)
✔ with no thread a BLOCK still reaches the chief of staff, and the relay to the assistant is refused (63.745123ms)
✔ within the notice's project the relay lands in the user's most recently opened thread (70.679495ms)
✔ a more recently opened thread in another project does not take the relay (69.937462ms)
✔ a BLOCK is refused from anyone but a pm or cto, to anyone but the chief of staff, and outside a reply to its own notice (77.756432ms)
✔ a role cannot forge a spec notice: its text opens neither a BLOCK nor the assistant's thread (73.709252ms)
✔ the bus receives nothing: a reply to a notice addressed to _bus is refused (72.935996ms)
✔ real socket awaits spec reads, record writes and cited raises; other requests still return normally (97.40983ms)
✔ real socket preserves asynchronous refusal codes and disconnects its transient proof (28.219529ms)
✔ two real socket writes to one repository yield one commit and one project-busy refusal (43.6827ms)
✔ client disconnect during await tolerates late reply (42.548523ms)
✔ client disconnect during await tolerates late refusal (22.74151ms)
✔ N-a: slow admitted record.write returns its committed result after the idle deadline (198.294723ms)
✔ current citation is recorded; docs commits do not stale it and a new spec never reopens settlement (96.114748ms)
✔ stale, unconfirmed, missing and partial spec citations refuse without inserting a decision (88.716133ms)
✔ uncited raises retain their synchronous path and spec read is available to any held role in its business (39.89501ms)
✔ record writes bind the session author, require authority and refuse spec and impersonation paths (43.518545ms)
✔ REQ-COS-1: the pm asks the chief of staff for roles and counts; the chief receives a STAFF-REQUEST and answers it (24.556892ms)
✔ REQ-COS-1: only the pm can send a staff request; every other session is refused and the chief of staff hears nothing (22.114954ms)
✔ REQ-COS-1: a pm without message.send is refused like any other gated action (11.421928ms)
✔ REQ-COS-1: the request goes to the business launcher, and only when that is a chief of staff (31.35829ms)
✔ REQ-COS-1: the sender is judged by definition: an instance `lead` of the pm definition can ask, an instance `pm` of the coder definition can't (27.693873ms)
✔ REQ-COS-1: the launcher is judged by definition: an instance `boss` of the chief-of-staff definition receives, a `chief` of the coder definition gives no-chief-of-staff (25.349865ms)
✔ REQ-COS-1: a refused staff request leaves no staff.request action.allowed event (15.471938ms)
✔ REQ-ASSIST-2: the role definitions' messaging lists hold for a staff request, sender and recipient (39.162103ms)
✔ a staff request names a task, 1 to 10 distinct roles and counts of 1 to 20; nothing else is accepted (30.176761ms)
✔ REQ-COS-1: a staff request grants nothing: the pm still can't launch and the chief of staff launches as before (17.077135ms)
✔ a business that never switched launches reads allowed with no time and no event (13.954992ms)
✔ launches revoked and then restored read allowed, with the restore time and event id (11.360883ms)
✔ a task closed on the tracker leaves the open list, and total counts the open ones (11.031498ms)
✔ a tombstone is not open (10.174111ms)
✔ the open list stops at the cap and says so; total still counts every open task (12.832434ms)
✔ a role and a reader session read state; arguments, and an unbound cap, refuse (10.549967ms)
✔ a human session reads the same state, with the same cap (12.315148ms)
✔ reading state writes nothing: every table keeps its row count (11.253396ms)
✔ creates private WAL store and excludes a second writer until explicit close (10.833233ms)
✔ rollback is atomic and schema metadata is checked against trusted DDL, not just itself (10.483091ms)
✔ existing empty database and symlink runtime directory refuse, never initialize over damage (10.445832ms)
✔ crash during a transaction recovers no partial event after explicit fixture-only lock removal (46.601311ms)
✔ writer refuses mixed at/read_at forms atomically, even through trusted SQL helpers (7.687052ms)
✔ async transactions refuse before invoking their function (5.935395ms)
✔ the session default fits under the reply cap and pages to the end with next (118.074699ms)
✔ the short form: no description, assignees by role, every listed key (74.940256ms)
✔ each filter, alone and together, and total counts every match (172.768745ms)
✔ task_ref reads one task in full, as the whole board has it (97.859624ms)
✔ no arguments is the read the Console and mosaic make, unchanged (78.784209ms)
✔ an unknown argument or a bad value refuses invalid-request (331.165434ms)
✔ tasks rows carry priority and requirement for every session that reads tasks (32.74704ms)
✔ the read model rebuilds from the ledger: a reopened bus and each trail give the same values (34.361402ms)
✔ an empty business and one with snapshots but no task.created read cleanly (9.123329ms)
✔ recordTask keeps sync reads and a role write apart (18.165017ms)
✔ read_at must be one canonical UTC format, so the projection compares strings safely (7.954018ms)
✔ a bad entry refuses the whole record (8.121813ms)
✔ taskView reads the projection for one business (10.190063ms)
✔ requestTask hands only a holder and a task verb to the handler, and records refusals (20.517955ms)
✔ the server sends task verbs to the adapter with its own timeout; other verbs stay synchronous (281.717593ms)
✔ without an adapter the server refuses every task verb (18.776796ms)
✔ the runtime refuses an invalid adapter and closes a valid one (21.679187ms)
✔ the process loads the S3 adapter from plain-data trackers (182.586584ms)
✔ the tester binds only when the business sets bus.tester to exactly true (56.16971ms)
✔ a business may not name a role tester, so the tester address is never a role (17.263386ms)
✔ every verb outside the tester list refuses tester-refused and is recorded against the tester (37.98915ms)
✔ a tester message is from tester, starts [mos test], and writes no human.input or authority (15.724075ms)
✔ a role answers a tester only in reply to a tester message, and the answer never reaches the human (20.590783ms)
✔ the tester reads the human views a reader reads (22.077223ms)
✔ tester proof binds its own CLI, start time and nonce, refuses a managed run and allows an agent (1.228789ms)
✔ neither CLI's nonce proves the other: each proof is bound to its own CLI and nonce variable (0.355483ms)
✔ testerNonce reads only the tester's variable and gives null on any read error (0.22402ms)
✔ an envelope carries exactly one of cap, human and tester; no tester authenticator refuses (19.22084ms)
✔ tester-cli.mjs binds through the runtime when the switch is on, and refuses off or under a run marker (689.301519ms)
✔ REQ-THREAD-1 REQ-ORG-2: the 3d→3e migration adds the thread tables and leaves messages from before threads as written (66.76368ms)
✔ REQ-THREAD-1: a 3d bus with a changed schema is refused and keeps its version and tables (41.723484ms)
✔ REQ-THREAD-1: the offline command prints the kept-message counts before the ready line (89.148736ms)
✔ REQ-ROLE-2 REQ-THREAD-1: one holder per thread, through the broker and the trigger (31.151918ms)
✔ REQ-ROLE-2 REQ-THREAD-1: the 3e triggers refuse writes that skip the broker (51.96643ms)
✔ REQ-MSG-1: a message to or from the assistant names its thread, or is refused (24.861703ms)
✔ REQ-MSG-1: the chief of staff's reply comes back to the thread that sent the work (539.940064ms)
✔ REQ-MSG-1: a reply can't carry one thread instance's thread to another thread instance (15.273156ms)
✔ REQ-THREAD-1 REQ-USER-2: one thread's messages never reach another thread's holder (21.482271ms)
✔ REQ-LAUNCH-1: a message to a thread with no holder waits, and the next holder gets it (22.655675ms)
✔ REQ-THREAD-2 REQ-LAUNCH-1: threadIdle releases only a thread with nothing waiting, and only for its holder (28.327907ms)
✔ REQ-THREAD-2 REQ-LAUNCH-1: a message delivered to a run that ended unread doesn't hold up the next holder (23.130977ms)
✔ REQ-ROLE-2 REQ-THREAD-1: an approved role.revoke never reaches a thread run, and the thread stays held (19.392909ms)
✔ REQ-USER-2: the human verbs refuse another owner's thread (20.971779ms)
✔ REQ-THREAD-1: thread.create refuses when the business has no thread instance or more than one (17.316137ms)
✔ REQ-ORG-2: projects and threads are named once, and the repo names a business project (19.69061ms)
✔ REQ-THREAD-2: thread.messages returns the thread's history in pages and writes nothing (69.835154ms)
✔ socket capability stamps launch identity; shared views use wire, no SQL client (21.553037ms)
✔ two wire claims serialize; a lost reply never automatically retries (15.952316ms)
✔ malformed, oversized and identity-forging envelopes refuse without echoing input (8.683424ms)
✔ client preserves UTF-8 when a response divides a multibyte character (11.260531ms)
✔ committed mutation followed by dropped reply reports unknown and is never retried (11.254883ms)
✔ REQ-LIMIT-4 usage protocol binds run identity, requires a delivered turn and isolates businesses (20.724922ms)
✔ REQ-LIMIT-4 3g copy migrates to 3h preserving every old column, row and sequence; new usage table is empty (68.499435ms)
✔ REQ-PLUG-1 runtime reaches transcript only through loader, over the real bus socket (28.056878ms)
✔ REQ-LIMIT-4 loader source records new turn kinds, excludes history and retries exactly once (15.329125ms)
✔ REQ-LIMIT-4 cut: unknown is durable and logged next to every total (9.852732ms)
✔ REQ-LIMIT-4 disabled: unknown is durable and logged next to every total (8.743488ms)
✔ REQ-LIMIT-4 missing-begin: unknown is durable and logged next to every total (7.364961ms)
✔ REQ-LIMIT-4 no-new-usage: unknown is durable and logged next to every total (8.001319ms)
✔ REQ-LIMIT-4 rewrite: unknown is durable and logged next to every total (7.781964ms)
✔ REQ-LIMIT-4 unfinished turn remains visibly unknown after accounting restarts (6.650739ms)
✔ usage records are append-only (7.146755ms)
✔ REQ-LIMIT-4 parse failure logs its safe code, never transcript content (7.661781ms)
✔ REQ-LIMIT-4 resumed run baselines history and exact totals do not overflow (10.334839ms)
✔ REQ-PLUG-1 core has no transcript import and disabled sources do not read any transcript (7.612739ms)
✔ REQ-LIMIT-4 a resumed thread bills only new assistant messages to its next run (7.696291ms)
✔ web.search: a granted role gets labelled results, and the call is trailed with role, run, verb and query (14.839587ms)
✔ web.fetch: a granted role gets the page as labelled text, and the call is trailed with the url (14.835858ms)
✔ a role without the grant is refused, the refusal is logged with the verb, and nothing is fetched (13.287849ms)
✔ a broker with no web service refuses a granted role (8.588074ms)
✔ bad requests are refused: unknown verb, extra or missing argument, not a string, a human or reader session (12.812077ms)
✔ a session that is not the role holder is refused (7.934803ms)
✔ web.mjs's fences hold on the broker side: refusals are normal results with the fixed reason (30.43788ms)
✔ web.search with no search source configured is a refused result, not an error (10.321255ms)
✔ a search source that fails with its own refusal, or that throws, is handled (12.316809ms)
✔ a slow search source ends in a refusal at the deadline (61.007836ms)
✔ a secret in the arguments is refused before anything is trailed or fetched (9.480229ms)
✔ over the socket: the server routes web verbs to the service; other roles are refused; no service is web-not-configured (23.790529ms)
✔ busBusiness: the web grant comes from "web" in the resolved tool limit (0.253135ms)
✔ webServices: the business's search-source plug-in and web.searxng var make web.search work; without either it is refused as not configured (30.309145ms)
✔ an ungranted call is refused at once: no admission, no wait, nothing touched (14.534545ms)
✔ over the socket an ungranted caller is dropped by the server timeout and a granted one gets the longer wait (327.448579ms)
✔ a search that never answers is aborted at the deadline, the module sees the signal, and the call is trailed as refused (timeout) (70.843263ms)
✔ a fetch that stalls is cut off at the deadline: the request is destroyed, not left running (92.749509ms)
✔ one query limit: over SEARCH_MAX_QUERY_CHARS or empty is refused with the same reason before any backend, and the tool schema carries the same number (13.500293ms)
ℹ tests 360
ℹ suites 0
ℹ pass 359
ℹ fail 1
ℹ cancelled 0
ℹ skipped 0
ℹ todo 0
ℹ duration_ms 16306.640635
✖ failing tests:
test at packages/bus/tests/chief-of-staff.test.mjs:385:1
✖ REQ-ROLE-2, REQ-COS-1: the 3c→3d migration lets the chief of staff end a held role with a reason; neither is still refused (48.519329ms)
AssertionError [ERR_ASSERTION]: Expected values to be strictly equal:
'3h' !== '3g'
at TestContext.<anonymous> (file:///mnt/storage/src/mosaic-stack-rocko-124/packages/bus/tests/chief-of-staff.test.mjs:396:10)
at process.processTicksAndRejections (node:internal/process/task_queues:104:5)
at async Test.run (node:internal/test_runner/test:1409:7)
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
generatedMessage: true,
code: 'ERR_ASSERTION',
actual: '3h',
expected: '3g',
operator: 'strictEqual',
diff: 'simple'
}