sneakoscope 10.3.2 → 10.3.4

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 (71) hide show
  1. package/README.md +22 -12
  2. package/config/skills-hash-ledger.v1.json +7 -1
  3. package/crates/sks-core/Cargo.lock +1 -1
  4. package/crates/sks-core/Cargo.toml +1 -1
  5. package/dist/commands/doctor.js +2 -2
  6. package/dist/config/skills-manifest.json +13 -7
  7. package/dist/core/agents/agent-effort-policy.js +15 -13
  8. package/dist/core/agents/native-worker-backend-router.js +13 -8
  9. package/dist/core/codex-hooks/codex-hook-managed-install.js +56 -2
  10. package/dist/core/codex-lb/desktop-bridge-migration/retired-runtime-cleanup.js +1 -0
  11. package/dist/core/codex-native/core-skill-manifest.js +4 -4
  12. package/dist/core/decisions/cli.js +9 -2
  13. package/dist/core/decisions/config.js +7 -0
  14. package/dist/core/decisions/integration.js +54 -12
  15. package/dist/core/decisions/policy.js +27 -4
  16. package/dist/core/decisions/questions.js +39 -9
  17. package/dist/core/decisions/routing.js +15 -10
  18. package/dist/core/decisions/types.js +11 -25
  19. package/dist/core/doctor/current-project-guidance.js +38 -1
  20. package/dist/core/doctor/skill-legacy-surface.js +2 -1
  21. package/dist/core/hooks-runtime/hook-context.js +1 -1
  22. package/dist/core/hooks-runtime/jev-spawn-routing.js +21 -2
  23. package/dist/core/hooks-runtime/managed-guidance-preflight.js +30 -0
  24. package/dist/core/hooks-runtime/official-subagent-lifecycle.js +3 -3
  25. package/dist/core/hooks-runtime/parent-orchestration-gate.js +372 -0
  26. package/dist/core/hooks-runtime/subagent-context.js +13 -3
  27. package/dist/core/hooks-runtime/subagent-spawn-policy.js +5 -10
  28. package/dist/core/hooks-runtime.js +46 -8
  29. package/dist/core/init/skills/inventory.js +5 -1
  30. package/dist/core/init/skills.js +4 -4
  31. package/dist/core/init.js +39 -7
  32. package/dist/core/managed-assets/managed-assets-manifest.js +17 -17
  33. package/dist/core/pipeline-internals/runtime-core.js +2 -2
  34. package/dist/core/provider/model-router.js +8 -5
  35. package/dist/core/recallpulse/policy.js +2 -2
  36. package/dist/core/recallpulse.js +3 -3
  37. package/dist/core/release/gate-affected-globs.js +0 -1
  38. package/dist/core/research/mock-result.js +2 -2
  39. package/dist/core/research/research-adversarial-review.js +7 -7
  40. package/dist/core/research/research-claim-synthesizer.js +3 -3
  41. package/dist/core/research/research-falsification-runner.js +3 -3
  42. package/dist/core/research/research-super-search.js +5 -2
  43. package/dist/core/research/research-synthesis-writer.js +2 -2
  44. package/dist/core/research.js +5 -5
  45. package/dist/core/routes/dollar-manifest-lite.js +1 -1
  46. package/dist/core/routes.js +10 -10
  47. package/dist/core/runtime/task-profile.js +9 -5
  48. package/dist/core/subagents/model-policy.js +27 -45
  49. package/dist/core/subagents/model-tiers.js +153 -0
  50. package/dist/core/subagents/naruto-command-args.js +3 -3
  51. package/dist/core/subagents/naruto-help-contract.js +18 -13
  52. package/dist/core/subagents/naruto-host-credentials.js +8 -13
  53. package/dist/core/subagents/official-subagent-config.js +11 -7
  54. package/dist/core/subagents/official-subagent-preparation.js +12 -8
  55. package/dist/core/subagents/official-subagent-prompt.js +33 -33
  56. package/dist/core/subagents/official-subagent-runner.js +3 -3
  57. package/dist/core/subagents/role-model-preferences.js +26 -21
  58. package/dist/core/update/managed-permission-repair.js +462 -0
  59. package/dist/core/update/update-migration-state/retired-local-decision.js +32 -2
  60. package/dist/core/update/update-migration-state/simple-stages.js +42 -5
  61. package/dist/core/update/update-migration-state.js +63 -1
  62. package/dist/core/update-check.js +35 -8
  63. package/dist/core/version.js +1 -1
  64. package/dist/scripts/codex-native-agent-role-content-check.js +10 -5
  65. package/dist/scripts/codex-native-gate-lib.js +3 -1
  66. package/dist/scripts/current-surface-update-e2e-check.js +1 -0
  67. package/dist/scripts/mutation-callsite-coverage-check.js +2 -2
  68. package/dist/scripts/release-affected-selector-check.js +1 -2
  69. package/dist/scripts/typed-routing-gate-lib.js +3 -1
  70. package/package.json +1 -1
  71. package/release-gates.v2.json +2 -6
