@akagilnc/pi-workflow-roles 0.1.3648 → 0.1.3652

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 (66) hide show
  1. package/dist/acp-host/production-host.js +2919 -1750
  2. package/dist/activation-ledger-session.js +105 -0
  3. package/dist/activation-ledger.js +139 -0
  4. package/dist/activation-trace.js +33 -0
  5. package/dist/agent-start-materials.js +11 -0
  6. package/dist/auditor-role.js +12 -0
  7. package/dist/canonical-skill-binding.js +64 -0
  8. package/dist/collector-identity.js +151 -0
  9. package/dist/collector-receipt.js +95 -0
  10. package/dist/collector-role.js +441 -0
  11. package/dist/countersign-role.js +28 -0
  12. package/dist/diarist-role.js +29 -0
  13. package/dist/doctor-role.js +74 -0
  14. package/dist/fixer-bash-seatbelt.js +13 -0
  15. package/dist/gatekeeper-pass-envelope.js +72 -0
  16. package/dist/gleaner-left-role.js +26 -0
  17. package/dist/inspector-role.js +29 -0
  18. package/dist/judge-role.js +106 -0
  19. package/dist/merger-role.js +66 -0
  20. package/dist/navigator-role.js +12 -0
  21. package/dist/notary-role.js +137 -0
  22. package/dist/oauth-keepalive.js +158 -0
  23. package/dist/package-contracts/terminating-tools.js +2 -16
  24. package/dist/packaged-role-registry.js +1 -18
  25. package/dist/pi/adapter.js +211 -0
  26. package/dist/pi/role-turn-host.js +0 -2
  27. package/dist/public-cli/instruction-seat-run.js +2 -6
  28. package/dist/public-cli/invocation.js +0 -7
  29. package/dist/public-cli/main.js +94 -191
  30. package/dist/public-cli/option-definitions.js +0 -14
  31. package/dist/public-cli/registry.js +1 -2
  32. package/dist/public-cli/run-lifecycle.js +1 -3
  33. package/dist/public-cli/settlement.js +0 -10
  34. package/dist/public-role-summons.js +0 -14
  35. package/dist/reviewer-child-executor.js +163 -70
  36. package/dist/reviewer-construction.js +2 -2
  37. package/dist/reviewer-role.js +159 -0
  38. package/dist/reviewer-settlement.js +66 -0
  39. package/dist/role-runtime.js +1394 -0
  40. package/dist/stderr-jsonl.js +26 -0
  41. package/dist/tool-execution-observation.js +141 -0
  42. package/dist/worker-role.js +343 -0
  43. package/dist/worker-submission-gates.js +305 -0
  44. package/extensions/role-runtime.ts +1 -2
  45. package/package.json +1 -1
  46. package/src/acp-host/production-host.ts +0 -1
  47. package/src/host-contracts.ts +0 -2
  48. package/src/package-contracts/terminating-tools.ts +1 -19
  49. package/src/packaged-role-registry.ts +1 -19
  50. package/src/pi/role-turn-host.ts +0 -2
  51. package/src/public-cli/cli.ts +1 -5
  52. package/src/public-cli/instruction-seat-run.ts +5 -14
  53. package/src/public-cli/invocation.ts +3 -21
  54. package/src/public-cli/option-definitions.ts +0 -16
  55. package/src/public-cli/registry.ts +1 -2
  56. package/src/public-cli/run-lifecycle.ts +0 -6
  57. package/src/public-cli/settlement.ts +0 -32
  58. package/src/public-cli/terminal.ts +0 -1
  59. package/src/public-role-summons.ts +0 -15
  60. package/src/reviewer-child-executor.ts +199 -98
  61. package/src/reviewer-construction.ts +3 -3
  62. package/src/role-runtime.ts +1 -33
  63. package/dist/package-contracts/evidence-child-output.js +0 -31
  64. package/souls/evidence-child.md +0 -1
  65. package/src/evidence-child-role.ts +0 -22
  66. package/src/package-contracts/evidence-child-output.ts +0 -46
@@ -15044,41 +15044,6 @@ var init_auditor_output = __esm({
15044
15044
  }
15045
15045
  });
15046
15046
 
15047
- // src/package-contracts/evidence-child-output.ts
15048
- function isRecord7(value) {
15049
- return typeof value === "object" && value !== null && !Array.isArray(value);
15050
- }
15051
- function projectLawfulEvidenceChildOutput(value) {
15052
- if (!isRecord7(value)) return void 0;
15053
- return { report: Object.hasOwn(value, "report") ? value.report : value };
15054
- }
15055
- function validateRecordedEvidenceChildOutput(value) {
15056
- const projected = projectLawfulEvidenceChildOutput(value);
15057
- if (projected === void 0) {
15058
- throw new Error("Evidence-child output is not an object");
15059
- }
15060
- return projected;
15061
- }
15062
- var EVIDENCE_CHILD_OUTPUT_TOOL_NAME, evidenceChildOutputSchema;
15063
- var init_evidence_child_output = __esm({
15064
- "src/package-contracts/evidence-child-output.ts"() {
15065
- "use strict";
15066
- init_build();
15067
- init_open_tool_schema();
15068
- init_terminating_infrastructure();
15069
- EVIDENCE_CHILD_OUTPUT_TOOL_NAME = "ak_evidence_child_output";
15070
- evidenceChildOutputSchema = withInfrastructureFailureDeclaration(
15071
- openToolObject(
15072
- typebox_exports.Object({
15073
- report: typebox_exports.Unknown({
15074
- description: "\u53D6\u8BC1\u62A5\u544A\u6B63\u6587 \u2014 \u5F62\u72B6\u6307\u5F15\uFF0C\u975E schema \u95F8"
15075
- })
15076
- })
15077
- )
15078
- );
15079
- }
15080
- });
15081
-
15082
15047
  // src/diarist-contracts.ts
