instar 1.3.454 → 1.3.456
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/dist/cli.js +9 -0
- package/dist/cli.js.map +1 -1
- package/dist/commands/server.d.ts.map +1 -1
- package/dist/commands/server.js +9 -8
- package/dist/commands/server.js.map +1 -1
- package/dist/commands/test-as-self.d.ts +17 -0
- package/dist/commands/test-as-self.d.ts.map +1 -1
- package/dist/commands/test-as-self.js +57 -0
- package/dist/commands/test-as-self.js.map +1 -1
- package/dist/core/devAgentGate.d.ts +39 -0
- package/dist/core/devAgentGate.d.ts.map +1 -0
- package/dist/core/devAgentGate.js +37 -0
- package/dist/core/devAgentGate.js.map +1 -0
- package/dist/permissions/testing/SlackScenarioHarness.d.ts +97 -5
- package/dist/permissions/testing/SlackScenarioHarness.d.ts.map +1 -1
- package/dist/permissions/testing/SlackScenarioHarness.js +190 -3
- package/dist/permissions/testing/SlackScenarioHarness.js.map +1 -1
- package/dist/scaffold/templates.d.ts.map +1 -1
- package/dist/scaffold/templates.js +4 -1
- package/dist/scaffold/templates.js.map +1 -1
- package/dist/server/AgentServer.d.ts.map +1 -1
- package/dist/server/AgentServer.js +3 -2
- package/dist/server/AgentServer.js.map +1 -1
- package/dist/server/routes.d.ts.map +1 -1
- package/dist/server/routes.js +38 -2
- package/dist/server/routes.js.map +1 -1
- package/dist/threadline/ThreadlineBootstrap.d.ts +0 -3
- package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
- package/dist/threadline/ThreadlineBootstrap.js +1 -35
- package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
- package/dist/threadline/client/ThreadlineClient.d.ts +32 -0
- package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -1
- package/dist/threadline/client/ThreadlineClient.js +112 -13
- package/dist/threadline/client/ThreadlineClient.js.map +1 -1
- package/package.json +4 -2
- package/scripts/lint-dev-agent-dark-gate.js +196 -0
- package/scripts/lint-no-direct-destructive.js +4 -0
- package/src/data/builtin-manifest.json +79 -79
- package/src/scaffold/templates.ts +4 -1
- package/upgrades/1.3.455.md +46 -0
- package/upgrades/1.3.456.md +33 -0
- package/upgrades/side-effects/dev-agent-dark-gate-lint.md +104 -0
- package/upgrades/side-effects/slack-test-as-self-harness.md +155 -0
- package/upgrades/side-effects/threadline-dup-identity-pr1-resolver.md +162 -0
- package/upgrades/side-effects/threadline-dup-identity-pr2-orphan-removal.md +89 -0
|
@@ -38,4 +38,21 @@ export declare function runTestAsSelf(opts: TestAsSelfOptions): Promise<{
|
|
|
38
38
|
report: object;
|
|
39
39
|
exitCode: number;
|
|
40
40
|
}>;
|
|
41
|
+
/**
|
|
42
|
+
* `instar test-as-self --slack` — the credential-free Slack permission demonstration
|
|
43
|
+
* (Pillar 4, §8.4). Extends the throwaway-agent primitive from "is the agent alive?"
|
|
44
|
+
* to "does it enforce the RIGHT decision for each (principal, request) pair?".
|
|
45
|
+
*
|
|
46
|
+
* Runs the audit-asserting scenario suite IN-PROCESS (no throwaway home, no Slack
|
|
47
|
+
* tokens): every row flows through the SAME observer the live SlackAdapter calls
|
|
48
|
+
* (resolver → gate → decision ledger), and BOTH the verdict AND the matching
|
|
49
|
+
* audit/ledger entry are asserted per row. Prints a per-row report and returns
|
|
50
|
+
* exit 0 iff every row produced its expected decision AND its audit entry.
|
|
51
|
+
*/
|
|
52
|
+
export declare function runTestAsSelfSlack(opts?: {
|
|
53
|
+
reportJson?: string;
|
|
54
|
+
}): Promise<{
|
|
55
|
+
report: object;
|
|
56
|
+
exitCode: number;
|
|
57
|
+
}>;
|
|
41
58
|
//# sourceMappingURL=test-as-self.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-as-self.d.ts","sourceRoot":"","sources":["../../src/commands/test-as-self.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAUH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAwGD;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiG1G"}
|
|
1
|
+
{"version":3,"file":"test-as-self.d.ts","sourceRoot":"","sources":["../../src/commands/test-as-self.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;GAsBG;AAUH,MAAM,WAAW,iBAAiB;IAChC,MAAM,CAAC,EAAE,MAAM,CAAC;IAChB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,IAAI,CAAC,EAAE,OAAO,CAAC;IACf,WAAW,CAAC,EAAE,OAAO,CAAC;IACtB,UAAU,CAAC,EAAE,MAAM,CAAC;IACpB,QAAQ,CAAC,EAAE,MAAM,CAAC;IAClB,wDAAwD;IACxD,cAAc,CAAC,EAAE,MAAM,EAAE,CAAC;CAC3B;AAwGD;;GAEG;AACH,wBAAsB,aAAa,CAAC,IAAI,EAAE,iBAAiB,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAiG1G;AAED;;;;;;;;;;GAUG;AACH,wBAAsB,kBAAkB,CAAC,IAAI,GAAE;IAAE,UAAU,CAAC,EAAE,MAAM,CAAA;CAAO,GAAG,OAAO,CAAC;IAAE,MAAM,EAAE,MAAM,CAAC;IAAC,QAAQ,EAAE,MAAM,CAAA;CAAE,CAAC,CAkD1H"}
|
|
@@ -217,6 +217,63 @@ export async function runTestAsSelf(opts) {
|
|
|
217
217
|
teardown(ctx);
|
|
218
218
|
}
|
|
219
219
|
}
|
|
220
|
+
/**
|
|
221
|
+
* `instar test-as-self --slack` — the credential-free Slack permission demonstration
|
|
222
|
+
* (Pillar 4, §8.4). Extends the throwaway-agent primitive from "is the agent alive?"
|
|
223
|
+
* to "does it enforce the RIGHT decision for each (principal, request) pair?".
|
|
224
|
+
*
|
|
225
|
+
* Runs the audit-asserting scenario suite IN-PROCESS (no throwaway home, no Slack
|
|
226
|
+
* tokens): every row flows through the SAME observer the live SlackAdapter calls
|
|
227
|
+
* (resolver → gate → decision ledger), and BOTH the verdict AND the matching
|
|
228
|
+
* audit/ledger entry are asserted per row. Prints a per-row report and returns
|
|
229
|
+
* exit 0 iff every row produced its expected decision AND its audit entry.
|
|
230
|
+
*/
|
|
231
|
+
export async function runTestAsSelfSlack(opts = {}) {
|
|
232
|
+
const { runAuditedScenarioSuite } = await import('../permissions/testing/SlackScenarioHarness.js');
|
|
233
|
+
console.log(pc.bold(' test-as-self --slack — permission demonstration (verified, not narrated)'));
|
|
234
|
+
const suite = await runAuditedScenarioSuite();
|
|
235
|
+
for (const r of suite.rows) {
|
|
236
|
+
const mark = r.pass ? pc.green('✓') : pc.red('✗');
|
|
237
|
+
const got = r.verdict ? `${r.verdict.decision}/${r.verdict.basis}` : 'null';
|
|
238
|
+
const expected = `${r.scenario.expectedDecision}/${r.scenario.expectedBasis}`;
|
|
239
|
+
const audit = r.auditOk ? pc.dim('audit✓') : pc.red('audit✗');
|
|
240
|
+
console.log(` ${mark} ${r.scenario.id} ` +
|
|
241
|
+
pc.dim(`[${r.scenario.principal.name}/${r.scenario.principal.role}]`) +
|
|
242
|
+
` → ${got} ${audit}` +
|
|
243
|
+
(r.pass ? '' : pc.red(` (expected ${expected}${r.mismatch ? ` — ${r.mismatch}` : ''})`)));
|
|
244
|
+
}
|
|
245
|
+
const allOk = suite.summary.failed === 0;
|
|
246
|
+
const report = {
|
|
247
|
+
mode: 'slack-permission-demonstration',
|
|
248
|
+
summary: suite.summary,
|
|
249
|
+
ledgerPath: suite.ledgerPath,
|
|
250
|
+
rows: suite.rows.map((r) => ({
|
|
251
|
+
id: r.scenario.id,
|
|
252
|
+
principal: r.scenario.principal.name,
|
|
253
|
+
role: r.scenario.principal.role,
|
|
254
|
+
request: r.scenario.text,
|
|
255
|
+
expected: `${r.scenario.expectedDecision}/${r.scenario.expectedBasis}`,
|
|
256
|
+
got: r.verdict ? `${r.verdict.decision}/${r.verdict.basis}` : 'null',
|
|
257
|
+
verdictOk: r.verdictOk,
|
|
258
|
+
auditOk: r.auditOk,
|
|
259
|
+
pass: r.pass,
|
|
260
|
+
proves: r.scenario.proves,
|
|
261
|
+
})),
|
|
262
|
+
verdict: allOk ? 'PASS' : 'FAIL',
|
|
263
|
+
ts: new Date().toISOString(),
|
|
264
|
+
};
|
|
265
|
+
if (opts.reportJson) {
|
|
266
|
+
try {
|
|
267
|
+
fs.mkdirSync(path.dirname(opts.reportJson), { recursive: true });
|
|
268
|
+
fs.writeFileSync(opts.reportJson, JSON.stringify(report, null, 2));
|
|
269
|
+
}
|
|
270
|
+
catch { /* best-effort */ }
|
|
271
|
+
}
|
|
272
|
+
console.log(allOk
|
|
273
|
+
? pc.green(` VERDICT: PASS — ${suite.summary.passed}/${suite.summary.total} rows (decision AND audit entry)`)
|
|
274
|
+
: pc.red(` VERDICT: FAIL — ${suite.summary.failed}/${suite.summary.total} rows did not enforce the expected decision+audit`));
|
|
275
|
+
return { report, exitCode: allOk ? 0 : 1 };
|
|
276
|
+
}
|
|
220
277
|
/** Signal-safe teardown: stop processes, remove the throwaway home. */
|
|
221
278
|
function teardown(ctx) {
|
|
222
279
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"test-as-self.js","sourceRoot":"","sources":["../../src/commands/test-as-self.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"test-as-self.js","sourceRoot":"","sources":["../../src/commands/test-as-self.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* devAgentGate.ts — the single funnel for the developmentAgent dark-feature gate
|
|
3
|
+
* (standard_development_agent_dark_feature_gate).
|
|
4
|
+
*
|
|
5
|
+
* A "development-agent dark feature" ships DARK for the fleet but runs LIVE on
|
|
6
|
+
* development agents (the dogfooding ground). The canonical resolution is:
|
|
7
|
+
*
|
|
8
|
+
* enabled = explicitEnabled ?? !!config.developmentAgent
|
|
9
|
+
*
|
|
10
|
+
* Convention (see src/config/ConfigDefaults.ts and src/core/types.ts):
|
|
11
|
+
* - The config default OMITS `enabled` so the gate decides at runtime.
|
|
12
|
+
* - On a `developmentAgent: true` agent → LIVE.
|
|
13
|
+
* - On the fleet → DARK until explicitly flipped on.
|
|
14
|
+
* - An explicit `enabled` in config ALWAYS wins (false force-darks even a dev
|
|
15
|
+
* agent; true is the fleet-flip).
|
|
16
|
+
*
|
|
17
|
+
* WHY A FUNNEL: PR #1001 (GrowthMilestoneAnalyst) hardcoded `enabled: false` in
|
|
18
|
+
* the config default instead of omitting it, so the feature shipped dark for
|
|
19
|
+
* EVERYONE — dev agents included — silently contradicting this standard. It was
|
|
20
|
+
* caught only by operator review. Routing every dev-gate resolution through this
|
|
21
|
+
* one helper makes the correct behavior uniform and greppable, and lets
|
|
22
|
+
* `scripts/lint-dev-agent-dark-gate.js` ban hand-rolled resolutions that could
|
|
23
|
+
* drift. Spec: docs/specs/DEV-AGENT-DARK-GATE-CONFORMANCE-SPEC.md.
|
|
24
|
+
*/
|
|
25
|
+
/** The minimal shape this gate reads off the agent config. */
|
|
26
|
+
export interface DevAgentGateConfig {
|
|
27
|
+
developmentAgent?: boolean;
|
|
28
|
+
}
|
|
29
|
+
/**
|
|
30
|
+
* Resolve a development-agent dark-feature flag.
|
|
31
|
+
*
|
|
32
|
+
* @param explicitEnabled the feature's explicit config value (`cfg?.enabled`),
|
|
33
|
+
* or `undefined` when the config omits it (the expected default).
|
|
34
|
+
* @param config the agent config (only `developmentAgent` is read).
|
|
35
|
+
* @returns the explicit value when set, otherwise `true` on a dev agent and
|
|
36
|
+
* `false` on the fleet.
|
|
37
|
+
*/
|
|
38
|
+
export declare function resolveDevAgentGate(explicitEnabled: boolean | undefined, config: DevAgentGateConfig | undefined): boolean;
|
|
39
|
+
//# sourceMappingURL=devAgentGate.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devAgentGate.d.ts","sourceRoot":"","sources":["../../src/core/devAgentGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAEH,8DAA8D;AAC9D,MAAM,WAAW,kBAAkB;IACjC,gBAAgB,CAAC,EAAE,OAAO,CAAC;CAC5B;AAED;;;;;;;;GAQG;AACH,wBAAgB,mBAAmB,CACjC,eAAe,EAAE,OAAO,GAAG,SAAS,EACpC,MAAM,EAAE,kBAAkB,GAAG,SAAS,GACrC,OAAO,CAET"}
|
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* devAgentGate.ts — the single funnel for the developmentAgent dark-feature gate
|
|
3
|
+
* (standard_development_agent_dark_feature_gate).
|
|
4
|
+
*
|
|
5
|
+
* A "development-agent dark feature" ships DARK for the fleet but runs LIVE on
|
|
6
|
+
* development agents (the dogfooding ground). The canonical resolution is:
|
|
7
|
+
*
|
|
8
|
+
* enabled = explicitEnabled ?? !!config.developmentAgent
|
|
9
|
+
*
|
|
10
|
+
* Convention (see src/config/ConfigDefaults.ts and src/core/types.ts):
|
|
11
|
+
* - The config default OMITS `enabled` so the gate decides at runtime.
|
|
12
|
+
* - On a `developmentAgent: true` agent → LIVE.
|
|
13
|
+
* - On the fleet → DARK until explicitly flipped on.
|
|
14
|
+
* - An explicit `enabled` in config ALWAYS wins (false force-darks even a dev
|
|
15
|
+
* agent; true is the fleet-flip).
|
|
16
|
+
*
|
|
17
|
+
* WHY A FUNNEL: PR #1001 (GrowthMilestoneAnalyst) hardcoded `enabled: false` in
|
|
18
|
+
* the config default instead of omitting it, so the feature shipped dark for
|
|
19
|
+
* EVERYONE — dev agents included — silently contradicting this standard. It was
|
|
20
|
+
* caught only by operator review. Routing every dev-gate resolution through this
|
|
21
|
+
* one helper makes the correct behavior uniform and greppable, and lets
|
|
22
|
+
* `scripts/lint-dev-agent-dark-gate.js` ban hand-rolled resolutions that could
|
|
23
|
+
* drift. Spec: docs/specs/DEV-AGENT-DARK-GATE-CONFORMANCE-SPEC.md.
|
|
24
|
+
*/
|
|
25
|
+
/**
|
|
26
|
+
* Resolve a development-agent dark-feature flag.
|
|
27
|
+
*
|
|
28
|
+
* @param explicitEnabled the feature's explicit config value (`cfg?.enabled`),
|
|
29
|
+
* or `undefined` when the config omits it (the expected default).
|
|
30
|
+
* @param config the agent config (only `developmentAgent` is read).
|
|
31
|
+
* @returns the explicit value when set, otherwise `true` on a dev agent and
|
|
32
|
+
* `false` on the fleet.
|
|
33
|
+
*/
|
|
34
|
+
export function resolveDevAgentGate(explicitEnabled, config) {
|
|
35
|
+
return explicitEnabled ?? !!config?.developmentAgent;
|
|
36
|
+
}
|
|
37
|
+
//# sourceMappingURL=devAgentGate.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"devAgentGate.js","sourceRoot":"","sources":["../../src/core/devAgentGate.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;GAuBG;AAOH;;;;;;;;GAQG;AACH,MAAM,UAAU,mBAAmB,CACjC,eAAoC,EACpC,MAAsC;IAEtC,OAAO,eAAe,IAAI,CAAC,CAAC,MAAM,EAAE,gBAAgB,CAAC;AACvD,CAAC"}
|
|
@@ -7,10 +7,41 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Design: docs/specs/SLACK-ORG-INTEGRATION-SPEC.md §8 (Pillar 4) + §9 (worked examples).
|
|
9
9
|
*/
|
|
10
|
-
import type { Principal, PermissionDecision, PermissionVerdict } from '../types.js';
|
|
11
|
-
import { SlackPermissionGate } from '../SlackPermissionGate.js';
|
|
12
|
-
|
|
10
|
+
import type { Principal, PermissionDecision, PermissionVerdict, AuthorityGrant } from '../types.js';
|
|
11
|
+
import { SlackPermissionGate, type GrantStore } from '../SlackPermissionGate.js';
|
|
12
|
+
import { type UserLookup, type ResolvedUserRecord } from '../SlackPrincipalResolver.js';
|
|
13
|
+
import { SlackPermissionObserver } from '../SlackPermissionObserver.js';
|
|
14
|
+
import { type PermissionLedgerEntry } from '../PermissionDecisionLedger.js';
|
|
15
|
+
/**
|
|
16
|
+
* The fixed cast of test users (§8.2). Each is a real registered (or deliberately
|
|
17
|
+
* UNregistered) principal with a verified slackUserId, a role, and a relationship
|
|
18
|
+
* baseline (where a scenario needs anomaly). `grantedGrace` is the member who has
|
|
19
|
+
* been issued a time-boxed floor grant (the A4.3 "Maya now deploys" deterministic
|
|
20
|
+
* mirror — proves the `floor-granted` path without a PIN-gated live mandate).
|
|
21
|
+
*/
|
|
13
22
|
export declare const CAST: Record<string, Principal>;
|
|
23
|
+
/**
|
|
24
|
+
* Which slackUserId currently holds an active floor grant, and for what scope.
|
|
25
|
+
* Consumed by {@link StaticGrantStore} (Layer-A deterministic mirror of the
|
|
26
|
+
* MandateBackedGrantStore) so the granted-member-floor row reaches `floor-granted`.
|
|
27
|
+
* Grace (a member) holds a prod-deploy grant authorized by Olivia (requester ≠
|
|
28
|
+
* authorizer is preserved). No other principal has a grant — deny-by-default.
|
|
29
|
+
*/
|
|
30
|
+
export declare const ACTIVE_GRANTS: AuthorityGrant[];
|
|
31
|
+
/**
|
|
32
|
+
* Layer-A deterministic grant store — the credential-free mirror of
|
|
33
|
+
* MandateBackedGrantStore. The live A4 path issues a PIN-gated, signed,
|
|
34
|
+
* expiring Coordination Mandate grant; that is an operator action and cannot
|
|
35
|
+
* run in CI. This static store returns the SAME shape of grant for the same
|
|
36
|
+
* (slackUserId, scope), so the gate's `floor-granted` branch is exercised
|
|
37
|
+
* identically — only the grant's PROVENANCE differs (a fixture vs a signed
|
|
38
|
+
* mandate), which is exactly the deterministic-vs-live seam (§8.3, §8.5).
|
|
39
|
+
*/
|
|
40
|
+
export declare class StaticGrantStore implements GrantStore {
|
|
41
|
+
private readonly grants;
|
|
42
|
+
constructor(grants?: AuthorityGrant[]);
|
|
43
|
+
activeGrant(slackUserId: string, scope: string, now: number): AuthorityGrant | undefined;
|
|
44
|
+
}
|
|
14
45
|
export interface Scenario {
|
|
15
46
|
id: string;
|
|
16
47
|
principal: Principal;
|
|
@@ -20,9 +51,21 @@ export interface Scenario {
|
|
|
20
51
|
expectedBasis: string;
|
|
21
52
|
proves: string;
|
|
22
53
|
}
|
|
23
|
-
/**
|
|
54
|
+
/**
|
|
55
|
+
* The assertion rows (§8.4 + §9 A–F, plus the two deterministic-subset rows the
|
|
56
|
+
* live runbook adds: a granted-member floor → allow (A4.3) and an unregistered
|
|
57
|
+
* outsider → refuse (A1.3)). Scenario 5 models the CEO's own account behaving
|
|
58
|
+
* anomalously (account-compromise / social-engineering), so it reuses the verified
|
|
59
|
+
* owner principal with an out-of-character money-movement request.
|
|
60
|
+
*/
|
|
24
61
|
export declare const SCENARIOS: Scenario[];
|
|
25
|
-
/**
|
|
62
|
+
/**
|
|
63
|
+
* Build the Slice-0 gate wired with the deterministic (heuristic) classifier +
|
|
64
|
+
* anomaly scorer + the Layer-A static grant store. The grant store returns a grant
|
|
65
|
+
* ONLY for Grace's prod-deploy (ACTIVE_GRANTS) — every other principal is
|
|
66
|
+
* deny-by-default, so none of the existing rows' verdicts change; it solely enables
|
|
67
|
+
* the `floor-granted` path for the granted-member-floor row.
|
|
68
|
+
*/
|
|
26
69
|
export declare function buildSliceZeroGate(): SlackPermissionGate;
|
|
27
70
|
export interface ScenarioResult {
|
|
28
71
|
scenario: Scenario;
|
|
@@ -32,4 +75,53 @@ export interface ScenarioResult {
|
|
|
32
75
|
}
|
|
33
76
|
/** Run all scenarios through a gate and report per-row pass/fail. */
|
|
34
77
|
export declare function runScenarioSuite(gate?: SlackPermissionGate): Promise<ScenarioResult[]>;
|
|
78
|
+
/**
|
|
79
|
+
* A registry-backed {@link UserLookup} built from the fixed cast, so the pipeline
|
|
80
|
+
* resolves a verified slackUserId → Principal exactly as production does (an
|
|
81
|
+
* unregistered id — Omar — resolves to an unregistered guest). Identity comes ONLY
|
|
82
|
+
* from the authenticated slackUserId, never from message content.
|
|
83
|
+
*/
|
|
84
|
+
export declare class CastUserLookup implements UserLookup {
|
|
85
|
+
private readonly bySlackId;
|
|
86
|
+
constructor(cast?: Record<string, Principal>);
|
|
87
|
+
resolveFromSlackUserId(slackUserId: string): ResolvedUserRecord | null;
|
|
88
|
+
}
|
|
89
|
+
/** Build the production-shaped observer (resolver → Slice-0 gate → ledger) for the harness. */
|
|
90
|
+
export declare function buildScenarioObserver(stateDir: string): SlackPermissionObserver;
|
|
91
|
+
export interface AuditedScenarioResult {
|
|
92
|
+
scenario: Scenario;
|
|
93
|
+
verdict: PermissionVerdict | null;
|
|
94
|
+
/** The decision-ledger entry that landed for this row (the audit proof). */
|
|
95
|
+
ledgerEntry?: PermissionLedgerEntry;
|
|
96
|
+
/** Did the verdict match the expected decision+basis? */
|
|
97
|
+
verdictOk: boolean;
|
|
98
|
+
/** Did a ledger/audit entry with the expected decision+basis actually land? */
|
|
99
|
+
auditOk: boolean;
|
|
100
|
+
/** Both must hold ("verified, not narrated"). */
|
|
101
|
+
pass: boolean;
|
|
102
|
+
mismatch?: string;
|
|
103
|
+
}
|
|
104
|
+
export interface AuditedSuiteReport {
|
|
105
|
+
summary: {
|
|
106
|
+
total: number;
|
|
107
|
+
passed: number;
|
|
108
|
+
failed: number;
|
|
109
|
+
};
|
|
110
|
+
/** Where the decision ledger was written (the durable audit trail). */
|
|
111
|
+
ledgerPath: string;
|
|
112
|
+
rows: AuditedScenarioResult[];
|
|
113
|
+
}
|
|
114
|
+
/**
|
|
115
|
+
* Run every scenario through the real observer (resolver → gate → ledger) and
|
|
116
|
+
* assert BOTH the verdict and the matching audit entry per row. Writes the ledger
|
|
117
|
+
* into a fresh temp state dir (or `stateDir` if provided) so the run is hermetic.
|
|
118
|
+
*
|
|
119
|
+
* NOTE on the resolver: the observer resolves the principal from the
|
|
120
|
+
* authenticated slackUserId via {@link CastUserLookup}; the scenario's
|
|
121
|
+
* `principal` field is only used to supply that slackUserId/displayName and to
|
|
122
|
+
* document the intended cast member. The role/registration the gate actually sees
|
|
123
|
+
* comes from the registry resolution — so this exercises the real
|
|
124
|
+
* identity-binding path, not a hand-built Principal.
|
|
125
|
+
*/
|
|
126
|
+
export declare function runAuditedScenarioSuite(stateDir?: string): Promise<AuditedSuiteReport>;
|
|
35
127
|
//# sourceMappingURL=SlackScenarioHarness.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlackScenarioHarness.d.ts","sourceRoot":"","sources":["../../../src/permissions/testing/SlackScenarioHarness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"SlackScenarioHarness.d.ts","sourceRoot":"","sources":["../../../src/permissions/testing/SlackScenarioHarness.ts"],"names":[],"mappings":"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"}
|
|
@@ -7,18 +7,59 @@
|
|
|
7
7
|
*
|
|
8
8
|
* Design: docs/specs/SLACK-ORG-INTEGRATION-SPEC.md §8 (Pillar 4) + §9 (worked examples).
|
|
9
9
|
*/
|
|
10
|
+
import fs from 'node:fs';
|
|
11
|
+
import os from 'node:os';
|
|
12
|
+
import path from 'node:path';
|
|
10
13
|
import { RolePolicy } from '../RolePolicy.js';
|
|
11
14
|
import { HeuristicIntentClassifier } from '../IntentClassifier.js';
|
|
12
15
|
import { HeuristicAnomalyScorer } from '../AnomalyScorer.js';
|
|
13
16
|
import { SlackPermissionGate } from '../SlackPermissionGate.js';
|
|
14
|
-
|
|
17
|
+
import { SlackPrincipalResolver } from '../SlackPrincipalResolver.js';
|
|
18
|
+
import { SlackPermissionObserver } from '../SlackPermissionObserver.js';
|
|
19
|
+
import { PermissionDecisionLedger } from '../PermissionDecisionLedger.js';
|
|
20
|
+
/**
|
|
21
|
+
* The fixed cast of test users (§8.2). Each is a real registered (or deliberately
|
|
22
|
+
* UNregistered) principal with a verified slackUserId, a role, and a relationship
|
|
23
|
+
* baseline (where a scenario needs anomaly). `grantedGrace` is the member who has
|
|
24
|
+
* been issued a time-boxed floor grant (the A4.3 "Maya now deploys" deterministic
|
|
25
|
+
* mirror — proves the `floor-granted` path without a PIN-gated live mandate).
|
|
26
|
+
*/
|
|
15
27
|
export const CAST = {
|
|
16
28
|
ownerOlivia: { userId: 'u-olivia', name: 'Olivia', slackUserId: 'U_OLIVIA', role: 'owner', registered: true },
|
|
17
29
|
adminAmir: { userId: 'u-amir', name: 'Amir', slackUserId: 'U_AMIR', role: 'admin', registered: true },
|
|
18
30
|
memberMaya: { userId: 'u-maya', name: 'Maya', slackUserId: 'U_MAYA', role: 'member', registered: true },
|
|
19
31
|
contribCole: { userId: 'u-cole', name: 'Cole', slackUserId: 'U_COLE', role: 'contributor', registered: true },
|
|
32
|
+
grantedGrace: { userId: 'u-grace', name: 'Grace', slackUserId: 'U_GRACE', role: 'member', registered: true },
|
|
20
33
|
outsiderOmar: { userId: null, name: 'Omar', slackUserId: 'U_OMAR', role: 'guest', registered: false },
|
|
21
34
|
};
|
|
35
|
+
/**
|
|
36
|
+
* Which slackUserId currently holds an active floor grant, and for what scope.
|
|
37
|
+
* Consumed by {@link StaticGrantStore} (Layer-A deterministic mirror of the
|
|
38
|
+
* MandateBackedGrantStore) so the granted-member-floor row reaches `floor-granted`.
|
|
39
|
+
* Grace (a member) holds a prod-deploy grant authorized by Olivia (requester ≠
|
|
40
|
+
* authorizer is preserved). No other principal has a grant — deny-by-default.
|
|
41
|
+
*/
|
|
42
|
+
export const ACTIVE_GRANTS = [
|
|
43
|
+
{ scope: 'prod-deploy', grantedTo: 'U_GRACE', authorizedBy: 'U_OLIVIA', expiresAt: Number.MAX_SAFE_INTEGER },
|
|
44
|
+
];
|
|
45
|
+
/**
|
|
46
|
+
* Layer-A deterministic grant store — the credential-free mirror of
|
|
47
|
+
* MandateBackedGrantStore. The live A4 path issues a PIN-gated, signed,
|
|
48
|
+
* expiring Coordination Mandate grant; that is an operator action and cannot
|
|
49
|
+
* run in CI. This static store returns the SAME shape of grant for the same
|
|
50
|
+
* (slackUserId, scope), so the gate's `floor-granted` branch is exercised
|
|
51
|
+
* identically — only the grant's PROVENANCE differs (a fixture vs a signed
|
|
52
|
+
* mandate), which is exactly the deterministic-vs-live seam (§8.3, §8.5).
|
|
53
|
+
*/
|
|
54
|
+
export class StaticGrantStore {
|
|
55
|
+
grants;
|
|
56
|
+
constructor(grants = ACTIVE_GRANTS) {
|
|
57
|
+
this.grants = grants;
|
|
58
|
+
}
|
|
59
|
+
activeGrant(slackUserId, scope, now) {
|
|
60
|
+
return this.grants.find((g) => g.grantedTo === slackUserId && g.scope === scope && g.expiresAt > now);
|
|
61
|
+
}
|
|
62
|
+
}
|
|
22
63
|
/**
|
|
23
64
|
* Behavioral baselines (in production, sourced from RelationshipManager). Olivia is
|
|
24
65
|
* an established owner whose normal repertoire is deploys/reads/ops — so a sudden
|
|
@@ -29,13 +70,25 @@ const BASELINES = {
|
|
|
29
70
|
U_AMIR: { typicalActions: ['operational', 'read', 'low-write'], interactionCount: 30 },
|
|
30
71
|
U_MAYA: { typicalActions: ['read'], interactionCount: 12 },
|
|
31
72
|
U_COLE: { typicalActions: ['read', 'low-write'], interactionCount: 8 },
|
|
73
|
+
// Grace was granted a time-boxed prod-deploy authority precisely because deploys
|
|
74
|
+
// are part of her normal repertoire for this change — so the grant path yields a
|
|
75
|
+
// clean `allow`/`floor-granted` (the anomaly second factor finds nothing atypical),
|
|
76
|
+
// NOT a step-up. (A grant + an out-of-character request would still step up — that
|
|
77
|
+
// composition is the spoofed-CEO row.)
|
|
78
|
+
U_GRACE: { typicalActions: ['prod-deploy', 'read', 'low-write'], interactionCount: 20 },
|
|
32
79
|
};
|
|
33
80
|
class StaticBaselineProvider {
|
|
34
81
|
baselineFor(principal) {
|
|
35
82
|
return principal.slackUserId ? BASELINES[principal.slackUserId] : undefined;
|
|
36
83
|
}
|
|
37
84
|
}
|
|
38
|
-
/**
|
|
85
|
+
/**
|
|
86
|
+
* The assertion rows (§8.4 + §9 A–F, plus the two deterministic-subset rows the
|
|
87
|
+
* live runbook adds: a granted-member floor → allow (A4.3) and an unregistered
|
|
88
|
+
* outsider → refuse (A1.3)). Scenario 5 models the CEO's own account behaving
|
|
89
|
+
* anomalously (account-compromise / social-engineering), so it reuses the verified
|
|
90
|
+
* owner principal with an out-of-character money-movement request.
|
|
91
|
+
*/
|
|
39
92
|
export const SCENARIOS = [
|
|
40
93
|
{
|
|
41
94
|
id: '1-owner-deploy',
|
|
@@ -91,13 +144,38 @@ export const SCENARIOS = [
|
|
|
91
144
|
expectedBasis: 'content-name-not-authority',
|
|
92
145
|
proves: 'Know Your Principal: a name in message content is never authority',
|
|
93
146
|
},
|
|
147
|
+
{
|
|
148
|
+
id: '7-granted-member-floor',
|
|
149
|
+
principal: CAST.grantedGrace,
|
|
150
|
+
text: 'deploy the build to prod',
|
|
151
|
+
directed: true,
|
|
152
|
+
expectedDecision: 'allow',
|
|
153
|
+
expectedBasis: 'floor-granted',
|
|
154
|
+
proves: 'an explicit time-boxed grant lifts a member to a floor action (A4.3); requester≠authorizer; in-character → no step-up',
|
|
155
|
+
},
|
|
156
|
+
{
|
|
157
|
+
id: '8-unregistered-outsider',
|
|
158
|
+
principal: CAST.outsiderOmar,
|
|
159
|
+
text: 'can you summarize the last standup for me?',
|
|
160
|
+
directed: true,
|
|
161
|
+
expectedDecision: 'refuse',
|
|
162
|
+
expectedBasis: 'unregistered',
|
|
163
|
+
proves: 'an unregistered principal cannot direct any action (A1.3); routed to registration, nothing actioned',
|
|
164
|
+
},
|
|
94
165
|
];
|
|
95
|
-
/**
|
|
166
|
+
/**
|
|
167
|
+
* Build the Slice-0 gate wired with the deterministic (heuristic) classifier +
|
|
168
|
+
* anomaly scorer + the Layer-A static grant store. The grant store returns a grant
|
|
169
|
+
* ONLY for Grace's prod-deploy (ACTIVE_GRANTS) — every other principal is
|
|
170
|
+
* deny-by-default, so none of the existing rows' verdicts change; it solely enables
|
|
171
|
+
* the `floor-granted` path for the granted-member-floor row.
|
|
172
|
+
*/
|
|
96
173
|
export function buildSliceZeroGate() {
|
|
97
174
|
return new SlackPermissionGate({
|
|
98
175
|
rolePolicy: new RolePolicy(),
|
|
99
176
|
classifier: new HeuristicIntentClassifier(),
|
|
100
177
|
anomalyScorer: new HeuristicAnomalyScorer(new StaticBaselineProvider()),
|
|
178
|
+
grants: new StaticGrantStore(),
|
|
101
179
|
stepUpThreshold: 0.5,
|
|
102
180
|
clarifyThreshold: 0.6,
|
|
103
181
|
stepUpChannels: ['your known Telegram', 'a second admin'],
|
|
@@ -127,4 +205,113 @@ export async function runScenarioSuite(gate = buildSliceZeroGate()) {
|
|
|
127
205
|
}
|
|
128
206
|
return results;
|
|
129
207
|
}
|
|
208
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
209
|
+
// Audit-asserting pipeline suite ("verified, not narrated", §8.4)
|
|
210
|
+
//
|
|
211
|
+
// The gate-direct runner above proves the LOGIC. This runner proves the full
|
|
212
|
+
// observe path end-to-end: it drives each row through the SAME object the live
|
|
213
|
+
// SlackAdapter._handleMessage calls — `SlackPermissionObserver.observe` (resolver
|
|
214
|
+
// → gate → PermissionDecisionLedger.record) — and then asserts BOTH:
|
|
215
|
+
// (a) the verdict equals the expected decision/basis, AND
|
|
216
|
+
// (b) the matching decision-ledger entry actually landed
|
|
217
|
+
// (slack-permission-decisions.jsonl / GET /permissions/decisions).
|
|
218
|
+
// A green run = every row produced its expected decision AND its audit entry.
|
|
219
|
+
// That second half is what makes the demonstration self-verified rather than
|
|
220
|
+
// a narrated assertion table.
|
|
221
|
+
// ─────────────────────────────────────────────────────────────────────────────
|
|
222
|
+
/**
|
|
223
|
+
* A registry-backed {@link UserLookup} built from the fixed cast, so the pipeline
|
|
224
|
+
* resolves a verified slackUserId → Principal exactly as production does (an
|
|
225
|
+
* unregistered id — Omar — resolves to an unregistered guest). Identity comes ONLY
|
|
226
|
+
* from the authenticated slackUserId, never from message content.
|
|
227
|
+
*/
|
|
228
|
+
export class CastUserLookup {
|
|
229
|
+
bySlackId = new Map();
|
|
230
|
+
constructor(cast = CAST) {
|
|
231
|
+
for (const p of Object.values(cast)) {
|
|
232
|
+
// Only REGISTERED principals are in the store; an unregistered cast member
|
|
233
|
+
// (Omar) is deliberately absent → the resolver returns an unregistered guest.
|
|
234
|
+
if (p.registered && p.slackUserId && p.userId) {
|
|
235
|
+
this.bySlackId.set(p.slackUserId, {
|
|
236
|
+
id: p.userId,
|
|
237
|
+
name: p.name,
|
|
238
|
+
permissions: [p.role],
|
|
239
|
+
orgRole: p.role,
|
|
240
|
+
});
|
|
241
|
+
}
|
|
242
|
+
}
|
|
243
|
+
}
|
|
244
|
+
resolveFromSlackUserId(slackUserId) {
|
|
245
|
+
return this.bySlackId.get(slackUserId) ?? null;
|
|
246
|
+
}
|
|
247
|
+
}
|
|
248
|
+
/** Build the production-shaped observer (resolver → Slice-0 gate → ledger) for the harness. */
|
|
249
|
+
export function buildScenarioObserver(stateDir) {
|
|
250
|
+
return new SlackPermissionObserver({
|
|
251
|
+
resolver: new SlackPrincipalResolver(new CastUserLookup()),
|
|
252
|
+
gate: buildSliceZeroGate(),
|
|
253
|
+
ledger: new PermissionDecisionLedger(stateDir),
|
|
254
|
+
});
|
|
255
|
+
}
|
|
256
|
+
/**
|
|
257
|
+
* Run every scenario through the real observer (resolver → gate → ledger) and
|
|
258
|
+
* assert BOTH the verdict and the matching audit entry per row. Writes the ledger
|
|
259
|
+
* into a fresh temp state dir (or `stateDir` if provided) so the run is hermetic.
|
|
260
|
+
*
|
|
261
|
+
* NOTE on the resolver: the observer resolves the principal from the
|
|
262
|
+
* authenticated slackUserId via {@link CastUserLookup}; the scenario's
|
|
263
|
+
* `principal` field is only used to supply that slackUserId/displayName and to
|
|
264
|
+
* document the intended cast member. The role/registration the gate actually sees
|
|
265
|
+
* comes from the registry resolution — so this exercises the real
|
|
266
|
+
* identity-binding path, not a hand-built Principal.
|
|
267
|
+
*/
|
|
268
|
+
export async function runAuditedScenarioSuite(stateDir) {
|
|
269
|
+
const dir = stateDir ?? fs.mkdtempSync(path.join(os.tmpdir(), 'slack-scenario-audit-'));
|
|
270
|
+
const observer = buildScenarioObserver(dir);
|
|
271
|
+
const ledger = new PermissionDecisionLedger(dir);
|
|
272
|
+
const rows = [];
|
|
273
|
+
for (const s of SCENARIOS) {
|
|
274
|
+
const slackUserId = s.principal.slackUserId ?? '';
|
|
275
|
+
const verdict = await observer.observe({
|
|
276
|
+
slackUserId,
|
|
277
|
+
displayName: s.principal.name,
|
|
278
|
+
text: s.text,
|
|
279
|
+
directed: s.directed,
|
|
280
|
+
channel: 'C_TEST',
|
|
281
|
+
});
|
|
282
|
+
const verdictOk = !!verdict && verdict.decision === s.expectedDecision && verdict.basis === s.expectedBasis;
|
|
283
|
+
// Audit proof: the matching ledger entry must exist for THIS principal with the
|
|
284
|
+
// expected decision+basis. Read the durable ledger back (not the in-memory verdict).
|
|
285
|
+
const entries = ledger.readRecent(1000);
|
|
286
|
+
const ledgerEntry = entries.find((e) => e.slackUserId === slackUserId &&
|
|
287
|
+
e.decision === s.expectedDecision &&
|
|
288
|
+
e.basis === s.expectedBasis);
|
|
289
|
+
const auditOk = !!ledgerEntry;
|
|
290
|
+
const pass = verdictOk && auditOk;
|
|
291
|
+
rows.push({
|
|
292
|
+
scenario: s,
|
|
293
|
+
verdict,
|
|
294
|
+
ledgerEntry,
|
|
295
|
+
verdictOk,
|
|
296
|
+
auditOk,
|
|
297
|
+
pass,
|
|
298
|
+
mismatch: pass
|
|
299
|
+
? undefined
|
|
300
|
+
: !verdict
|
|
301
|
+
? 'observer returned null (gate/ledger infra error)'
|
|
302
|
+
: !verdictOk
|
|
303
|
+
? `verdict: expected ${s.expectedDecision}/${s.expectedBasis}, got ${verdict.decision}/${verdict.basis}`
|
|
304
|
+
: `no matching audit entry for ${slackUserId} (${s.expectedDecision}/${s.expectedBasis})`,
|
|
305
|
+
});
|
|
306
|
+
}
|
|
307
|
+
return {
|
|
308
|
+
summary: {
|
|
309
|
+
total: rows.length,
|
|
310
|
+
passed: rows.filter((r) => r.pass).length,
|
|
311
|
+
failed: rows.filter((r) => !r.pass).length,
|
|
312
|
+
},
|
|
313
|
+
ledgerPath: ledger.path,
|
|
314
|
+
rows,
|
|
315
|
+
};
|
|
316
|
+
}
|
|
130
317
|
//# sourceMappingURL=SlackScenarioHarness.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"SlackScenarioHarness.js","sourceRoot":"","sources":["../../../src/permissions/testing/SlackScenarioHarness.ts"],"names":[],"mappings":"AAAA;;;;;;;;GAQG;
|
|
1
|
+
{"version":3,"file":"SlackScenarioHarness.js","sourceRoot":"","sources":["../../../src/permissions/testing/SlackScenarioHarness.ts"],"names":[],"mappings":"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"}
|