-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathscript.js
More file actions
79 lines (74 loc) · 4.59 KB
/
Copy pathscript.js
File metadata and controls
79 lines (74 loc) · 4.59 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
/* Signal Cabinet: a lightweight, no-network/no-storage viewer for prewritten fictional change cases. */
(() => {
const menuButton = document.querySelector('.menu-toggle');
const navigation = document.querySelector('#site-nav');
const tabs = [...document.querySelectorAll('[data-case]')];
const panel = document.querySelector('#case-panel');
const cases = {
model: {
label: 'FICTIONAL CASE / 01',
title: 'Version update, same stated task.',
summary: 'A drafting assistant moves to a new model version while retaining the same reader-facing task and action boundary.',
surface: 'Model version and its observable output behavior.',
recheck: 'Compare a defined, sanitized prompt set against the previous version; inspect factual citations and instruction adherence.',
pause: 'Pause if a reviewer observes unsupported citations, a material instruction conflict, or a difference that affects a stated boundary.',
return: 'Route the workflow to the previous approved configuration while the accountable owner reviews the evidence.',
owner: 'Content operations lead',
unchanged: 'No publishing authority; human review remains required.'
},
tool: {
label: 'FICTIONAL CASE / 02',
title: 'A new external tool enters the route.',
summary: 'A bounded research workflow proposes an external retrieval tool to gather public source material before human synthesis.',
surface: 'External tool connection, its disclosed source route, and the workflow’s resource boundary.',
recheck: 'Review the tool’s approved access scope, public-source handling, output path, and whether its material is clearly distinguishable from verified evidence.',
pause: 'Pause if the tool requests a new credential, reaches a non-public source, returns material with unclear provenance, or expands the existing boundary.',
return: 'Disable the new tool route and continue with the prior source-review method while the owner resolves the boundary question.',
owner: 'Research workflow owner',
unchanged: 'No authority to access private data or publish a claim without evidence review.'
},
source: {
label: 'FICTIONAL CASE / 03',
title: 'The retrieval source is replaced.',
summary: 'A knowledge assistant replaces an internal reference collection with a revised, curated collection under the same stated task.',
surface: 'Retrieval corpus, provenance coverage, and the relationship between retrieved material and downstream output.',
recheck: 'Sample source coverage, inspect attribution paths, test known boundary questions, and confirm that outdated or excluded material is not treated as current evidence.',
pause: 'Pause if a reviewer cannot determine where a material statement came from, the new source creates a sensitive-data route, or known source gaps affect use.',
return: 'Restore the prior collection or constrain the workflow to explicitly identified sources until the accountable owner completes a review.',
owner: 'Knowledge-base maintainer',
unchanged: 'No automatic claim validation; human source inspection remains required.'
}
};
const text = (selector, value) => {
const element = document.querySelector(selector);
if (element) element.textContent = value;
};
if (menuButton && navigation) {
menuButton.addEventListener('click', () => {
const isOpen = menuButton.getAttribute('aria-expanded') === 'true';
menuButton.setAttribute('aria-expanded', String(!isOpen));
navigation.classList.toggle('is-open', !isOpen);
});
navigation.querySelectorAll('a').forEach((link) => link.addEventListener('click', () => {
menuButton.setAttribute('aria-expanded', 'false');
navigation.classList.remove('is-open');
}));
}
tabs.forEach((tab) => tab.addEventListener('click', () => {
const selected = cases[tab.dataset.case];
if (!selected) return;
tabs.forEach((item) => item.setAttribute('aria-selected', String(item === tab)));
panel?.setAttribute('aria-labelledby', tab.id);
text('[data-case-label]', selected.label);
text('[data-case-title]', selected.title);
text('[data-case-summary]', selected.summary);
text('[data-case-surface]', selected.surface);
text('[data-case-recheck]', selected.recheck);
text('[data-case-pause]', selected.pause);
text('[data-case-return]', selected.return);
text('[data-case-owner]', selected.owner);
text('[data-case-unchanged]', selected.unchanged);
panel?.classList.remove('case-shift');
window.requestAnimationFrame(() => panel?.classList.add('case-shift'));
}));
})();