15083
15048
  function validateRecordedDiaristOutput(value) {
15084
15049
  if (value === null || typeof value !== "object" || Array.isArray(value)) {
@@ -15114,7 +15079,7 @@ var init_diarist_contracts = __esm({
15114
15079
  function packagedRoleMetadata(role) {
15115
15080
  return PACKAGED_ROLE_REGISTRY.find((entry) => entry.role === role);
15116
15081
  }
15117
- var NOTARY_SESSION_MATERIALS, INSPECTOR_SESSION_MATERIALS, AUDITOR_PUBLIC_SESSION_MATERIALS, EVIDENCE_CHILD_SESSION_MATERIALS, PUBLIC_ROLE_RECORDS, PACKAGED_ROLE_REGISTRY;
15082
+ var NOTARY_SESSION_MATERIALS, INSPECTOR_SESSION_MATERIALS, AUDITOR_PUBLIC_SESSION_MATERIALS, PUBLIC_ROLE_RECORDS, PACKAGED_ROLE_REGISTRY;
15118
15083
  var init_packaged_role_registry = __esm({
15119
15084
  "src/packaged-role-registry.ts"() {
15120
15085
  "use strict";
@@ -15131,7 +15096,6 @@ var init_packaged_role_registry = __esm({
15131
15096
  init_gleaner_left_contracts();
15132
15097
  init_inspector_contracts();
15133
15098
  init_auditor_output();
15134
- init_evidence_child_output();
15135
15099
  init_diarist_contracts();
15136
15100
  NOTARY_SESSION_MATERIALS = [
15137
15101
  "CLAUDE.md",
@@ -15153,12 +15117,6 @@ var init_packaged_role_registry = __esm({
15153
15117
  "souls/audit-law.md",
15154
15118
  "souls/quality-law.md"
15155
15119
  ];
15156
- EVIDENCE_CHILD_SESSION_MATERIALS = [
15157
- "CLAUDE.md",
15158
- "souls/evidence-child.md",
15159
- "souls/audit-law.md",
15160
- "souls/quality-law.md"
15161
- ];
15162
15120
  PUBLIC_ROLE_RECORDS = [
15163
15121
  {
15164
15122
  role: "judge",
@@ -15312,7 +15270,7 @@ var init_packaged_role_registry = __esm({
15312
15270
  activationStage: "load-and-install",
15313
15271
  sessionMaterials: ["CLAUDE.md", "souls/navigator.md"]
15314
15272
  },
15315
- // #675: 审刑院 / evidence-child are roles like any other — public ak-role entries.
15273
+ // #675: 审刑院 is a role like any other — public ak-role entry. (#744: evidence-child deleted)
15316
15274
  {
15317
15275
  role: "auditor",
15318
15276
  phases: [null],
@@ -15322,15 +15280,6 @@ var init_packaged_role_registry = __esm({
15322
15280
  activationStage: "load-and-install",
15323
15281
  sessionMaterials: AUDITOR_PUBLIC_SESSION_MATERIALS
15324
15282
  },
15325
- {
15326
- role: "evidence-child",
15327
- phases: [null],
15328
- outputTool: EVIDENCE_CHILD_OUTPUT_TOOL_NAME,
15329
- inputFlag: void 0,
15330
- phaseFlag: void 0,
15331
- activationStage: "load-and-install",
15332
- sessionMaterials: EVIDENCE_CHILD_SESSION_MATERIALS
15333
- },
15334
15283
  // #708 / ADR 0075 `diarist-is-role`: 起居郎 is a seat like any other. The
15335
15284
  // frozen source catalog rides the shared input-flag seam; it is absent for a
15336
15285
  // true-unbound summons (no ticket → no diary).
@@ -15458,9 +15407,8 @@ var init_registry2 = __esm({
15458
15407
  { provider: "openai-codex", model: "gpt-5.6-luna", thinking: "medium" },
15459
15408
  { provider: "xai", model: "grok-4.5", thinking: "high" }
15460
15409
  ],
15461
- // #675: auditor / evidence-child public seats — no package startup; caller configures.
15410
+ // #675: auditor public seat — no package startup; caller configures.
15462
15411
  auditor: [],
15463
- "evidence-child": [],
15464
15412
  // #708 `diarist-seat-default`: owner-set initial value; changed in the seat
15465
15413
  // table like any other seat. No engine axis, package-default host.
15466
15414
  diarist: [{ provider: "xai", model: "grok-4.5", thinking: "medium" }]
@@ -16198,7 +16146,7 @@ import {
16198
16146
  writeFileSync
16199
16147
  } from "node:fs";
16200
16148
  import { basename as basename3, dirname as dirname5, join as join8, resolve as resolve3 } from "node:path";
16201
- function isRecord8(value) {
16149
+ function isRecord7(value) {
16202
16150
  return typeof value === "object" && value !== null && !Array.isArray(value);
16203
16151
  }
16204
16152
  function errorCodeOf(error) {
@@ -16226,7 +16174,7 @@ function findIdentityPointer(recordFile, identity, kind, level) {
16226
16174
  if (!trimmed) continue;
16227
16175
  try {
16228
16176
  const parsed = JSON.parse(trimmed);
16229
- if (isRecord8(parsed) && parsed.identity === identity) {
16177
+ if (isRecord7(parsed) && parsed.identity === identity) {
16230
16178
  return { identity, recordFile, kind, level };
16231
16179
  }
16232
16180
  } catch {
@@ -16414,7 +16362,7 @@ var init_sitian_appender = __esm({
16414
16362
  // src/sitian-reader.ts
16415
16363
  import { existsSync as existsSync5 } from "node:fs";
16416
16364
  import { readFile as readFile2 } from "node:fs/promises";
16417
- function isRecord9(value) {
16365
+ function isRecord8(value) {
16418
16366
  return typeof value === "object" && value !== null && !Array.isArray(value);
16419
16367
  }
16420
16368
  async function readSitianRecords(recordFile) {
@@ -16430,7 +16378,7 @@ async function readSitianRecords(recordFile) {
16430
16378
  if (!line2.trim()) continue;
16431
16379
  try {
16432
16380
  const parsed = JSON.parse(line2);
16433
- if (isRecord9(parsed)) {
16381
+ if (isRecord8(parsed)) {
16434
16382
  records2.push(parsed);
16435
16383
  } else {
16436
16384
  const typeDesc = parsed === null ? "null" : Array.isArray(parsed) ? "array" : typeof parsed;
@@ -16567,8 +16515,6 @@ function buildActivationFlagArgs(activation) {
16567
16515
  return ["--ak-role", "navigator"];
16568
16516
  case "auditor":
16569
16517
  return ["--ak-role", "auditor"];
16570
- case "evidence-child":
16571
- return ["--ak-role", "evidence-child"];
16572
16518
  case "diarist":
16573
16519
  return [
16574
16520
  "--ak-role",
@@ -16939,14 +16885,12 @@ function validateAcceptedDetails(toolName, details) {
16939
16885
  [GATEKEEPER_OUTPUT_TOOL_NAME]: ["dispatch", "pass"],
16940
16886
  [NAVIGATOR_OUTPUT_TOOL_NAME]: ["advice"],
16941
16887
  [AUDITOR_OUTPUT_TOOL_NAME]: ["pass", "bounce", "escalate"],
16942
- [EVIDENCE_CHILD_OUTPUT_TOOL_NAME]: [],
16943
16888
  [DIARIST_OUTPUT_TOOL_NAME]: ["completed"]
16944
16889
  };
16945
16890
  const collectorDiscriminator = toolName === COLLECTOR_OUTPUT_TOOL && Array.isArray(candidate?.groups);
16946
- const evidenceChildDiscriminator = toolName === EVIDENCE_CHILD_OUTPUT_TOOL_NAME && candidate !== null && typeof candidate === "object" && !Array.isArray(candidate);
16947
16891
  const baseDiscriminator = discriminator;
16948
16892
  const runtimeBindingMissing = toolName === DOCTOR_OUTPUT_TOOL_NAME && baseDiscriminator === "completed" && !(candidate?.cost !== null && typeof candidate?.cost === "object") || toolName === REVIEWER_OUTPUT_TOOL_NAME && candidate?.version !== 2;
16949
- if (runtimeBindingMissing || !collectorDiscriminator && !evidenceChildDiscriminator && (typeof discriminator !== "string" || !lawfulStatuses[toolName].includes(baseDiscriminator))) {
16893
+ if (runtimeBindingMissing || !collectorDiscriminator && (typeof discriminator !== "string" || !lawfulStatuses[toolName].includes(baseDiscriminator))) {
16950
16894
  throw new AcceptedDetailsContractError("terminating receipt has no recognized execution discriminator");
16951
16895
  }
16952
16896
  try {
@@ -16979,8 +16923,6 @@ function validateAcceptedDetails(toolName, details) {
16979
16923
  return validateRecordedNavigatorOutput(details);
16980
16924
  case AUDITOR_OUTPUT_TOOL_NAME:
16981
16925
  return validateRecordedAuditorOutput(details);
16982
- case EVIDENCE_CHILD_OUTPUT_TOOL_NAME:
16983
- return validateRecordedEvidenceChildOutput(details);
16984
16926
  case DIARIST_OUTPUT_TOOL_NAME:
16985
16927
  return validateRecordedDiaristOutput(details);
16986
16928
  }
@@ -17002,8 +16944,6 @@ function acceptedFacts(toolName, details) {
17002
16944
  case NAVIGATOR_OUTPUT_TOOL_NAME:
17003
16945
  case AUDITOR_OUTPUT_TOOL_NAME:
17004
16946
  return { status: details.status };
17005
- case EVIDENCE_CHILD_OUTPUT_TOOL_NAME:
17006
- return { status: "report" };
17007
16947
  case DIARIST_OUTPUT_TOOL_NAME:
17008
16948
  return { status: details.status };
17009
16949
  case JUDGE_OUTPUT_TOOL_NAME:
@@ -17032,7 +16972,6 @@ var init_terminating_tools = __esm({
17032
16972
  init_gatekeeper_output();
17033
16973
  init_navigator_output();
17034
16974
  init_auditor_output();
17035
- init_evidence_child_output();
17036
16975
  init_merger_contracts();
17037
16976
  init_notary_contracts();
17038
16977
  init_countersign_contracts();
@@ -17055,7 +16994,6 @@ var init_terminating_tools = __esm({
17055
16994
  GATEKEEPER_OUTPUT_TOOL_NAME,
17056
16995
  NAVIGATOR_OUTPUT_TOOL_NAME,
17057
16996
  AUDITOR_OUTPUT_TOOL_NAME,
17058
- EVIDENCE_CHILD_OUTPUT_TOOL_NAME,
17059
16997
  DIARIST_OUTPUT_TOOL_NAME
17060
16998
  ];
17061
16999
  AcceptedDetailsContractError = class extends CorrectableSubmissionError {
@@ -17553,7 +17491,7 @@ async function readRoleRunStateDisk(runDirectory) {
17553
17491
  if (typeof record4.runId !== "string" || record4.runId.trim() === "") {
17554
17492
  return void 0;
17555
17493
  }
17556
- if (record4.role !== "judge" && record4.role !== "coder" && record4.role !== "fixer" && record4.role !== "collector" && record4.role !== "doctor" && record4.role !== "reviewer" && record4.role !== "merger" && record4.role !== "notary" && record4.role !== "countersign" && record4.role !== "gleaner-left" && record4.role !== "inspector" && record4.role !== "gatekeeper" && record4.role !== "navigator" && record4.role !== "auditor" && record4.role !== "evidence-child" && record4.role !== "diarist") {
17494
+ if (record4.role !== "judge" && record4.role !== "coder" && record4.role !== "fixer" && record4.role !== "collector" && record4.role !== "doctor" && record4.role !== "reviewer" && record4.role !== "merger" && record4.role !== "notary" && record4.role !== "countersign" && record4.role !== "gleaner-left" && record4.role !== "inspector" && record4.role !== "gatekeeper" && record4.role !== "navigator" && record4.role !== "auditor" && record4.role !== "diarist") {
17557
17495
  return void 0;
17558
17496
  }
17559
17497
  if (record4.state !== "admitted" && record4.state !== "running" && record4.state !== "resumable" && record4.state !== "terminal") {
@@ -18372,7 +18310,7 @@ async function loadResumableCountersignRun(home, runId, authority) {
18372
18310
  }
18373
18311
  async function loadResumableInstructionSeatRun(home, runId, authority) {
18374
18312
  const loaded = await loadResumableRunRecord(home, runId, authority);
18375
- if (loaded.run.role !== "gatekeeper" && loaded.run.role !== "navigator" && loaded.run.role !== "auditor" && loaded.run.role !== "evidence-child") {
18313
+ if (loaded.run.role !== "gatekeeper" && loaded.run.role !== "navigator" && loaded.run.role !== "auditor") {
18376
18314
  throw new CliUsageError(
18377
18315
  `role run ${runId} belongs to ${loaded.run.role}, not an instruction seat`
18378
18316
  );
@@ -18964,7 +18902,7 @@ function renderHumanOwnerOptionLines(owner, locale2 = "en") {
18964
18902
  }
18965
18903
  return lines;
18966
18904
  }
18967
- var ANALYST_REQUIRE_ANY_OF, ANALYST_DEFAULT_MODE, REJECTED_PUBLIC_SPELLINGS, GLOBAL_OPTIONS, SHARED_PROJECT_SEMANTICS, SHARED_ATTACH_SEMANTICS, JUDGE_OPTIONS, GLEANER_LEFT_OPTIONS, INSPECTOR_OPTIONS, GATEKEEPER_OPTIONS, NAVIGATOR_OPTIONS, AUDITOR_OPTIONS, EVIDENCE_CHILD_OPTIONS, COUNTERSIGN_OPTIONS, DIARIST_OPTIONS, CODER_OPTIONS, FIXER_OPTIONS, REVIEWER_OPTIONS, COLLECTOR_OPTIONS, DOCTOR_OPTIONS, NOTARY_OPTIONS, MERGER_OPTIONS, ANALYST_OPTIONS, PUBLIC_OPTION_TABLE, PUBLIC_NAVIGATOR_HELP_NOTE, TOP_LEVEL_HELP, ROLE_COMMAND_HELP, SUPPORT_COMMAND_HELP, PUBLIC_COMMAND_HELP;
18905
+ var ANALYST_REQUIRE_ANY_OF, ANALYST_DEFAULT_MODE, REJECTED_PUBLIC_SPELLINGS, GLOBAL_OPTIONS, SHARED_PROJECT_SEMANTICS, SHARED_ATTACH_SEMANTICS, JUDGE_OPTIONS, GLEANER_LEFT_OPTIONS, INSPECTOR_OPTIONS, GATEKEEPER_OPTIONS, NAVIGATOR_OPTIONS, AUDITOR_OPTIONS, COUNTERSIGN_OPTIONS, DIARIST_OPTIONS, CODER_OPTIONS, FIXER_OPTIONS, REVIEWER_OPTIONS, COLLECTOR_OPTIONS, DOCTOR_OPTIONS, NOTARY_OPTIONS, MERGER_OPTIONS, ANALYST_OPTIONS, PUBLIC_OPTION_TABLE, PUBLIC_NAVIGATOR_HELP_NOTE, TOP_LEVEL_HELP, ROLE_COMMAND_HELP, SUPPORT_COMMAND_HELP, PUBLIC_COMMAND_HELP;
18968
18906
  var init_option_definitions = __esm({
18969
18907
  "src/public-cli/option-definitions.ts"() {
18970
18908
  "use strict";
@@ -19169,10 +19107,6 @@ var init_option_definitions = __esm({
19169
19107
  }
19170
19108
  }
19171
19109
  ];
19172
- EVIDENCE_CHILD_OPTIONS = [
19173
- bindOwner("evidence-child", SHARED_PROJECT_SEMANTICS),
19174
- bindOwner("evidence-child", SHARED_ATTACH_SEMANTICS)
19175
- ];
19176
19110
  COUNTERSIGN_OPTIONS = [
19177
19111
  bindOwner("countersign", SHARED_PROJECT_SEMANTICS),
19178
19112
  bindOwner("countersign", SHARED_ATTACH_SEMANTICS)
@@ -19527,7 +19461,6 @@ var init_option_definitions = __esm({
19527
19461
  gatekeeper: GATEKEEPER_OPTIONS,
19528
19462
  navigator: NAVIGATOR_OPTIONS,
19529
19463
  auditor: AUDITOR_OPTIONS,
19530
- "evidence-child": EVIDENCE_CHILD_OPTIONS,
19531
19464
  diarist: DIARIST_OPTIONS,
19532
19465
  analyst: ANALYST_OPTIONS
19533
19466
  };
@@ -19656,14 +19589,6 @@ var init_option_definitions = __esm({
19656
19589
  'ak-role auditor --subject doctor --source-run 01abc\u2026@doctor "\u5BA1\uFF1A\u592A\u533B\u5019\u9009\u662F\u5426\u5408\u89C4\u3002"'
19657
19590
  ]
19658
19591
  },
19659
- "evidence-child": {
19660
- command: "evidence-child",
19661
- summary: "Direct evidence-child fact gathering; submit one report.",
19662
- usage: ["ak-role evidence-child [options] [instruction]"],
19663
- examples: [
19664
- 'ak-role evidence-child "\u67E5\uFF1A\u672C\u5DE5\u4F5C\u6811 diff \u4E0E\u7968\u9762\u662F\u5426\u4E00\u81F4\u3002"'
19665
- ]
19666
- },
19667
19592
  diarist: {
19668
19593
  command: "diarist",
19669
19594
  summary: "Direct Diarist (\u8D77\u5C45\u90CE) pass: gather and organize this case's decision basis into its \u8D77\u5C45\u5F55.",
@@ -20082,9 +20007,6 @@ function parseNavigatorArgv(args) {
20082
20007
  function parseAuditorArgv(args) {
20083
20008
  return parseInstructionArgv(args, "auditor");
20084
20009
  }
20085
- function parseEvidenceChildArgv(args) {
20086
- return parseInstructionArgv(args, "evidence-child");
20087
- }
20088
20010
  function parseDiaristArgv(args) {
20089
20011
  return parseInstructionArgv(args, "diarist");
20090
20012
  }
@@ -20310,9 +20232,6 @@ async function admitNavigatorInvocation(options) {
20310
20232
  async function admitAuditorInvocation(options) {
20311
20233
  return admitStandardMaterialInvocation("auditor", options);
20312
20234
  }
20313
- async function admitEvidenceChildInvocation(options) {
20314
- return admitStandardMaterialInvocation("evidence-child", options);
20315
- }
20316
20235
  async function admitDiaristInvocation(options) {
20317
20236
  return admitStandardMaterialInvocation("diarist", options);
20318
20237
  }
@@ -21914,11 +21833,11 @@ function resolvePackagedMethodSkillRoot(packageRoot2, name) {
21914
21833
  function resolvePackagedMethodSkillPath(packageRoot2, name) {
21915
21834
  return join15(resolvePackagedMethodSkillRoot(packageRoot2, name), "SKILL.md");
21916
21835
  }
21917
- function isRecord10(value) {
21836
+ function isRecord9(value) {
21918
21837
  return typeof value === "object" && value !== null && !Array.isArray(value);
21919
21838
  }
21920
21839
  function parseProvenance(raw, expectedName) {
21921
- if (!isRecord10(raw)) {
21840
+ if (!isRecord9(raw)) {
21922
21841
  throw new Error(`Packaged method provenance must be an object for ${expectedName}`);
21923
21842
  }
21924
21843
  if (raw.name !== expectedName) {
@@ -21932,7 +21851,7 @@ function parseProvenance(raw, expectedName) {
21932
21851
  if (typeof raw.packageAdaptation !== "string" || raw.packageAdaptation.trim() === "") {
21933
21852
  throw new Error(`Packaged method provenance packageAdaptation must be nonblank`);
21934
21853
  }
21935
- if (!isRecord10(raw.upstream)) {
21854
+ if (!isRecord9(raw.upstream)) {
21936
21855
  throw new Error(`Packaged method provenance upstream must be an object`);
21937
21856
  }
21938
21857
  const upstream = raw.upstream;
@@ -21959,12 +21878,12 @@ function parseProvenance(raw, expectedName) {
21959
21878
  `Packaged method provenance upstream must include nonblank tag or version`
21960
21879
  );
21961
21880
  }
21962
- if (!isRecord10(raw.files)) {
21881
+ if (!isRecord9(raw.files)) {
21963
21882
  throw new Error(`Packaged method provenance files must be an object`);
21964
21883
  }
21965
21884
  const files = {};
21966
21885
  for (const [rel, entry] of Object.entries(raw.files)) {
21967
- if (!isRecord10(entry)) {
21886
+ if (!isRecord9(entry)) {
21968
21887
  throw new Error(`Packaged method provenance file entry must be an object: ${rel}`);
21969
21888
  }
21970
21889
  if (typeof entry.sha256 !== "string" || !SHA256_RE.test(entry.sha256)) {
@@ -22123,7 +22042,7 @@ var init_method_skill = __esm({
22123
22042
 
22124
22043
  // src/collector-github.ts
22125
22044
  import { spawn as spawn3 } from "node:child_process";
22126
- function isRecord11(value) {
22045
+ function isRecord10(value) {
22127
22046
  return typeof value === "object" && value !== null && !Array.isArray(value);
22128
22047
  }
22129
22048
  function requireString(value, label) {
@@ -22164,25 +22083,25 @@ function commentFailureCause(error) {
22164
22083
  };
22165
22084
  }
22166
22085
  function requireUserLogin(raw) {
22167
- if (!isRecord11(raw) || typeof raw["login"] !== "string") {
22086
+ if (!isRecord10(raw) || typeof raw["login"] !== "string") {
22168
22087
  throw new Error("GitHub payload missing user.login");
22169
22088
  }
22170
22089
  return raw["login"];
22171
22090
  }
22172
22091
  function optionalUserLogin(raw) {
22173
22092
  if (raw === null) return null;
22174
- if (!isRecord11(raw) || typeof raw["login"] !== "string") {
22093
+ if (!isRecord10(raw) || typeof raw["login"] !== "string") {
22175
22094
  throw new Error("GitHub payload missing user.login");
22176
22095
  }
22177
22096
  return raw["login"];
22178
22097
  }
22179
22098
  function machineIdentity(raw) {
22180
22099
  const user = raw["user"];
22181
- if (!isRecord11(user) || typeof user["type"] !== "string" || typeof user["id"] !== "number") {
22100
+ if (!isRecord10(user) || typeof user["type"] !== "string" || typeof user["id"] !== "number") {
22182
22101
  return null;
22183
22102
  }
22184
22103
  const app = raw["performed_via_github_app"];
22185
- const appId = isRecord11(app) && typeof app["id"] === "number" ? app["id"] : void 0;
22104
+ const appId = isRecord10(app) && typeof app["id"] === "number" ? app["id"] : void 0;
22186
22105
  return {
22187
22106
  userType: user["type"],
22188
22107
  userId: user["id"],
@@ -22190,9 +22109,9 @@ function machineIdentity(raw) {
22190
22109
  };
22191
22110
  }
22192
22111
  function normalizePullRequest(raw) {
22193
- if (!isRecord11(raw)) throw new Error("GitHub pull request payload must be an object");
22112
+ if (!isRecord10(raw)) throw new Error("GitHub pull request payload must be an object");
22194
22113
  const head = raw["head"];
22195
- if (!isRecord11(head) || typeof head["sha"] !== "string" || head["sha"].length === 0) {
22114
+ if (!isRecord10(head) || typeof head["sha"] !== "string" || head["sha"].length === 0) {
22196
22115
  throw new Error("GitHub pull request payload missing head.sha");
22197
22116
  }
22198
22117
  const number = requireNumber(raw["number"], "number");
@@ -22208,7 +22127,7 @@ function normalizePullRequest(raw) {
22208
22127
  };
22209
22128
  }
22210
22129
  function normalizePullRequestReaction(raw) {
22211
- if (!isRecord11(raw)) throw new Error("GitHub reaction payload must be an object");
22130
+ if (!isRecord10(raw)) throw new Error("GitHub reaction payload must be an object");
22212
22131
  return {
22213
22132
  id: requireNumber(raw["id"], "reaction.id"),
22214
22133
  userLogin: optionalUserLogin(raw["user"]),
@@ -22219,7 +22138,7 @@ function normalizePullRequestReaction(raw) {
22219
22138
  };
22220
22139
  }
22221
22140
  function normalizeReview(raw) {
22222
- if (!isRecord11(raw)) throw new Error("GitHub review payload must be an object");
22141
+ if (!isRecord10(raw)) throw new Error("GitHub review payload must be an object");
22223
22142
  return {
22224
22143
  id: requireNumber(raw["id"], "review.id"),
22225
22144
  ...typeof raw["node_id"] === "string" ? { nodeId: raw["node_id"] } : {},
@@ -22234,7 +22153,7 @@ function normalizeReview(raw) {
22234
22153
  };
22235
22154
  }
22236
22155
  function normalizeIssueComment(raw) {
22237
- if (!isRecord11(raw)) throw new Error("GitHub issue comment payload must be an object");
22156
+ if (!isRecord10(raw)) throw new Error("GitHub issue comment payload must be an object");
22238
22157
  return {
22239
22158
  id: requireNumber(raw["id"], "comment.id"),
22240
22159
  userLogin: optionalUserLogin(raw["user"]),
@@ -22247,7 +22166,7 @@ function normalizeIssueComment(raw) {
22247
22166
  };
22248
22167
  }
22249
22168
  function normalizeReviewComment(raw) {
22250
- if (!isRecord11(raw)) throw new Error("GitHub review comment payload must be an object");
22169
+ if (!isRecord10(raw)) throw new Error("GitHub review comment payload must be an object");
22251
22170
  return {
22252
22171
  id: requireNumber(raw["id"], "review_comment.id"),
22253
22172
  pullRequestReviewId: typeof raw["pull_request_review_id"] === "number" ? raw["pull_request_review_id"] : null,
@@ -22556,11 +22475,11 @@ function createGhCollectorGitHubTransport(runner = createGhApiRunner()) {
22556
22475
  if (input.signal?.aborted) {
22557
22476
  throw error;
22558
22477
  }
22559
- if (isRecord11(error) && error["ambiguousGhFailure"] === true) {
22478
+ if (isRecord10(error) && error["ambiguousGhFailure"] === true) {
22560
22479
  const cause = commentFailureCause(error);
22561
22480
  return { kind: "ambiguous_loss", diagnostics: cause.message, cause };
22562
22481
  }
22563
- if (isRecord11(error) && error["name"] === "AbortError") {
22482
+ if (isRecord10(error) && error["name"] === "AbortError") {
22564
22483
  throw error;
22565
22484
  }
22566
22485
  throw error;
@@ -22848,12 +22767,12 @@ function encodeClaudeProjectDir(cwd) {
22848
22767
  const abs = cwd.startsWith("/") ? cwd : `/${cwd}`;
22849
22768
  return abs.replace(/\//g, "-");
22850
22769
  }
22851
- function isRecord12(value) {
22770
+ function isRecord11(value) {
22852
22771
  return typeof value === "object" && value !== null && !Array.isArray(value);
22853
22772
  }
22854
22773
  function messageText(message) {
22855
22774
  if (typeof message === "string") return message;
22856
- if (!isRecord12(message)) return "";
22775
+ if (!isRecord11(message)) return "";
22857
22776
  const content = message.content;
22858
22777
  if (typeof content === "string") return content;
22859
22778
  if (!Array.isArray(content)) return "";
@@ -22863,7 +22782,7 @@ function messageText(message) {
22863
22782
  parts.push(part);
22864
22783
  continue;
22865
22784
  }
22866
- if (!isRecord12(part)) continue;
22785
+ if (!isRecord11(part)) continue;
22867
22786
  if (typeof part.text === "string") parts.push(part.text);
22868
22787
  else if (typeof part.content === "string") parts.push(part.content);
22869
22788
  }
@@ -22949,9 +22868,9 @@ function readCcSessionBlocks(options) {
22949
22868
  { cause: error }
22950
22869
  );
22951
22870
  }
22952
- if (!isRecord12(parsed)) continue;
22871
+ if (!isRecord11(parsed)) continue;
22953
22872
  const type = typeof parsed.type === "string" ? parsed.type : "";
22954
- const queuedCommand = type === "attachment" && isRecord12(parsed.attachment) && parsed.attachment.type === "queued_command" && isRecord12(parsed.attachment.origin) && parsed.attachment.origin.kind === "human" && typeof parsed.attachment.prompt === "string" ? parsed.attachment.prompt : void 0;
22873
+ const queuedCommand = type === "attachment" && isRecord11(parsed.attachment) && parsed.attachment.type === "queued_command" && isRecord11(parsed.attachment.origin) && parsed.attachment.origin.kind === "human" && typeof parsed.attachment.prompt === "string" ? parsed.attachment.prompt : void 0;
22955
22874
  if (type !== "user" && type !== "assistant" && queuedCommand === void 0) {
22956
22875
  continue;
22957
22876
  }
@@ -23175,11 +23094,11 @@ var init_reviewer_pinned_git = __esm({
23175
23094
  });
23176
23095
 
23177
23096
  // src/ticket-provenance-contracts.ts
23178
- function isRecord13(value) {
23097
+ function isRecord12(value) {
23179
23098
  return typeof value === "object" && value !== null && !Array.isArray(value);
23180
23099
  }
23181
23100
  function projectTicketProvenanceDiagnostic(value) {
23182
- if (!isRecord13(value)) return void 0;
23101
+ if (!isRecord12(value)) return void 0;
23183
23102
  if (value.recordClass !== TICKET_PROVENANCE_RECORD_CLASS_DIAGNOSTIC) {
23184
23103
  return void 0;
23185
23104
  }
@@ -23201,18 +23120,18 @@ function projectTicketProvenanceDiagnostic(value) {
23201
23120
  };
23202
23121
  }
23203
23122
  function projectTicketProvenanceEntry(value) {
23204
- if (!isRecord13(value)) return void 0;
23123
+ if (!isRecord12(value)) return void 0;
23205
23124
  if (value.recordClass === TICKET_PROVENANCE_RECORD_CLASS_DIAGNOSTIC) {
23206
23125
  return void 0;
23207
23126
  }
23208
- if (!isRecord13(value.basis)) return void 0;
23127
+ if (!isRecord12(value.basis)) return void 0;
23209
23128
  if (typeof value.basis.method !== "string" || !BASIS_METHODS.has(value.basis.method)) {
23210
23129
  return void 0;
23211
23130
  }
23212
23131
  if (typeof value.sourceKind !== "string" || !SOURCE_KINDS.has(value.sourceKind)) {
23213
23132
  return void 0;
23214
23133
  }
23215
- if (!isRecord13(value.sourceRef)) return void 0;
23134
+ if (!isRecord12(value.sourceRef)) return void 0;
23216
23135
  if (typeof value.transcript !== "string" || value.transcript.length === 0) {
23217
23136
  return void 0;
23218
23137
  }
@@ -23820,7 +23739,7 @@ var init_compliance_transport = __esm({
23820
23739
 
23821
23740
  // src/ledger-session-read.ts
23822
23741
  import { readFile as readFile11 } from "node:fs/promises";
23823
- function isRecord14(value) {
23742
+ function isRecord13(value) {
23824
23743
  return typeof value === "object" && value !== null && !Array.isArray(value);
23825
23744
  }
23826
23745
  async function readLedgerSessionJsonl(path) {
@@ -23844,7 +23763,7 @@ async function readLedgerSessionJsonl(path) {
23844
23763
  }
23845
23764
  break;
23846
23765
  }
23847
- if (!isRecord14(row)) {
23766
+ if (!isRecord13(row)) {
23848
23767
  const kind = row === null ? "null" : Array.isArray(row) ? "array" : typeof row;
23849
23768
  throw new LedgerSessionJsonlError(
23850
23769
  `complete non-object JSONL record in ${path} at line ${index + 1}: expected object, got ${kind}`,
@@ -23881,7 +23800,7 @@ function extractSessionModelSequence(rows) {
23881
23800
  if (row.type === "model_change" && typeof row.modelId === "string") {
23882
23801
  push(row.modelId);
23883
23802
  }
23884
- const message = isRecord14(row.message) ? row.message : void 0;
23803
+ const message = isRecord13(row.message) ? row.message : void 0;
23885
23804
  if (message?.role === "assistant" && typeof message.model === "string") {
23886
23805
  push(message.model);
23887
23806
  }
@@ -23897,11 +23816,11 @@ function extractSessionToolIntervals(rows) {
23897
23816
  const openById = /* @__PURE__ */ new Map();
23898
23817
  for (const row of rows) {
23899
23818
  const rowTimestamp = typeof row.timestamp === "string" ? row.timestamp : void 0;
23900
- const message = isRecord14(row.message) ? row.message : void 0;
23819
+ const message = isRecord13(row.message) ? row.message : void 0;
23901
23820
  if (message?.role === "assistant" && Array.isArray(message.content)) {
23902
23821
  const callTimestamp = typeof message.timestamp === "string" && message.timestamp ? message.timestamp : rowTimestamp;
23903
23822
  for (const part of message.content) {
23904
- if (!isRecord14(part) || part.type !== "toolCall") continue;
23823
+ if (!isRecord13(part) || part.type !== "toolCall") continue;
23905
23824
  if (typeof part.id !== "string" || part.id.length === 0) {
23906
23825
  throw new Error("toolCall frame missing string id");
23907
23826
  }
@@ -23914,7 +23833,7 @@ function extractSessionToolIntervals(rows) {
23914
23833
  if (openById.has(part.id)) {
23915
23834
  throw new Error(`duplicate toolCall id ${part.id}`);
23916
23835
  }
23917
- const args = isRecord14(part.arguments) ? part.arguments : void 0;
23836
+ const args = isRecord13(part.arguments) ? part.arguments : void 0;
23918
23837
  const command = part.name === "bash" && args !== void 0 && typeof args.command === "string" ? bashCommandFirstLine(args.command) : void 0;
23919
23838
  const interval = {
23920
23839
  toolCallId: part.id,
@@ -24000,7 +23919,7 @@ var init_ledger_session_read = __esm({
24000
23919
  // src/analyst-gate-cycles-read.ts
24001
23920
  import { readdir as readdir3 } from "node:fs/promises";
24002
23921
  import { join as join19 } from "node:path";
24003
- function isRecord15(value) {
23922
+ function isRecord14(value) {
24004
23923
  return typeof value === "object" && value !== null && !Array.isArray(value);
24005
23924
  }
24006
23925
  function isParentAttemptBindingRow(row) {
@@ -24031,7 +23950,7 @@ function isGateTerminatingToolName(toolName) {
24031
23950
  function acceptedGateReceiptIds(rows) {
24032
23951
  const accepted = /* @__PURE__ */ new Set();
24033
23952
  for (const row of rows) {
24034
- const message = isRecord15(row.message) ? row.message : void 0;
23953
+ const message = isRecord14(row.message) ? row.message : void 0;
24035
23954
  if (message?.role !== "toolResult") continue;
24036
23955
  if (typeof message.toolCallId !== "string" || message.toolCallId.length === 0) continue;
24037
23956
  if (message.isError === false) accepted.add(message.toolCallId);
@@ -24070,7 +23989,7 @@ function nearestAttemptBindingBefore(rows, beforeIndex) {
24070
23989
  for (let i = beforeIndex - 1; i >= 0; i -= 1) {
24071
23990
  const row = rows[i];
24072
23991
  if (!isParentAttemptBindingRow(row)) continue;
24073
- if (!isRecord15(row.data) || !isRecord15(row.data.parent)) continue;
23992
+ if (!isRecord14(row.data) || !isRecord14(row.data.parent)) continue;
24074
23993
  const id = row.data.parent.attemptEntryId;
24075
23994
  const sessionFile = row.data.parent.sessionFile;
24076
23995
  return {
@@ -24085,10 +24004,10 @@ function extractAllAcceptedGateToolCalls(rows) {
24085
24004
  const out = [];
24086
24005
  for (let rowIndex = 0; rowIndex < rows.length; rowIndex += 1) {
24087
24006
  const row = rows[rowIndex];
24088
- const message = isRecord15(row.message) ? row.message : void 0;
24007
+ const message = isRecord14(row.message) ? row.message : void 0;
24089
24008
  if (message?.role !== "assistant" || !Array.isArray(message.content)) continue;
24090
24009
  for (const part of message.content) {
24091
- if (!isRecord15(part) || part.type !== "toolCall") continue;
24010
+ if (!isRecord14(part) || part.type !== "toolCall") continue;
24092
24011
  if (typeof part.id !== "string" || part.id.length === 0) continue;
24093
24012
  if (typeof part.name !== "string" || part.name.length === 0) continue;
24094
24013
  if (!isGateTerminatingToolName(part.name)) continue;
@@ -24096,7 +24015,7 @@ function extractAllAcceptedGateToolCalls(rows) {
24096
24015
  const binding = nearestAttemptBindingBefore(rows, rowIndex);
24097
24016
  out.push({
24098
24017
  toolName: part.name,
24099
- args: isRecord15(part.arguments) ? part.arguments : void 0,
24018
+ args: isRecord14(part.arguments) ? part.arguments : void 0,
24100
24019
  accepted: true,
24101
24020
  rowIndex,
24102
24021
  ...binding
@@ -24236,7 +24155,7 @@ async function resolveOfficerSessionFromPointerFile(pointerPath) {
24236
24155
  { cause: error }
24237
24156
  );
24238
24157
  }
24239
- if (!isRecord15(raw) || raw.kind !== "direct-officer-run-pointer" || raw.version !== 1) {
24158
+ if (!isRecord14(raw) || raw.kind !== "direct-officer-run-pointer" || raw.version !== 1) {
24240
24159
  throw new Error(`direct officer run pointer has unknown shape in ${pointerPath}`);
24241
24160
  }
24242
24161
  const sessionFile = raw.sessionFile;
@@ -24327,14 +24246,14 @@ function isMissingPathError2(error) {
24327
24246
  function errorText2(error) {
24328
24247
  return error instanceof Error ? error.message : String(error);
24329
24248
  }
24330
- function isRecord16(value) {
24249
+ function isRecord15(value) {
24331
24250
  return typeof value === "object" && value !== null && !Array.isArray(value);
24332
24251
  }
24333
24252
  function readUsableTerminalArtifactBody(body) {
24334
24253
  if (body === null) {
24335
24254
  return { ok: false, reason: "terminal artifact JSON value is null" };
24336
24255
  }
24337
- if (!isRecord16(body)) {
24256
+ if (!isRecord15(body)) {
24338
24257
  return {
24339
24258
  ok: false,
24340
24259
  reason: `terminal artifact JSON value is not a typed object (${Array.isArray(body) ? "array" : typeof body})`
@@ -25037,11 +24956,11 @@ var init_navigator_invocation_identity = __esm({
25037
24956
  });
25038
24957
 
25039
24958
  // src/receipt-delivery-policy.ts
25040
- function isRecord17(value) {
24959
+ function isRecord16(value) {
25041
24960
  return typeof value === "object" && value !== null && !Array.isArray(value);
25042
24961
  }
25043
24962
  function parseNoReceiptLifecycleFacts(input) {
25044
- if (!isRecord17(input) || typeof input.terminalToolCalled !== "boolean" || input.deliveryTurns !== RECEIPT_DELIVERY_TURN_LIMIT || input.sessionCompletion !== "settled-without-accepted-receipt" || input.acceptedReceipt !== false || typeof input.runPointer !== "string" || input.runPointer.trim() === "" || typeof input.attemptPointer !== "string" || input.attemptPointer.trim() === "" || !Array.isArray(input.rejectedReceipts) || !input.rejectedReceipts.every((item) => isRecord17(item) && typeof item.reason === "string")) {
24963
+ if (!isRecord16(input) || typeof input.terminalToolCalled !== "boolean" || input.deliveryTurns !== RECEIPT_DELIVERY_TURN_LIMIT || input.sessionCompletion !== "settled-without-accepted-receipt" || input.acceptedReceipt !== false || typeof input.runPointer !== "string" || input.runPointer.trim() === "" || typeof input.attemptPointer !== "string" || input.attemptPointer.trim() === "" || !Array.isArray(input.rejectedReceipts) || !input.rejectedReceipts.every((item) => isRecord16(item) && typeof item.reason === "string")) {
25045
24964
  throw new TypeError("malformed no-receipt lifecycle facts");
25046
24965
  }
25047
24966
  return {
@@ -25607,7 +25526,7 @@ async function readSitianRetainedAuditorProviderStop(sessionFile) {
25607
25526
  const { records: records2 } = await readSitianRecords(recordFile);
25608
25527
  for (let i = records2.length - 1; i >= 0; i -= 1) {
25609
25528
  const payload = records2[i]?.payload;
25610
- if (!isRecord18(payload) || !isRecord18(payload.response)) continue;
25529
+ if (!isRecord17(payload) || !isRecord17(payload.response)) continue;
25611
25530
  if (typeof payload.type === "string") continue;
25612
25531
  const stop = sessionProviderStopFromAssistant(payload.response);
25613
25532
  if (stop !== void 0) return stop;
@@ -25644,7 +25563,7 @@ async function readBoundEvidenceChildKnownFailure(sessionFile) {
25644
25563
  throw sessionReadFailure(error, "failed to read discovered evidence-child session");
25645
25564
  }
25646
25565
  const header = entries.find((entry) => entry.type === "session");
25647
- if (!isRecord18(header) || header.parentSession !== sessionFile) continue;
25566
+ if (!isRecord17(header) || header.parentSession !== sessionFile) continue;
25648
25567
  const stop = extractSessionProviderStop(entries);
25649
25568
  if (stop === void 0) continue;
25650
25569
  const primary = knownFailureFromProviderStop(stop);
@@ -25676,12 +25595,12 @@ async function loadBoundAuditorVolumes(sessionFile) {
25676
25595
  return firstLine === RESUME_ENVELOPE;
25677
25596
  };
25678
25597
  const isResumeEnvelope = (msg) => {
25679
- if (!isRecord18(msg) || msg.role !== "user") return false;
25598
+ if (!isRecord17(msg) || msg.role !== "user") return false;
25680
25599
  const text = typeof msg.text === "string" ? msg.text : typeof msg.content === "string" ? msg.content : void 0;
25681
25600
  if (isResumeEnvelopeBytes(text)) return true;
25682
25601
  const content = msg.content;
25683
25602
  if (Array.isArray(content)) {
25684
- return content.some((p) => isRecord18(p) && (isResumeEnvelopeBytes(p.text) || isResumeEnvelopeBytes(p.content)));
25603
+ return content.some((p) => isRecord17(p) && (isResumeEnvelopeBytes(p.text) || isResumeEnvelopeBytes(p.content)));
25685
25604
  }
25686
25605
  return false;
25687
25606
  };
@@ -25713,7 +25632,7 @@ async function loadBoundAuditorVolumes(sessionFile) {
25713
25632
  throw sessionReadFailure(error, "failed to read discovered auditor session");
25714
25633
  }
25715
25634
  const header = entries.find((entry) => entry.type === "session");
25716
- if (!isRecord18(header)) continue;
25635
+ if (!isRecord17(header)) continue;
25717
25636
  const bindingIndexes = [];
25718
25637
  for (let i = 0; i < entries.length; i += 1) {
25719
25638
  const entry = entries[i];
@@ -25727,7 +25646,7 @@ async function loadBoundAuditorVolumes(sessionFile) {
25727
25646
  end: idx + 1 < bindingIndexes.length ? bindingIndexes[idx + 1] : entries.length
25728
25647
  })) : [{ entry: void 0, start: 0, end: entries.length }];
25729
25648
  for (const { entry: bindingEntry, start, end } of bindingPasses) {
25730
- const bindingParent = bindingEntry !== void 0 && isRecord18(bindingEntry.data) && isRecord18(bindingEntry.data.parent) ? bindingEntry.data.parent : void 0;
25649
+ const bindingParent = bindingEntry !== void 0 && isRecord17(bindingEntry.data) && isRecord17(bindingEntry.data.parent) ? bindingEntry.data.parent : void 0;
25731
25650
  const attemptEntryId = typeof bindingParent?.attemptEntryId === "string" ? bindingParent.attemptEntryId : void 0;
25732
25651
  const attemptEntryIndex = attemptEntryId === void 0 ? -1 : parentEntries.findIndex((entry) => entry.id === attemptEntryId);
25733
25652
  const boundSessionFile = typeof bindingParent?.sessionFile === "string" ? bindingParent.sessionFile : typeof header.parentSession === "string" ? header.parentSession : void 0;
@@ -25754,11 +25673,11 @@ function complianceFailureFromAuditorVolumes(volumes) {
25754
25673
  if (stop === void 0) continue;
25755
25674
  for (let i = entries.length - 1; i >= 0; i -= 1) {
25756
25675
  const entry = entries[i];
25757
- if (entry?.type !== "custom" || entry.customType !== AUDITOR_COMPLIANCE_FAILURE_ENTRY_TYPE || !isRecord18(entry.data)) continue;
25758
- const parent = isRecord18(entry.data.parent) ? entry.data.parent : void 0;
25759
- const failure = isRecord18(entry.data.failure) ? entry.data.failure : void 0;
25676
+ if (entry?.type !== "custom" || entry.customType !== AUDITOR_COMPLIANCE_FAILURE_ENTRY_TYPE || !isRecord17(entry.data)) continue;
25677
+ const parent = isRecord17(entry.data.parent) ? entry.data.parent : void 0;
25678
+ const failure = isRecord17(entry.data.failure) ? entry.data.failure : void 0;
25760
25679
  if (parent?.sessionId !== parentId || parent.sessionFile !== sessionFile || parent.attemptEntryId !== attemptEntryId || failure?.cause !== "provider" && failure?.cause !== "unrecognized") continue;
25761
- const identity = isRecord18(failure.identity) ? failure.identity : void 0;
25680
+ const identity = isRecord17(failure.identity) ? failure.identity : void 0;
25762
25681
  return {
25763
25682
  cause: failure.cause === "provider" ? "provider" : "unrecognized",
25764
25683
  ...identity === void 0 ? {} : { identity: {
@@ -25766,7 +25685,7 @@ function complianceFailureFromAuditorVolumes(volumes) {
25766
25685
  ...typeof identity.code === "string" || typeof identity.code === "number" ? { code: identity.code } : {}
25767
25686
  } },
25768
25687
  ...typeof failure.diagnostic === "string" ? { diagnostic: failure.diagnostic } : {},
25769
- ...isRecord18(failure.details) ? { details: failure.details } : {}
25688
+ ...isRecord17(failure.details) ? { details: failure.details } : {}
25770
25689
  };
25771
25690
  }
25772
25691
  }
@@ -25813,9 +25732,9 @@ function typedFailedTerminatingToolKnownFailure(entries) {
25813
25732
  if (classification.kind !== "infrastructure") continue;
25814
25733
  if (typeof message.toolCallId !== "string" || typeof message.toolName !== "string") continue;
25815
25734
  if (boundRoleToolCallForResult(attemptEntries, i, message, message.toolName) === void 0) continue;
25816
- const textPart = Array.isArray(message.content) ? message.content.find((part) => isRecord18(part) && part.type === "text" && typeof part.text === "string") : void 0;
25817
- const diagnostic = isRecord18(textPart) ? textPart.text : void 0;
25818
- const details = isRecord18(message.details) ? message.details : classification.fact;
25735
+ const textPart = Array.isArray(message.content) ? message.content.find((part) => isRecord17(part) && part.type === "text" && typeof part.text === "string") : void 0;
25736
+ const diagnostic = isRecord17(textPart) ? textPart.text : void 0;
25737
+ const details = isRecord17(message.details) ? message.details : classification.fact;
25819
25738
  return {
25820
25739
  cause: "activation",
25821
25740
  identity: { name: message.toolName, code: message.toolCallId },
@@ -25973,7 +25892,7 @@ function controlledFailureInputFromResolution(resolution) {
25973
25892
  } : {}
25974
25893
  };
25975
25894
  }
25976
- function isRecord18(value) {
25895
+ function isRecord17(value) {
25977
25896
  return typeof value === "object" && value !== null && !Array.isArray(value);
25978
25897
  }
25979
25898
  function safelyRead(object, key) {
@@ -26097,7 +26016,7 @@ function boundRoleToolCallForResult(entries, resultIndex, message, outputToolNam
26097
26016
  const candidateMessage = entries[index]?.message;
26098
26017
  if (candidateMessage?.role === "assistant" && Array.isArray(candidateMessage.content)) {
26099
26018
  for (const part of candidateMessage.content) {
26100
- if (!isRecord18(part) || part.type !== "toolCall" || part.id !== callId) {
26019
+ if (!isRecord17(part) || part.type !== "toolCall" || part.id !== callId) {
26101
26020
  continue;
26102
26021
  }
26103
26022
  if (part.name !== outputToolName) return void 0;
@@ -26169,7 +26088,7 @@ function parseNavigatorAttendanceDetails(details) {
26169
26088
  const advisoryDiagnostic = typeof details.routePlaybookReadFailure === "string" ? { advisoryDiagnostic: details.routePlaybookReadFailure } : {};
26170
26089
  if (disposition === "recommendation") {
26171
26090
  const next = details.next;
26172
- if (!isRecord18(next) || typeof next.role !== "string") {
26091
+ if (!isRecord17(next) || typeof next.role !== "string") {
26173
26092
  return {
26174
26093
  disposition: "unavailable",
26175
26094
  source: "unknown",
@@ -26177,7 +26096,7 @@ function parseNavigatorAttendanceDetails(details) {
26177
26096
  };
26178
26097
  }
26179
26098
  const reason = typeof details.reason === "string" ? details.reason : "";
26180
- const route = Array.isArray(details.route) ? details.route.filter(isRecord18).map((target) => ({
26099
+ const route = Array.isArray(details.route) ? details.route.filter(isRecord17).map((target) => ({
26181
26100
  role: String(target.role),
26182
26101
  phase: navigatorPhaseValue(target.phase)
26183
26102
  })) : void 0;
@@ -26249,7 +26168,7 @@ async function extractGateFactFromSessionDirectory(sessionDirectory, options = {
26249
26168
  }
26250
26169
  async function withOptionalGateProjection(base, sessionDirectory, gateContext = {}) {
26251
26170
  const secondaryEvidence = base.roleOutcome.kind === "failure" ? base.roleOutcome.decisiveFacts.secondaryEvidence : void 0;
26252
- if (isRecord18(secondaryEvidence) && secondaryEvidence.kind === "role_infrastructure_failure" && (secondaryEvidence.stage === "gatekeeper" || secondaryEvidence.stage === "inspector" || secondaryEvidence.stage === "notary")) return base;
26171
+ if (isRecord17(secondaryEvidence) && secondaryEvidence.kind === "role_infrastructure_failure" && (secondaryEvidence.stage === "gatekeeper" || secondaryEvidence.stage === "inspector" || secondaryEvidence.stage === "notary")) return base;
26253
26172
  const gate = await extractGateFactFromSessionDirectory(sessionDirectory, gateContext);
26254
26173
  return gate === void 0 ? base : { ...base, gate };
26255
26174
  }
@@ -26289,7 +26208,7 @@ function extractNavigatorFact(entries) {
26289
26208
  const entry = entries[i];
26290
26209
  if (entry?.type === "custom_message" && entry.customType === "ak-navigator-attendance") {
26291
26210
  const details = entry.message?.details ?? entry.details;
26292
- if (!isRecord18(details)) {
26211
+ if (!isRecord17(details)) {
26293
26212
  return {
26294
26213
  disposition: "unavailable",
26295
26214
  source: "unknown",
@@ -26687,7 +26606,7 @@ async function settleLawfulCollectorTerminalResult(admitted, authority) {
26687
26606
  const residual = boundErroredToolCandidate(entries, index, message, COLLECTOR_WAIT_TOOL);
26688
26607
  if (residual === void 0) continue;
26689
26608
  const candidate = residual.candidate;
26690
- const duration = isRecord18(candidate) ? candidate.durationMs : void 0;
26609
+ const duration = isRecord17(candidate) ? candidate.durationMs : void 0;
26691
26610
  if (Number.isSafeInteger(duration) && duration >= 1 && duration <= 9e5) {
26692
26611
  continue;
26693
26612
  }
@@ -26877,7 +26796,7 @@ async function settleLawfulSeatAcceptedTerminalResult(admitted, authority, spec,
26877
26796
  spec.toolName
26878
26797
  );
26879
26798
  if (residual !== void 0) {
26880
- const details = isRecord18(residual.candidate) ? residual.candidate : { candidate: residual.candidate };
26799
+ const details = isRecord17(residual.candidate) ? residual.candidate : { candidate: residual.candidate };
26881
26800
  return settleFailureTerminalResult(admitted, {
26882
26801
  cause: "output",
26883
26802
  diagnostic: residual.diagnostic,
@@ -26971,15 +26890,6 @@ async function settleLawfulAuditorTerminalResult(admitted, authority, scope) {
26971
26890
  async function trySettleAuditorTerminalResult(admitted, authority, scope) {
26972
26891
  return settleLawfulAuditorTerminalResult(admitted, authority, scope);
26973
26892
  }
26974
- async function settleLawfulEvidenceChildTerminalResult(admitted, authority, scope) {
26975
- return settleLawfulSeatAcceptedTerminalResult(admitted, authority, {
26976
- role: "evidence-child",
26977
- toolName: EVIDENCE_CHILD_OUTPUT_TOOL_NAME
26978
- }, scope);
26979
- }
26980
- async function trySettleEvidenceChildTerminalResult(admitted, authority, scope) {
26981
- return settleLawfulEvidenceChildTerminalResult(admitted, authority, scope);
26982
- }
26983
26893
  async function trySettleCoderTerminalResult(admitted, authority, options = {}) {
26984
26894
  return settleLawfulCoderTerminalResult(admitted, authority, options);
26985
26895
  }
@@ -27188,7 +27098,7 @@ async function settleLawfulMergerTerminalResult(admitted, authority, options) {
27188
27098
  if (message?.role !== "toolResult") continue;
27189
27099
  const residual = boundErroredToolCandidate(entries, index, message, MERGER_OUTPUT_TOOL_NAME);
27190
27100
  if (residual === void 0) continue;
27191
- const attemptId = isRecord18(residual.candidate) ? safelyRead(residual.candidate, "attemptId") : { readable: true, value: void 0 };
27101
+ const attemptId = isRecord17(residual.candidate) ? safelyRead(residual.candidate, "attemptId") : { readable: true, value: void 0 };
27192
27102
  if (!attemptId.readable || attemptId.value !== admitted.runId) continue;
27193
27103
  return {
27194
27104
  roleOutcome: buildResidualIncompleteTerminalOutcome({
@@ -27563,7 +27473,6 @@ var init_settlement = __esm({
27563
27473
  init_gatekeeper_output();
27564
27474
  init_navigator_output();
27565
27475
  init_auditor_output();
27566
- init_evidence_child_output();
27567
27476
  init_method_skill();
27568
27477
  init_navigator_invocation_identity();
27569
27478
  init_receipt_delivery_policy();
@@ -28828,8 +28737,6 @@ function instructionSeatAdapters(options) {
28828
28737
  return trySettleNavigatorTerminalResult(admitted, authority, scope);
28829
28738
  case "auditor":
28830
28739
  return trySettleAuditorTerminalResult(admitted, authority, scope);
28831
- case "evidence-child":
28832
- return trySettleEvidenceChildTerminalResult(admitted, authority, scope);
28833
28740
  }
28834
28741
  },
28835
28742
  // Accepted receipts and failure terminals both present via shared path.
@@ -28858,8 +28765,6 @@ async function admitInstructionSeat(role, options) {
28858
28765
  return admitNavigatorInvocation(options);
28859
28766
  case "auditor":
28860
28767
  return admitAuditorInvocation(options);
28861
- case "evidence-child":
28862
- return admitEvidenceChildInvocation(options);
28863
28768
  }
28864
28769
  }
28865
28770
  async function runPublicInstructionSeatResume(request, env, io) {
@@ -31246,7 +31151,7 @@ function isMissingPathError5(error) {
31246
31151
  function errorText3(error) {
31247
31152
  return error instanceof Error ? error.message : String(error);
31248
31153
  }
31249
- function isRecord19(value) {
31154
+ function isRecord18(value) {
31250
31155
  return typeof value === "object" && value !== null && !Array.isArray(value);
31251
31156
  }
31252
31157
  async function readExistingRunLifecycleState(runDirectory) {
@@ -31254,7 +31159,7 @@ async function readExistingRunLifecycleState(runDirectory) {
31254
31159
  const raw = JSON.parse(
31255
31160
  await readFile18(join31(runDirectory, "run-state.json"), "utf8")
31256
31161
  );
31257
- if (!isRecord19(raw) || typeof raw.state !== "string") return void 0;
31162
+ if (!isRecord18(raw) || typeof raw.state !== "string") return void 0;
31258
31163
  return raw.state;
31259
31164
  } catch {
31260
31165
  return void 0;
@@ -31290,7 +31195,7 @@ async function readInvocationScopeFields(runDirectory) {
31290
31195
  throw error;
31291
31196
  }
31292
31197
  const parsed = JSON.parse(raw);
31293
- if (!isRecord19(parsed)) return void 0;
31198
+ if (!isRecord18(parsed)) return void 0;
31294
31199
  if (typeof parsed.projectRoot !== "string" || parsed.projectRoot.trim() === "") {
31295
31200
  return void 0;
31296
31201
  }
@@ -31318,7 +31223,7 @@ async function resolveSessionFile(runDirectory) {
31318
31223
  try {
31319
31224
  const raw = await readFile18(join31(runDirectory, "invocation.json"), "utf8");
31320
31225
  const parsed = JSON.parse(raw);
31321
- if (isRecord19(parsed) && typeof parsed.sessionFile === "string" && parsed.sessionFile.trim() !== "") {
31226
+ if (isRecord18(parsed) && typeof parsed.sessionFile === "string" && parsed.sessionFile.trim() !== "") {
31322
31227
  return parsed.sessionFile;
31323
31228
  }
31324
31229
  } catch (error) {
@@ -31623,7 +31528,7 @@ var init_analyst_ledger = __esm({
31623
31528
  });
31624
31529
 
31625
31530
  // src/analyst-metric-families/acceptance-success-rework.ts
31626
- function isRecord20(value) {
31531
+ function isRecord19(value) {
31627
31532
  return typeof value === "object" && value !== null && !Array.isArray(value);
31628
31533
  }
31629
31534
  function wallMsFromSpan(span) {
@@ -31632,21 +31537,21 @@ function wallMsFromSpan(span) {
31632
31537
  function findCollectorGroups(body) {
31633
31538
  if (Array.isArray(body.groups)) return body.groups;
31634
31539
  const receipt = body.receipt;
31635
- if (isRecord20(receipt) && Array.isArray(receipt.groups)) return receipt.groups;
31540
+ if (isRecord19(receipt) && Array.isArray(receipt.groups)) return receipt.groups;
31636
31541
  const outcome = body.outcome;
31637
- if (isRecord20(outcome)) {
31542
+ if (isRecord19(outcome)) {
31638
31543
  const facts = outcome.decisiveFacts;
31639
- if (isRecord20(facts) && Array.isArray(facts.groups)) return facts.groups;
31544
+ if (isRecord19(facts) && Array.isArray(facts.groups)) return facts.groups;
31640
31545
  }
31641
31546
  return void 0;
31642
31547
  }
31643
31548
  function extractStatus(body) {
31644
31549
  const outcome = body.outcome;
31645
- if (isRecord20(outcome) && typeof outcome.status === "string" && outcome.status.trim() !== "") {
31550
+ if (isRecord19(outcome) && typeof outcome.status === "string" && outcome.status.trim() !== "") {
31646
31551
  return outcome.status;
31647
31552
  }
31648
31553
  const receipt = body.receipt;
31649
- if (isRecord20(receipt) && typeof receipt.status === "string" && receipt.status.trim() !== "") {
31554
+ if (isRecord19(receipt) && typeof receipt.status === "string" && receipt.status.trim() !== "") {
31650
31555
  return receipt.status;
31651
31556
  }
31652
31557
  if (typeof body.status === "string" && body.status.trim() !== "") {
@@ -32271,21 +32176,21 @@ var init_leg_wall_clock = __esm({
32271
32176
  });
32272
32177
 
32273
32178
  // src/analyst-metric-families/round-timeline.ts
32274
- function isRecord21(value) {
32179
+ function isRecord20(value) {
32275
32180
  return typeof value === "object" && value !== null && !Array.isArray(value);
32276
32181
  }
32277
32182
  function wallMsFromSpan2(startedAt, endedAt) {
32278
32183
  return Date.parse(endedAt) - Date.parse(startedAt);
32279
32184
  }
32280
32185
  function readOutcomeStatus(body) {
32281
- if (!isRecord21(body.outcome)) return void 0;
32186
+ if (!isRecord20(body.outcome)) return void 0;
32282
32187
  const status = body.outcome.status;
32283
32188
  if (typeof status !== "string" || status.trim() === "") return void 0;
32284
32189
  return status;
32285
32190
  }
32286
32191
  function readClassCount(body) {
32287
- if (!isRecord21(body.outcome)) return void 0;
32288
- if (!isRecord21(body.outcome.decisiveFacts)) return void 0;
32192
+ if (!isRecord20(body.outcome)) return void 0;
32193
+ if (!isRecord20(body.outcome.decisiveFacts)) return void 0;
32289
32194
  const classCount = body.outcome.decisiveFacts.classCount;
32290
32195
  if (typeof classCount !== "number" || !Number.isFinite(classCount)) {
32291
32196
  return void 0;
@@ -33925,7 +33830,7 @@ async function runAkRole(argv, env) {
33925
33830
  ...result2.terminal === void 0 ? {} : { terminal: result2.terminal }
33926
33831
  };
33927
33832
  }
33928
- if (parsed.command === "gatekeeper" || parsed.command === "navigator" || parsed.command === "auditor" || parsed.command === "evidence-child") {
33833
+ if (parsed.command === "gatekeeper" || parsed.command === "navigator" || parsed.command === "auditor") {
33929
33834
  const agentDir = resolveAgentDir(env, home);
33930
33835
  const cwd = env.cwd ?? process.cwd();
33931
33836
  const config = await loadAndValidateConfig(home, env.packageRoot);
@@ -34027,7 +33932,6 @@ var init_cli = __esm({
34027
33932
  gatekeeper: { seat: "gatekeeper", run: runPublicInstructionSeatResume },
34028
33933
  navigator: { seat: "navigator", run: runPublicInstructionSeatResume },
34029
33934
  auditor: { seat: "auditor", run: runPublicInstructionSeatResume },
34030
- "evidence-child": { seat: "evidence-child", run: runPublicInstructionSeatResume },
34031
33935
  diarist: { seat: "diarist", run: runPublicDiaristResume }
34032
33936
  };
34033
33937
  PUBLIC_ROLE_ARGV = {
@@ -34045,7 +33949,6 @@ var init_cli = __esm({
34045
33949
  gatekeeper: { parse: parseGatekeeperArgv, options: optionsForOwner("gatekeeper") },
34046
33950
  navigator: { parse: parseNavigatorArgv, options: optionsForOwner("navigator") },
34047
33951
  auditor: { parse: parseAuditorArgv, options: optionsForOwner("auditor") },
34048
- "evidence-child": { parse: parseEvidenceChildArgv, options: optionsForOwner("evidence-child") },
34049
33952
  diarist: { parse: parseDiaristArgv, options: optionsForOwner("diarist") },
34050
33953
  /** Deterministic analysis seat (#336) — argv parse only; no LLM admission. */
34051
33954
  analyst: { parse: parseAnalystArgv, options: optionsForOwner("analyst") }