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.
176 lines
11 KiB
Plaintext
176 lines
11 KiB
Plaintext
== packages/business rc=1
|
||
✔ the role file loads and resolves through loadBusiness (4.565205ms)
|
||
✔ the shipped file is exactly the approved list (0.544666ms)
|
||
✔ the assistant's authority is message.send and record.write within role (1.393948ms)
|
||
✔ the assistant talks to the user and the chief of staff only, and no other shipped role is limited (0.467081ms)
|
||
✔ a business grant through limits does not widen the role (1.125713ms)
|
||
✔ a launch block whose by is the assistant is refused (1.151128ms)
|
||
✔ the instance takes no credential references and no tracker (1.789449ms)
|
||
✔ an arbiter whose role definition declares messaging lists is refused, for each kind (2.710312ms)
|
||
✔ an arbiter without messaging lists is accepted beside the limited assistant (1.465554ms)
|
||
✔ the contract passes work to the chief of staff and directs no one (0.477658ms)
|
||
✔ REQ-HARN-2: the assistant holds the web grant, and no other role file does (0.949915ms)
|
||
✔ record.write is within-role for the eleven approved v2 agents, never gated-only (1.991658ms)
|
||
✔ the four shipped version 2 roles load (2.239359ms)
|
||
✔ shipped role scopes match addendum B section 2 and the SR runbook (0.670779ms)
|
||
✔ shipped authority follows the note's table (1.472179ms)
|
||
✔ every role file in roles/ loads through the validator, and a v2 contract exists (0.694726ms)
|
||
✔ version 1 files keep loading with no authority (0.71802ms)
|
||
✔ the conductor policy isn't a role (0.140925ms)
|
||
✔ a missing role file is exit 4, a symbolic link too (0.285043ms)
|
||
✔ version 2 refusals (1.251492ms)
|
||
✔ authority: closed vocabulary, no gated-only action, no overlap (1.407147ms)
|
||
✔ messaging: optional, role definitions and human, never the tester (1.237533ms)
|
||
✔ credentials: Gitea scopes (0.57811ms)
|
||
✔ credentials: Vikunja scopes are a group-to-verbs map from the grantable list (0.676219ms)
|
||
✔ credentials: services (0.359559ms)
|
||
✔ contract: a non-empty regular Markdown file beside the role file (0.49247ms)
|
||
✖ both definitions load, with a contract file, and are exactly the approved lists (2.494965ms)
|
||
✖ security-reviewer has no write or shell tool and classifies only the verdict as its own (3.714738ms)
|
||
✔ merge-gate's only grant is git.merge.protected cross-role, and it has no write tool (1.420382ms)
|
||
✔ neither role can be an arbiter: its messaging lists refuse the business file (row 133) (3.522613ms)
|
||
✔ every role contract carries the proactive line in its Authority section (0.622072ms)
|
||
✔ pm and chief-of-staff say where a raise goes under REQ-DEC-2 (0.374867ms)
|
||
ℹ tests 32
|
||
ℹ suites 0
|
||
ℹ pass 30
|
||
ℹ fail 2
|
||
ℹ cancelled 0
|
||
ℹ skipped 0
|
||
ℹ todo 0
|
||
ℹ duration_ms 72.947416
|
||
|
||
✖ failing tests:
|
||
|
||
test at tests/workflow-roles.test.mjs:50:1
|
||
✖ both definitions load, with a contract file, and are exactly the approved lists (2.494965ms)
|
||
AssertionError [ERR_ASSERTION]: security-reviewer
|
||
+ actual - expected
|
||
|
||
{
|
||
authority: {
|
||
crossRole: [],
|
||
withinRole: [
|
||
'review.verdict',
|
||
+ 'message.send'
|
||
]
|
||
},
|
||
contract: 'security-reviewer.md',
|
||
credentials: [],
|
||
messaging: {
|
||
|
||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r149/packages/business/tests/workflow-roles.test.mjs:58:12)
|
||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||
at Test.run (node:internal/test_runner/test:1402:25)
|
||
at Test.start (node:internal/test_runner/test:1262:17)
|
||
at startSubtestAfterBootstrap (node:internal/test_runner/harness:387:17) {
|
||
generatedMessage: false,
|
||
code: 'ERR_ASSERTION',
|
||
actual: { roleVersion: 2, name: 'security-reviewer', contract: 'security-reviewer.md', tools: [ 'read', 'grep', 'find', 'ls' ], network: 'api-only', authority: { withinRole: [Array], crossRole: [] }, credentials: [], messaging: { sendTo: [Array], receiveFrom: [Array] } },
|
||
expected: { roleVersion: 2, name: 'security-reviewer', contract: 'security-reviewer.md', tools: [ 'read', 'grep', 'find', 'ls' ], network: 'api-only', authority: { withinRole: [Array], crossRole: [] }, credentials: [], messaging: { sendTo: [Array], receiveFrom: [Array] } },
|
||
operator: 'deepStrictEqual',
|
||
diff: 'simple'
|
||
}
|
||
|
||
test at tests/workflow-roles.test.mjs:63:1
|
||
✖ security-reviewer has no write or shell tool and classifies only the verdict as its own (3.714738ms)
|
||
AssertionError [ERR_ASSERTION]: message.send
|
||
|
||
'within' !== 'gated'
|
||
|
||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r149/packages/business/tests/workflow-roles.test.mjs:69:40)
|
||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||
at Test.run (node:internal/test_runner/test:1402:25)
|
||
at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
|
||
at Test.postRun (node:internal/test_runner/test:1542:19)
|
||
at Test.run (node:internal/test_runner/test:1467:12)
|
||
at async startSubtestAfterBootstrap (node:internal/test_runner/harness:387:3) {
|
||
generatedMessage: false,
|
||
code: 'ERR_ASSERTION',
|
||
actual: 'within',
|
||
expected: 'gated',
|
||
operator: 'strictEqual',
|
||
diff: 'simple'
|
||
}
|
||
== packages/bus rc=1
|
||
✔ each C-suite role file carries the same two lists: human, chief-of-staff, pm, cto (1.231733ms)
|
||
✔ chief-executive-officer: messages to and from the user, chief of staff, pm and cto pass (427.105117ms)
|
||
✔ chief-executive-officer: a message to or from the coder, reviewer or assistant is refused and logged, and nothing is stored (394.037935ms)
|
||
✔ chief-executive-officer: another C-suite role isn't on the lists either (190.7707ms)
|
||
✔ chief-financial-officer: messages to and from the user, chief of staff, pm and cto pass (224.385441ms)
|
||
✔ chief-financial-officer: a message to or from the coder, reviewer or assistant is refused and logged, and nothing is stored (220.542332ms)
|
||
✔ chief-financial-officer: another C-suite role isn't on the lists either (259.208603ms)
|
||
✔ chief-information-officer: messages to and from the user, chief of staff, pm and cto pass (217.893587ms)
|
||
✔ chief-information-officer: a message to or from the coder, reviewer or assistant is refused and logged, and nothing is stored (265.284069ms)
|
||
✔ chief-information-officer: another C-suite role isn't on the lists either (197.020484ms)
|
||
✔ chief-information-security-officer: messages to and from the user, chief of staff, pm and cto pass (224.345579ms)
|
||
✔ chief-information-security-officer: a message to or from the coder, reviewer or assistant is refused and logged, and nothing is stored (204.688384ms)
|
||
✔ chief-information-security-officer: another C-suite role isn't on the lists either (173.339564ms)
|
||
✔ chief-marketing-officer: messages to and from the user, chief of staff, pm and cto pass (218.941813ms)
|
||
✔ chief-marketing-officer: a message to or from the coder, reviewer or assistant is refused and logged, and nothing is stored (207.597363ms)
|
||
✔ chief-marketing-officer: another C-suite role isn't on the lists either (181.746029ms)
|
||
✔ merge-gate's technical raise is cross-role, goes to the cto, and only merge-gate can use the approval (237.968345ms)
|
||
✔ merge-gate has no message.send, and without a domain its raise goes to the delivery arbiter (210.485534ms)
|
||
✔ the cto must be able to message merge-gate, or the technical raise is refused (row 133) (183.479267ms)
|
||
✖ security-reviewer answers a review with its verdict alone; it holds no message.send (207.366144ms)
|
||
ℹ tests 20
|
||
ℹ suites 0
|
||
ℹ pass 19
|
||
ℹ fail 1
|
||
ℹ cancelled 0
|
||
ℹ skipped 0
|
||
ℹ todo 0
|
||
ℹ duration_ms 3670.079966
|
||
|
||
✖ failing tests:
|
||
|
||
test at tests/workflow-roles.test.mjs:86:1
|
||
✖ security-reviewer answers a review with its verdict alone; it holds no message.send (207.366144ms)
|
||
AssertionError [ERR_ASSERTION]: Missing expected exception.
|
||
at TestContext.<anonymous> (file:///home/jwoltje/dewey-scratch/r149/packages/bus/tests/workflow-roles.test.mjs:92:10)
|
||
at Test.runInAsyncScope (node:async_hooks:226:14)
|
||
at Test.run (node:internal/test_runner/test:1402:25)
|
||
at Test.processPendingSubtests (node:internal/test_runner/test:974:18)
|
||
at Test.postRun (node:internal/test_runner/test:1542:19)
|
||
at Test.run (node:internal/test_runner/test:1467:12)
|
||
at async Test.processPendingSubtests (node:internal/test_runner/test:974:7) {
|
||
generatedMessage: false,
|
||
code: 'ERR_ASSERTION',
|
||
actual: undefined,
|
||
expected: /decision-required/,
|
||
operator: 'throws',
|
||
diff: 'simple'
|
||
}
|
||
== packages/harness rc=0
|
||
✔ raise_decision offers domain as technical or delivery only, optional, and says where a raise goes (10.417617ms)
|
||
✔ raise_decision forwards domain to decision.raise, and a call without it sends none (159.520919ms)
|
||
✔ every role sees read_spec, record writer follows its grant, citation schemas stay strict (17.361844ms)
|
||
✔ typed socket forwards read content/history and agent record writes, and cannot write a spec (202.243367ms)
|
||
✔ the PM gets its task verbs and the reads, and no launch (7.111401ms)
|
||
✔ the chief of staff gets launch, send_message, end_run and change_organization, and no task verbs (2.537319ms)
|
||
✔ request_staff is the pm's alone: staff.request over message.send, roles and counts bounded (8.370921ms)
|
||
✔ end_run sends role and reason, no decision; change_organization sends revision and the organization keys (1.498856ms)
|
||
✔ the organization keys change_organization takes are the broker's ORGANIZATION_KEYS (0.100731ms)
|
||
✔ a role without role.end or organization.change gets neither tool, and each tool follows its own grant (6.521132ms)
|
||
✔ the assistant gets send_message, the reads and the web tools (it holds the web grant), no launch (1.032004ms)
|
||
✔ list_requirements reads the requirement ids, for a task.create holder with a tracker (1.872119ms)
|
||
✔ a coder gets no launch, no resolve_decision, and no task tools without a tracker (1.034135ms)
|
||
✔ a coder with a tracker gets its own task tools and no task_reassign (0.861948ms)
|
||
✔ launch only when the business's launch block names the instance as launcher (1.663176ms)
|
||
✔ an action outside the instance's authority has no tool (0.984156ms)
|
||
✔ the review loop: push_working and request_review for the coder, fetch_review and review_verdict for the reviewer, none for the PM (3.80446ms)
|
||
✔ land_work is there only with land, after push_working, with the task and the decision (2.293663ms)
|
||
✔ callTool: one JSON line out, the result back, a refusal rejects (8.215133ms)
|
||
✔ list_tasks takes the broker's filters and pages; get_task takes a task_ref (1.903117ms)
|
||
✔ callTool sends list_tasks done false unless the session names done; other tools as given (2.087544ms)
|
||
✔ replyText: compact JSON up to the cap, an error naming the size and the cap over it (0.534707ms)
|
||
✔ web_search's query maxLength is the web layer's SEARCH_MAX_QUERY_CHARS (2.233179ms)
|
||
ℹ tests 23
|
||
ℹ suites 0
|
||
ℹ pass 23
|
||
ℹ fail 0
|
||
ℹ cancelled 0
|
||
ℹ skipped 0
|
||
ℹ todo 0
|
||
ℹ duration_ms 310.919883
|