mirror of
https://github.com/PR0M3TH3AN/TORCH.git
synced 2026-10-27 07:51:52 +00:00
181 lines
9.4 KiB
JavaScript
181 lines
9.4 KiB
JavaScript
import assert from 'node:assert/strict';
|
|
import test from 'node:test';
|
|
import '../../site/attention-projection.js';
|
|
import '../../site/attention-actions.js';
|
|
import '../../site/live-refresh.js';
|
|
|
|
const project = (snapshot) => globalThis.TorchAttentionProjection.groups(snapshot);
|
|
|
|
test('SCN-console-attention-ownership: only owner-addressed pending decisions enter Waiting on you', () => {
|
|
const groups = project({
|
|
agents: [
|
|
{ areaId: 'provider-runtime', title: 'Provider Runtime' },
|
|
{ areaId: 'qa', title: 'Independent QA' },
|
|
],
|
|
approvalRequests: { items: [
|
|
{ id: 'owner-review', status: 'pending', approver: 'owner', requester: 'provider-runtime',
|
|
title: 'Review executor boundary', task: 'TASK-RUNTIME', evidence: 'receipt:17', createdAt: '2026-10-01T06:00:00Z', summary: 'Confirm the bounded scope.' },
|
|
{ id: 'qa-review', status: 'pending', approver: 'qa', requester: 'owner-console',
|
|
title: 'Confirm scenario path', summary: 'Review the owned test path.' },
|
|
] },
|
|
});
|
|
|
|
assert.deepEqual(groups.owner.map((item) => item.title), ['Review executor boundary']);
|
|
assert.equal(groups.owner[0].href, '#approval-owner-review');
|
|
assert.equal(groups.owner[0].decisionApprovalId, 'owner-review');
|
|
assert.match(groups.owner[0].detail, /bounded scope/);
|
|
assert.equal(groups.owner[0].waitSince, '2026-10-01T06:00:00Z');
|
|
assert.equal(groups.fleet[0].owner, 'Independent QA');
|
|
assert.equal(groups.fleet[0].decisionApprovalId, null);
|
|
assert.equal(groups.fleet[0].action, 'Open approval details');
|
|
assert.doesNotMatch(JSON.stringify(groups.fleet), /Approve|Reject/);
|
|
});
|
|
|
|
test('SCN-console-attention-owner-shortcut: a shortcut selects only an owner decision and retains the preview-confirm boundary', () => {
|
|
const choice = { value: '', disabled: false };
|
|
const form = { dataset: {}, elements: { namedItem: () => choice } };
|
|
let previewCalls = 0;
|
|
const result = globalThis.TorchAttentionActions.prepareOwnerDecisionShortcut(form, 'approved', () => { previewCalls += 1; });
|
|
|
|
assert.equal(result.started, true);
|
|
assert.equal(choice.value, 'approved');
|
|
assert.equal(previewCalls, 1, 'the caller can only start the established preview handler');
|
|
|
|
const nonOwnerForm = { dataset: {}, elements: { namedItem: () => ({ value: '', disabled: false }) } };
|
|
const noOwnerShortcut = globalThis.TorchAttentionActions.prepareOwnerDecisionShortcut(nonOwnerForm, 'published', () => { previewCalls += 1; });
|
|
assert.equal(noOwnerShortcut.started, false);
|
|
assert.equal(nonOwnerForm.elements.namedItem().value, '');
|
|
});
|
|
|
|
test('SCN-console-attention-shortcut-drafts: missing forms, active previews, and opposite drafts remain unchanged', () => {
|
|
const missing = globalThis.TorchAttentionActions.prepareOwnerDecisionShortcut(null, 'rejected');
|
|
assert.equal(missing.started, false);
|
|
assert.match(missing.reason, /no longer available/);
|
|
|
|
const previewForm = { dataset: { previewToken: 'current-preview' },
|
|
elements: { namedItem: () => ({ value: 'approved', disabled: true }) } };
|
|
const preview = globalThis.TorchAttentionActions.prepareOwnerDecisionShortcut(previewForm, 'rejected');
|
|
assert.equal(preview.started, false);
|
|
assert.equal(previewForm.elements.namedItem().value, 'approved');
|
|
|
|
const draftChoice = { value: 'approved', disabled: false };
|
|
const draftForm = { dataset: {}, elements: { namedItem: () => draftChoice } };
|
|
const draft = globalThis.TorchAttentionActions.prepareOwnerDecisionShortcut(draftForm, 'rejected');
|
|
assert.equal(draft.started, false);
|
|
assert.equal(draftChoice.value, 'approved');
|
|
assert.match(draft.reason, /draft is preserved/);
|
|
});
|
|
|
|
test('SCN-console-attention-refresh-draft: an edited owner decision remains protected while newer evidence renders', () => {
|
|
const choice = { value: '', checked: false, tagName: 'SELECT', selectedOptions: [] };
|
|
const note = { value: '', checked: false, tagName: 'TEXTAREA' };
|
|
const fields = [choice, note];
|
|
const form = {
|
|
contains: () => false,
|
|
matches: () => false,
|
|
querySelector: () => null,
|
|
querySelectorAll: () => fields,
|
|
};
|
|
const document = { activeElement: null, querySelectorAll: () => fields };
|
|
const protection = globalThis.TorchLiveRefresh.createProtection(document);
|
|
protection.remember();
|
|
choice.value = 'rejected';
|
|
note.value = 'Need the exact impact first.';
|
|
|
|
assert.equal(protection.protects(form), true);
|
|
const dirty = protection.dirty();
|
|
protection.remember({ preserve: dirty });
|
|
assert.equal(protection.protects(form), true);
|
|
assert.equal(choice.value, 'rejected');
|
|
assert.equal(note.value, 'Need the exact impact first.');
|
|
});
|
|
|
|
test('SCN-console-attention-dedup: doctor and snapshot message counts become one honest queue item', () => {
|
|
const groups = project({
|
|
messages: { unacknowledged: 4 },
|
|
doctor: { findings: [
|
|
{ severity: 'warning', code: 'MESSAGE_BACKLOG', unacknowledged: 3 },
|
|
{ severity: 'warning', code: 'MESSAGE_BACKLOG', unacknowledged: 3 },
|
|
] },
|
|
});
|
|
|
|
const queue = groups.fleet.filter((item) => item.href === '#communications');
|
|
assert.equal(queue.length, 1);
|
|
assert.equal(queue[0].title, '4 durable messages awaiting acknowledgement');
|
|
assert.match(queue[0].detail, /Each named recipient owns their acknowledgement/);
|
|
});
|
|
|
|
test('SCN-console-attention-worktrees: findings group by owning area and distinguish retained commits from unsafe operations', () => {
|
|
const groups = project({
|
|
agents: [{ areaId: 'provider-runtime', title: 'Provider Runtime' }],
|
|
doctor: { findings: [
|
|
{ severity: 'warning', code: 'WORKTREE_PROBLEM', area: 'provider-runtime', path: '/work/provider', problem: 'unique-commits:2' },
|
|
{ severity: 'warning', code: 'WORKTREE_PROBLEM', areaId: 'provider-runtime', path: '/work/provider', problem: 'worktree-dirty' },
|
|
{ severity: 'warning', code: 'WORKTREE_PROBLEM', area: 'project-kernel', path: '/work/kernel', problem: 'unique-commits:1' },
|
|
{ severity: 'error', code: 'WORKTREE_PROBLEM', area: 'qa', path: '/work/qa', problem: 'git-operation:REBASE_HEAD' },
|
|
] },
|
|
worktrees: [
|
|
{ area: 'provider-runtime', branch: 'runtime/fix', path: '/work/provider', ahead: 2, behind: 0 },
|
|
{ area: 'project-kernel', branch: 'kernel/change', path: '/work/kernel', ahead: 1, behind: 0 },
|
|
{ area: 'qa', branch: 'qa/audit', path: '/work/qa', ahead: 0, behind: 0 },
|
|
],
|
|
});
|
|
|
|
assert.equal(groups.fleet.length, 3);
|
|
const runtime = groups.fleet.find((item) => item.owner === 'Provider Runtime');
|
|
assert.equal(runtime.tone, 'review');
|
|
assert.match(runtime.detail, /Ahead commits are retained work progress, not a broken repository/);
|
|
assert.match(runtime.evidence, /runtime\/fix · \/work\/provider/);
|
|
assert.equal(runtime.requestOwner, 'provider-runtime');
|
|
const kernel = groups.fleet.find((item) => item.owner === 'project-kernel');
|
|
assert.equal(kernel.tone, 'info');
|
|
assert.match(kernel.detail, /owning specialist or manager/);
|
|
const qa = groups.fleet.find((item) => item.owner === 'qa');
|
|
assert.equal(qa.tone, 'urgent');
|
|
assert.match(qa.title, /worktree needs review/);
|
|
});
|
|
|
|
test('SCN-console-attention-wait-reasons: recovery and blocked task evidence keep consequences and actual reason visible', () => {
|
|
const groups = project({
|
|
agents: [{ areaId: 'release-self-host', title: 'Release and Self-host' }],
|
|
doctor: { findings: [{ severity: 'warning', code: 'RECOVERABILITY', level: 'ONE-DISK',
|
|
offMachine: false, commit: 'abcdef0123456789', recommendation: 'Configure and synchronize an off-machine canonical Git boundary.' }] },
|
|
backlog: [{ id: 'TASK-BLOCKED', title: 'Capture mobile UI', state: 'blocked', owner: 'owner-console',
|
|
blockedReason: 'Browser CDP timed out; no image was saved.' }],
|
|
});
|
|
|
|
const recovery = groups.fleet.find((item) => item.title === 'Off-machine recovery copy is not verified');
|
|
assert.equal(recovery.owner, 'Responsible domain not recorded');
|
|
assert.match(recovery.detail, /single disk failure could remove/);
|
|
assert.match(recovery.evidence, /ONE-DISK · abcdef012/);
|
|
assert.match(groups.fleet.find((item) => item.evidence === 'TASK-BLOCKED').detail, /no image was saved/);
|
|
});
|
|
|
|
test('SCN-console-attention-authority: roster titles name owners and integration stays with Fleet unless arbiter authority is explicit', () => {
|
|
const groups = project({
|
|
agents: [{ areaId: 'coordinator-7', title: 'Delivery Coordinator' }],
|
|
integration: [
|
|
{ state: 'awaiting-checks', sourceArea: 'build-team', sourceCommit: '1234567890abcdef', authorizedBy: 'coordinator-7' },
|
|
{ state: 'queued', sourceArea: 'docs-team', sourceCommit: 'abcdef0123456789' },
|
|
],
|
|
managerWakes: { blockingCount: 1, reservations: [{ managerId: 'coordinator-7', scheduleId: 'nightly-review',
|
|
outcome: 'reserved', blocksManagerWake: true }] },
|
|
});
|
|
|
|
assert.equal(groups.fleet.length, 3);
|
|
assert.equal(groups.fleet[0].owner, 'Delivery Coordinator');
|
|
assert.match(groups.fleet[0].evidence, /authorized by Delivery Coordinator/);
|
|
assert.equal(groups.fleet[1].owner, 'Integration authority not recorded');
|
|
assert.equal(groups.fleet[2].owner, 'Delivery Coordinator');
|
|
assert.deepEqual(groups.arbiter, []);
|
|
});
|
|
|
|
test('SCN-console-attention-empty: an unavailable signal does not manufacture owner work', () => {
|
|
const groups = project({
|
|
approvalRequests: { available: false, reason: 'Structured approval service unavailable.' },
|
|
messages: { unacknowledged: 0 }, doctor: { findings: [] },
|
|
});
|
|
|
|
assert.deepEqual(groups, { owner: [], fleet: [], arbiter: [] });
|
|
});
|