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.
Files changed (45) hide show
  1. package/dist/cli.js +9 -0
  2. package/dist/cli.js.map +1 -1
  3. package/dist/commands/server.d.ts.map +1 -1
  4. package/dist/commands/server.js +9 -8
  5. package/dist/commands/server.js.map +1 -1
  6. package/dist/commands/test-as-self.d.ts +17 -0
  7. package/dist/commands/test-as-self.d.ts.map +1 -1
  8. package/dist/commands/test-as-self.js +57 -0
  9. package/dist/commands/test-as-self.js.map +1 -1
  10. package/dist/core/devAgentGate.d.ts +39 -0
  11. package/dist/core/devAgentGate.d.ts.map +1 -0
  12. package/dist/core/devAgentGate.js +37 -0
  13. package/dist/core/devAgentGate.js.map +1 -0
  14. package/dist/permissions/testing/SlackScenarioHarness.d.ts +97 -5
  15. package/dist/permissions/testing/SlackScenarioHarness.d.ts.map +1 -1
  16. package/dist/permissions/testing/SlackScenarioHarness.js +190 -3
  17. package/dist/permissions/testing/SlackScenarioHarness.js.map +1 -1
  18. package/dist/scaffold/templates.d.ts.map +1 -1
  19. package/dist/scaffold/templates.js +4 -1
  20. package/dist/scaffold/templates.js.map +1 -1
  21. package/dist/server/AgentServer.d.ts.map +1 -1
  22. package/dist/server/AgentServer.js +3 -2
  23. package/dist/server/AgentServer.js.map +1 -1
  24. package/dist/server/routes.d.ts.map +1 -1
  25. package/dist/server/routes.js +38 -2
  26. package/dist/server/routes.js.map +1 -1
  27. package/dist/threadline/ThreadlineBootstrap.d.ts +0 -3
  28. package/dist/threadline/ThreadlineBootstrap.d.ts.map +1 -1
  29. package/dist/threadline/ThreadlineBootstrap.js +1 -35
  30. package/dist/threadline/ThreadlineBootstrap.js.map +1 -1
  31. package/dist/threadline/client/ThreadlineClient.d.ts +32 -0
  32. package/dist/threadline/client/ThreadlineClient.d.ts.map +1 -1
  33. package/dist/threadline/client/ThreadlineClient.js +112 -13
  34. package/dist/threadline/client/ThreadlineClient.js.map +1 -1
  35. package/package.json +4 -2
  36. package/scripts/lint-dev-agent-dark-gate.js +196 -0
  37. package/scripts/lint-no-direct-destructive.js +4 -0
  38. package/src/data/builtin-manifest.json +79 -79
  39. package/src/scaffold/templates.ts +4 -1
  40. package/upgrades/1.3.455.md +46 -0
  41. package/upgrades/1.3.456.md +33 -0
  42. package/upgrades/side-effects/dev-agent-dark-gate-lint.md +104 -0
  43. package/upgrades/side-effects/slack-test-as-self-harness.md +155 -0
  44. package/upgrades/side-effects/threadline-dup-identity-pr1-resolver.md +162 -0
  45. 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
- /** The fixed cast of test users (§8.2). */
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
- /** The six assertion rows (§8.4). Scenario 5 models the CEO's own account behaving anomalously. */
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
- /** Build the Slice-0 gate wired with the deterministic (heuristic) classifier + anomaly scorer. */
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;AAEH,OAAO,KAAK,EAAE,SAAS,EAAE,kBAAkB,EAAE,iBAAiB,EAAE,MAAM,aAAa,CAAC;AAIpF,OAAO,EAAE,mBAAmB,EAAE,MAAM,2BAA2B,CAAC;AAEhE,2CAA2C;AAC3C,eAAO,MAAM,IAAI,EAAE,MAAM,CAAC,MAAM,EAAE,SAAS,CAM1C,CAAC;AAoBF,MAAM,WAAW,QAAQ;IACvB,EAAE,EAAE,MAAM,CAAC;IACX,SAAS,EAAE,SAAS,CAAC;IACrB,IAAI,EAAE,MAAM,CAAC;IACb,QAAQ,EAAE,OAAO,CAAC;IAClB,gBAAgB,EAAE,kBAAkB,CAAC;IACrC,aAAa,EAAE,MAAM,CAAC;IACtB,MAAM,EAAE,MAAM,CAAC;CAChB;AAED,mGAAmG;AACnG,eAAO,MAAM,SAAS,EAAE,QAAQ,EAuD/B,CAAC;AAEF,mGAAmG;AACnG,wBAAgB,kBAAkB,IAAI,mBAAmB,CASxD;AAED,MAAM,WAAW,cAAc;IAC7B,QAAQ,EAAE,QAAQ,CAAC;IACnB,OAAO,EAAE,iBAAiB,CAAC;IAC3B,IAAI,EAAE,OAAO,CAAC;IACd,QAAQ,CAAC,EAAE,MAAM,CAAC;CACnB;AAED,qEAAqE;AACrE,wBAAsB,gBAAgB,CAAC,IAAI,sBAAuB,GAAG,OAAO,CAAC,cAAc,EAAE,CAAC,CAsB7F"}
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
- /** The fixed cast of test users (§8.2). */
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
- /** The six assertion rows (§8.4). Scenario 5 models the CEO's own account behaving anomalously. */
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
- /** Build the Slice-0 gate wired with the deterministic (heuristic) classifier + anomaly scorer. */
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":"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"}
1
+ {"version":3,"file":"SlackScenarioHarness.js","sourceRoot":"","sources":["../../../src/permissions/testing/SlackScenarioHarness.ts"],"names":[],"mappings":"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"}