@@ -17,6 +17,7 @@ import { runSessionStateSplitStage } from './update-migration-state/session-stat
17
17
  import { runRetiredLocalDecisionStage } from './update-migration-state/retired-local-decision.js';
18
18
  import { runHookTrustRefreshStage, runOtherHarnessCleanupStage } from './update-migration-state/simple-stages.js';
19
19
  import { compareSemVer } from './semver.js';
20
+ import { repairManagedPermissions } from './managed-permission-repair.js';
20
21
  export const UPDATE_MIGRATION_SCHEMA = 'sks.project-migration-receipt.v2';
21
22
  export const INSTALLATION_EPOCH_SCHEMA = 'sks.installation-epoch.v1';
22
23
  export function installationEpochPath() {
@@ -95,8 +96,11 @@ export async function clearPendingUpdateMigration() {
95
96
  export async function writeProjectUpdateMigrationReceipt(input) {
96
97
  const receiptPath = projectUpdateMigrationReceiptPath(input.root);
97
98
  const epoch = await ensureInstallationEpoch(input.source);
99
+ const fromVersion = input.fromVersion || null;
100
+ const permissionStage = await runManagedPermissionRepairStage(input.root, fromVersion);
98
101
  const retentionCleanup = await runUpdateRetentionCleanup(input.root, input.source);
99
- const migrationStageRuns = await runUpdateMigrationStages(input.root, { fromVersion: input.fromVersion || null });
102
+ const stageRuns = await retryStagesAfterPermissionRepair(input.root, fromVersion, await runUpdateMigrationStages(input.root, { fromVersion }));
103
+ const migrationStageRuns = [permissionStage, ...stageRuns];
100
104
  const migrationStages = migrationStageRuns.map(summarizeMigrationStage);
101
105
  const stageBlockers = migrationStageRuns.flatMap((stage) => stage.blockers.map((blocker) => `${stage.id}:${blocker}`));
102
106
  const stageWarnings = migrationStageRuns.flatMap((stage) => stage.warnings.map((warning) => `${stage.id}:${warning}`));
@@ -144,8 +148,64 @@ export async function writeProjectUpdateMigrationReceipt(input) {
144
148
  warnings: optionalWarnings
145
149
  };
146
150
  await writeReceiptRotated(receiptPath, receipt, { keep: 5 });
151
+ if (process.getuid?.() === 0) {
152
+ await repairManagedPermissions({ root: input.root, env: process.env, explicit: true, reportPath: null }).catch(() => null);
153
+ }
147
154
  return receipt;
148
155
  }
156
+ export const MANAGED_PERMISSION_REPAIR_STAGE_ID = 'managed-permission-repair';
157
+ function migrationRunIsExplicit(env) {
158
+ return env.SKS_UPDATE_DEFER_MENUBAR_RESTART === '1' || env.SKS_UPDATE_MIGRATION_GATE_DISABLED !== '1';
159
+ }
160
+ async function runManagedPermissionRepairStage(root, fromVersion) {
161
+ const base = {
162
+ schema: 'sks.update-migration-stage.v2',
163
+ id: MANAGED_PERMISSION_REPAIR_STAGE_ID,
164
+ min_from_version: '0.0.0',
165
+ from_version: fromVersion
166
+ };
167
+ try {
168
+ const report = await repairManagedPermissions({ root, env: process.env, explicit: migrationRunIsExplicit(process.env) });
169
+ const elevation = report.elevation;
170
+ return {
171
+ ...base,
172
+ ok: true,
173
+ status: 'ok',
174
+ actions: [
175
+ ...(report.user_fixed ? [`fixed_user_permissions:${report.user_fixed}`] : []),
176
+ ...(elevation.needed ? [`elevation:${elevation.channel}:${elevation.ok === true ? 'granted' : elevation.declined ? 'declined' : 'not_granted'}`] : [])
177
+ ],
178
+ blockers: [],
179
+ warnings: report.warnings,
180
+ detail: {
181
+ issues_found: report.issues_found,
182
+ user_fixed: report.user_fixed,
183
+ elevation,
184
+ remaining: report.remaining,
185
+ operator_actions: report.operator_actions
186
+ }
187
+ };
188
+ }
189
+ catch (err) {
190
+ return { ...base, ok: true, status: 'ok', actions: [], blockers: [], warnings: [`managed_permission_repair_failed:${err?.message || String(err)}`] };
191
+ }
192
+ }
193
+ async function retryStagesAfterPermissionRepair(root, fromVersion, runs) {
194
+ const failed = runs.filter((run) => !run.ok);
195
+ if (!failed.length)
196
+ return runs;
197
+ const report = await repairManagedPermissions({
198
+ root,
199
+ env: process.env,
200
+ explicit: migrationRunIsExplicit(process.env),
201
+ reportPath: path.join(root, '.sneakoscope', 'reports', 'managed-permission-repair-retry.json')
202
+ }).catch(() => null);
203
+ if (!report || (report.user_fixed === 0 && report.elevation.ok !== true))
204
+ return runs;
205
+ const rerun = await runUpdateMigrationStages(root, { fromVersion, only: new Set(failed.map((run) => run.id)) });
206
+ const byId = new Map(rerun.map((run) => [run.id, { ...run, warnings: [...run.warnings, 'rerun_after_permission_repair'] }]));
207
+ return runs.map((run) => byId.get(run.id) || run);
208
+ }
149
209
  function summarizeMigrationStage(stage) {
150
210
  return {
151
211
  id: stage.id,
@@ -283,6 +343,8 @@ export async function runUpdateMigrationStages(root, opts = {}) {
283
343
  const fromVersion = opts.fromVersion || null;
284
344
  const runs = [];
285
345
  for (const stage of UPDATE_MIGRATION_STAGES) {
346
+ if (opts.only && !opts.only.has(stage.id))
347
+ continue;
286
348
  if (!legacyStageApplies(fromVersion, stage.min_from_version)) {
287
349
  runs.push({
288
350
  schema: 'sks.update-migration-stage.v2',
@@ -12,6 +12,7 @@ import { compareSemVer, extractSemVer, parseSemVer } from './update/semver.js';
12
12
  import { countUpdates, emptyUpdateStatus, resolveSksUpdateStatus, UpdateStatusRefreshError } from './update/update-status.js';
13
13
  import { acquireUpdateOperationLock, authorizeUpdateRollback, buildUpdateNowCommand, buildUpdateRollbackCommand, canonicalUpdateRegistry, UpdateOperationRecorder, updateOperationLastInstallPath, updateReceiptHasConfirmedGlobalInstall } from './update/update-operation.js';
14
14
  import { runTemporaryInstallSmoke } from './update/temporary-install-smoke.js';
15
+ import { npmGlobalInstallTargets, repairManagedPermissions } from './update/managed-permission-repair.js';
15
16
  import { updateStageFailureDiagnostics } from './update/update-stage-diagnostics.js';
16
17
  import { executableOnInjectedPath, inspectInstalledCliResolution } from './update/installed-cli-resolution.js';
17
18
  import { ui as cliUi, withHeartbeat } from '../cli/cli-theme.js';
@@ -400,6 +401,7 @@ async function runSksUpdateNowInternal(options, rollbackAuthorization) {
400
401
  const stages = [];
401
402
  let temporaryInstallSmoke = null;
402
403
  await options.beforeOperationLock?.();
404
+ await repairManagedPermissions({ root: projectReceiptRoot, env, explicit: true, interactive: true }).catch(() => null);
403
405
  const operationLock = await acquireUpdateOperationLock(env);
404
406
  if (!operationLock.ok) {
405
407
  stages.push({
@@ -887,18 +889,43 @@ async function runSksUpdateNowInternal(options, rollbackAuthorization) {
887
889
  command,
888
890
  target_version: installVersion
889
891
  });
890
- const install = alreadyCurrent
892
+ const runGlobalInstall = () => updateHeartbeat(machineOutput, `npm install -g ${packageName}`, guardedPackageInstall(guardContextForRoute(mutationLedgerRoot, installContract, command || `npm global install ${packageName}`), `${packageName}@${installVersion}`, installOptions), 60_000).catch((err) => ({
893
+ code: 1,
894
+ stdout: '',
895
+ stderr: err instanceof Error ? err.message : String(err),
896
+ timedOut: false
897
+ }));
898
+ let install = alreadyCurrent
891
899
  ? { code: 0, stdout: '', stderr: '', timedOut: false }
892
900
  : env.SKS_UPDATE_FAKE_INSTALL === '1'
893
901
  ? { code: 0, stdout: 'fake install ok', stderr: '', timedOut: false }
894
- : await updateHeartbeat(machineOutput, `npm install -g ${packageName}`, guardedPackageInstall(guardContextForRoute(mutationLedgerRoot, installContract, command || `npm global install ${packageName}`), `${packageName}@${installVersion}`, installOptions), 60_000).catch((err) => ({
895
- code: 1,
896
- stdout: '',
897
- stderr: err instanceof Error ? err.message : String(err),
898
- timedOut: false
899
- }));
902
+ : await runGlobalInstall();
903
+ let installPermissionRepair = null;
904
+ if (install.code !== 0 && !alreadyCurrent && globalRoot && /\b(EACCES|EPERM)\b/.test(`${install.stderr}\n${install.stdout}`)) {
905
+ const targets = await npmGlobalInstallTargets(globalRoot, packageName).catch(() => []);
906
+ const repair = targets.length
907
+ ? await repairManagedPermissions({
908
+ root: projectReceiptRoot,
909
+ env,
910
+ explicit: true,
911
+ interactive: true,
912
+ targets,
913
+ reason: 'SKS update needs administrator permission to let npm replace the installed SKS package.',
914
+ reportPath: null
915
+ }).catch(() => null)
916
+ : null;
917
+ const repaired = Boolean(repair && (repair.user_fixed > 0 || repair.elevation.ok === true));
918
+ installPermissionRepair = { channel: repair?.elevation.channel || 'unavailable', granted: repair?.elevation.ok ?? null, retried: repaired };
919
+ if (repaired)
920
+ install = await runGlobalInstall();
921
+ }
900
922
  const installOk = install.code === 0;
901
- stage('global_install', installOk, alreadyCurrent ? 'skipped_current' : installOk ? env.SKS_UPDATE_FAKE_INSTALL === '1' ? 'fake_installed' : 'installed' : 'failed', { command, code: install.code, timed_out: install.timedOut === true });
923
+ stage('global_install', installOk, alreadyCurrent ? 'skipped_current' : installOk ? env.SKS_UPDATE_FAKE_INSTALL === '1' ? 'fake_installed' : 'installed' : 'failed', {
924
+ command,
925
+ code: install.code,
926
+ timed_out: install.timedOut === true,
927
+ ...(installPermissionRepair ? { permission_repair: installPermissionRepair } : {})
928
+ });
902
929
  let newBinary = null;
903
930
  let newVersion = null;
904
931
  let installedCliResolution = null;
@@ -1 +1 @@
1
- export const PACKAGE_VERSION = '10.3.2';
1
+ export const PACKAGE_VERSION = '10.3.4';
@@ -5,6 +5,11 @@ import os from 'node:os';
5
5
  import { parse } from 'smol-toml';
6
6
  import { syncCodexAgentRoles } from '../core/codex-app/codex-agent-role-sync.js';
7
7
  import { MANAGED_OFFICIAL_SUBAGENT_ROLES } from '../core/managed-assets/managed-assets-manifest.js';
8
+ import { latestModelForTier } from '../core/subagents/model-tiers.js';
9
+ const fast = latestModelForTier('fast');
10
+ const balanced = latestModelForTier('balanced');
11
+ const context = latestModelForTier('context');
12
+ const deep = latestModelForTier('deep');
8
13
  const root = await fs.promises.mkdtemp(path.join(os.tmpdir(), 'sks-agent-role-content-'));
9
14
  const codexHome = path.join(root, 'codex-home');
10
15
  const report = await syncCodexAgentRoles({ root, codexHome, apply: true, agentTypeSupported: true });
@@ -12,16 +17,16 @@ const expert = await fs.promises.readFile(path.join(root, '.codex', 'agents', 'e
12
17
  const worker = await fs.promises.readFile(path.join(root, '.codex', 'agents', 'worker.toml'), 'utf8');
13
18
  const implementation = await fs.promises.readFile(path.join(root, '.codex', 'agents', 'implementation-specialist.toml'), 'utf8');
14
19
  const browser = await fs.promises.readFile(path.join(root, '.codex', 'agents', 'browser-use-operator.toml'), 'utf8');
15
- assertGate(expert.includes('model = "gpt-6-astra"') && expert.includes('model_reasoning_effort = "max"'), 'expert role must use Astra Max');
16
- assertGate(worker.includes('model = "gpt-6-astra"') && worker.includes('model_reasoning_effort = "low"'), 'worker role must use Astra Low');
17
- assertGate(implementation.includes('model = "gpt-6-astra"') && implementation.includes('model_reasoning_effort = "low"'), 'implementation role must use Astra Low');
18
- assertGate(browser.includes('model = "gpt-6-astra"') && browser.includes('model_reasoning_effort = "medium"'), 'browser role must use Astra Medium');
20
+ assertGate(expert.includes(`model = "${deep}"`) && expert.includes('model_reasoning_effort = "max"'), 'expert role must use the deep tier at max');
21
+ assertGate(worker.includes(`model = "${fast}"`) && worker.includes('model_reasoning_effort = "low"'), 'worker role must use the fast tier at low');
22
+ assertGate(implementation.includes(`model = "${balanced}"`) && implementation.includes('model_reasoning_effort = "low"'), 'implementation role must use the balanced tier at low');
23
+ assertGate(browser.includes(`model = "${context}"`) && browser.includes('model_reasoning_effort = "medium"'), 'browser role must use the context tier at medium');
19
24
  assertGate(expert.includes('Do not spawn another subagent.') && worker.includes('Do not redesign the task, expand scope, or spawn another subagent.'), 'official roles must prohibit nested delegation');
20
25
  assertGate(MANAGED_OFFICIAL_SUBAGENT_ROLES.length === 25, 'official role catalog must contain all 25 roles');
21
26
  for (const role of MANAGED_OFFICIAL_SUBAGENT_ROLES) {
22
27
  const text = await fs.promises.readFile(path.join(root, '.codex', 'agents', role.filename), 'utf8');
23
28
  const doc = parse(text);
24
- assertGate(doc.model === 'gpt-6-astra', `official role managed model mismatch:${role.codex_name}`);
29
+ assertGate([fast, balanced, context, deep].includes(String(doc.model)), `official role managed model is not a current tier model:${role.codex_name}`);
25
30
  assertGate(doc.name === role.codex_name && doc.model === role.model && doc.model_reasoning_effort === role.model_reasoning_effort, `official role policy mismatch:${role.codex_name}`);
26
31
  assertGate(Object.hasOwn(doc, 'sandbox_mode') === (role.sandbox === 'read-only'), `official role sandbox inheritance mismatch:${role.codex_name}`);
27
32
  assertGate(doc.sandbox_mode === role.sandbox, `official role sandbox value mismatch:${role.codex_name}`);
@@ -281,7 +281,9 @@ async function agentRoleContent(id) {
281
281
  const codexHome = path.join(tmp, 'codex-home');
282
282
  const report = await mod.syncCodexAgentRoles({ root: tmp, codexHome, apply: true });
283
283
  const role = fs.readFileSync(path.join(tmp, '.codex', 'agents', 'worker.toml'), 'utf8');
284
- assertGate(role.includes('model = "gpt-6-astra"') && role.includes('Work only on the exact slice assigned by the parent agent.'), 'official worker role content incomplete', { role, report });
284
+ const tiers = await importDist('core/subagents/model-tiers.js');
285
+ const fastModel = String(tiers.latestModelForTier('fast'));
286
+ assertGate(role.includes(`model = "${fastModel}"`) && role.includes('Work only on the exact slice assigned by the parent agent.'), 'official worker role content incomplete', { role, report, fastModel });
285
287
  assertGate(!fs.existsSync(path.join(codexHome, 'agents')), 'agent role content gate must not create global directive roles', report);
286
288
  }
287
289
  finally {
@@ -8,6 +8,7 @@ import { PACKAGE_VERSION, packageRoot, readJson, writeReceiptRotated } from '../
8
8
  import { runSksUpdateNow } from '../core/update-check.js';
9
9
  import { ensureCurrentMigrationBeforeCommand, projectUpdateMigrationReceiptPath, runPackageLocalDoctor } from '../core/update/update-migration-state.js';
10
10
  const REQUIRED_MIGRATION_STAGES = [
11
+ 'managed-permission-repair',
11
12
  'other-harness-cleanup',
12
13
  'retired-local-decision',
13
14
  'current-public-surface-reconcile',
@@ -215,9 +215,9 @@ function risksForCall(call) {
215
215
  && /\b(?:install|i|add|uninstall|remove|publish)\b/.test(call.normalized_call)) {
216
216
  risks.push({ kind: 'package_install', token: 'runProcess(npm/brew)' });
217
217
  }
218
- if (/^['"]xattr['"]$/.test(firstArgument.trim()))
218
+ if (/^['"](?:\/usr\/bin\/)?xattr['"]$/.test(firstArgument.trim()))
219
219
  risks.push({ kind: 'xattr', token: 'xattr' });
220
- if (/^['"]chflags['"]$/.test(firstArgument.trim()))
220
+ if (/^['"](?:\/usr\/bin\/)?chflags['"]$/.test(firstArgument.trim()))
221
221
  risks.push({ kind: 'chflags', token: 'chflags' });
222
222
  }
223
223
  if (callee && ['spawn', 'spawnSync', 'child_process.spawn', 'child_process.spawnSync'].includes(callee)
@@ -85,8 +85,7 @@ for (const changedFile of [
85
85
  'src/core/routes.ts',
86
86
  'src/core/subagents/naruto-help-contract.ts',
87
87
  'src/core/commands/naruto-command.ts',
88
- 'src/bin/fast-inline.ts',
89
- 'test/blackbox/official-subagent-workflow-packed.test.mjs'
88
+ 'src/bin/fast-inline.ts'
90
89
  ]) {
91
90
  const selectedForPolicy = selectorMod.selectAffectedReleaseGates(root, manifest, gates, {
92
91
  changedFiles: [changedFile],
@@ -230,7 +230,9 @@ async function richContentGate(id) {
230
230
  const codexHome = path.join(rootDir, 'codex-home');
231
231
  const report = await mod.syncCodexAgentRoles({ root: rootDir, codexHome, apply: true });
232
232
  const role = fs.readFileSync(path.join(rootDir, '.codex', 'agents', 'expert.toml'), 'utf8');
233
- assertGate(role.includes('model = "gpt-6-astra"') && role.includes('Do not spawn another subagent.'), 'official expert role must include Astra Max and no-nesting instructions', { role, report });
233
+ const tiers = await importDist('core/subagents/model-tiers.js');
234
+ const deep = tiers.latestModelForTier('deep');
235
+ assertGate(role.includes(`model = "${deep}"`) && role.includes('Do not spawn another subagent.'), 'official expert role must use the latest deep-tier model and no-nesting instructions', { role, report });
234
236
  assertGate(!fs.existsSync(path.join(codexHome, 'agents')), 'rich-content sync must not create global directive roles', report);
235
237
  emitGate(id, { roles: report.created.length });
236
238
  }
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "sneakoscope",
3
3
  "displayName": "ㅅㅋㅅ",
4
- "version": "10.3.2",
4
+ "version": "10.3.4",
5
5
  "description": "Sneakoscope Codex (`sks`) is an open-source trust layer for Codex CLI and ChatGPT Desktop. It coordinates bounded AI coding agents, records machine-verifiable evidence, preserves project memory, and blocks release claims that are not supported by current tests or artifacts. Search visibility outcomes are measured separately; SKS does not promise rankings or traffic.",
6
6
  "type": "module",
7
7
  "homepage": "https://github.com/mandarange/Sneakoscope-Codex#readme",
@@ -2203,8 +2203,7 @@
2203
2203
  "src/core/proof/**",
2204
2204
  "src/core/trust-kernel/**",
2205
2205
  "src/scripts/proof-root-cause-policy-check.ts",
2206
- "test/unit/route-completion-contract.test.mjs",
2207
- "test/integration/route-proof-adapters.test.mjs"
2206
+ "test/unit/route-completion-contract.test.mjs"
2208
2207
  ]
2209
2208
  },
2210
2209
  "isolation": {
@@ -3240,7 +3239,6 @@
3240
3239
  "src/cli/__tests__/router-active-naruto.test.ts",
3241
3240
  "src/bin/fast-inline.ts",
3242
3241
  "src/bin/sks-dispatch.ts",
3243
- "test/blackbox/official-subagent-workflow-packed.test.mjs",
3244
3242
  "src/core/release/release-gate-affected-selector.ts",
3245
3243
  "src/core/release/__tests__/release-gate-affected-selector.test.ts"
3246
3244
  ]
@@ -4556,9 +4554,7 @@
4556
4554
  "src/scripts/all-feature-deep-completion-check.ts",
4557
4555
  "docs/feature-inventory.md",
4558
4556
  "test/unit/feature-registry.test.mjs",
4559
- "test/unit/all-feature-deep-completion.test.mjs",
4560
- "test/integration/all-feature-deep-completion.test.mjs",
4561
- "test/blackbox/all-feature-deep-completion-packed.test.mjs"
4557
+ "test/unit/all-feature-deep-completion.test.mjs"
4562
4558
  ]
4563
4559
  },
4564
4560
  "isolation": {