@gobing-ai/spur 0.4.2 → 0.4.3

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 (133) hide show
  1. package/.claude-plugin/marketplace.json +1 -1
  2. package/config/decisions/maker-liveness.yaml +39 -0
  3. package/config/plugin-scripts.json +0 -4
  4. package/config/rules/README.md +1 -0
  5. package/config/rules/docs/sourced-api-claims.yaml +56 -12
  6. package/config/rules/strict/runtime-boundaries.yaml +7 -0
  7. package/config/script-placement-baseline.json +1 -19
  8. package/config/workflows/feature-lifecycle.yaml +46 -1
  9. package/config/workflows/feature-verification.yaml +11 -0
  10. package/package.json +9 -9
  11. package/plugins/sp/README.md +22 -16
  12. package/plugins/sp/agents/super-reviewer.md +43 -0
  13. package/plugins/sp/bunfig.toml +8 -5
  14. package/plugins/sp/hooks/careful-guard.ts +1 -1
  15. package/plugins/sp/hooks/context-post-tool.ts +7 -427
  16. package/plugins/sp/hooks/context-session-start.ts +5 -213
  17. package/plugins/sp/hooks/context-session-stop.ts +5 -191
  18. package/plugins/sp/hooks/pi/guard-extension.ts +6 -5
  19. package/plugins/sp/hooks/task-write-guard.ts +1 -1
  20. package/plugins/sp/{hooks → lib}/agent-hint.ts +1 -1
  21. package/plugins/sp/lib/context-post-tool.ts +432 -0
  22. package/plugins/sp/lib/context-session-start.ts +214 -0
  23. package/plugins/sp/lib/context-session-stop.ts +196 -0
  24. package/plugins/sp/lib/dogfood-pipeline.ts +265 -0
  25. package/plugins/sp/lib/dogfood-report.ts +278 -0
  26. package/plugins/sp/lib/idea-handoff.generated.mjs +3 -3
  27. package/plugins/sp/lib/inline-run-app.ts +40 -0
  28. package/plugins/sp/lib/inline-run.generated.d.mts +3 -3
  29. package/plugins/sp/lib/inline-run.generated.mjs +1347 -90
  30. package/plugins/sp/lib/plan-projection.generated.d.mts +150 -0
  31. package/plugins/sp/lib/plan-projection.generated.mjs +591 -1
  32. package/plugins/sp/lib/quality-gate.generated.mjs +38 -25
  33. package/plugins/sp/lib/residual-scan.generated.d.mts +7 -1
  34. package/plugins/sp/lib/residual-scan.generated.mjs +71 -6
  35. package/plugins/sp/lib/run-summary-core.ts +34 -370
  36. package/plugins/sp/lib/transcript.ts +37 -228
  37. package/plugins/sp/plugin.json +1 -1
  38. package/plugins/sp/scripts/batch-plan.mjs +586 -0
  39. package/plugins/sp/scripts/batch-preflight.mjs +23 -1
  40. package/plugins/sp/scripts/batch-preflight.ts +35 -295
  41. package/plugins/sp/scripts/daily-summary/daily-summary.mjs +108 -87
  42. package/plugins/sp/scripts/daily-summary/daily-summary.ts +111 -104
  43. package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.mjs +2 -1
  44. package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +7 -265
  45. package/plugins/sp/scripts/dogfood-testing/validate-report.mjs +3 -0
  46. package/plugins/sp/scripts/dogfood-testing/validate-report.ts +6 -272
  47. package/plugins/sp/scripts/feature-verification-steps.mjs +7 -123
  48. package/plugins/sp/scripts/feature-verification-steps.ts +29 -181
  49. package/plugins/sp/scripts/inline-run-dispatch.mjs +27 -26
  50. package/plugins/sp/scripts/inline-run-dispatch.ts +1 -21
  51. package/plugins/sp/scripts/inline-run-setup.mjs +149 -122
  52. package/plugins/sp/scripts/inline-run-setup.ts +1 -21
  53. package/plugins/sp/scripts/quality-gate.mjs +14 -2
  54. package/plugins/sp/scripts/residual-scan.mjs +73 -6
  55. package/plugins/sp/scripts/residual-scan.ts +8 -5
  56. package/plugins/sp/scripts/run-summary.mjs +151 -97
  57. package/plugins/sp/scripts/run-summary.ts +7 -5
  58. package/plugins/sp/scripts/session-timeline.mjs +46 -19
  59. package/plugins/sp/scripts/task-diffstat.mjs +11 -1
  60. package/plugins/sp/scripts/task-diffstat.ts +8 -39
  61. package/plugins/sp/skills/code-implementation/SKILL.md +7 -1
  62. package/plugins/sp/skills/code-verification/references/secu-review.md +2 -1
  63. package/plugins/sp/skills/code-verification/references/verdict-schema.md +4 -0
  64. package/plugins/sp/skills/dogfood-testing/SKILL.md +2 -2
  65. package/plugins/sp/skills/next-feature/SKILL.md +1 -1
  66. package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +1 -1
  67. package/plugins/sp/skills/source-driven-development/SKILL.md +7 -4
  68. package/plugins/sp/skills/spur-cli/references/builder.md +3 -2
  69. package/plugins/sp/skills/spur-cli/references/decision.md +32 -7
  70. package/plugins/sp/skills/spur-cli/references/features.md +46 -5
  71. package/plugins/sp/skills/spur-dev/references/execution-batch-report.md +1 -1
  72. package/plugins/sp/skills/spur-dev/references/execution-batch.md +13 -3
  73. package/plugins/sp/skills/spur-dev/references/execution-worktree-landing.md +22 -0
  74. package/plugins/sp/skills/spur-dev/references/execution-worktree-setup.md +14 -0
  75. package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +29 -12
  76. package/spur.js +80681 -79296
  77. package/web/_astro/{BoardApp.B3GQZvj8.js → BoardApp.5IIl2O-z.js} +1 -1
  78. package/web/_astro/{BoardApp.BT7L2kSb.js → BoardApp.Drnx-KeM.js} +150 -150
  79. package/web/_astro/{TaskDetail.Cxov1_N_.js → TaskDetail.Ci4LNn9S.js} +1 -1
  80. package/web/_astro/{arc.vaT7tPOB.js → arc.j2EVkYVd.js} +1 -1
  81. package/web/_astro/{architectureDiagram-3BPJPVTR.DRMmTjkN.js → architectureDiagram-3BPJPVTR.DZWSFqEG.js} +1 -1
  82. package/web/_astro/{blockDiagram-GPEHLZMM.cla0LO_q.js → blockDiagram-GPEHLZMM.DE6GpXCN.js} +1 -1
  83. package/web/_astro/{c4Diagram-AAUBKEIU.D4YAIBKn.js → c4Diagram-AAUBKEIU.DoVR1G6B.js} +1 -1
  84. package/web/_astro/channel.DmdDxGsq.js +1 -0
  85. package/web/_astro/{chunk-2J33WTMH.BrSJbMRZ.js → chunk-2J33WTMH.Do6-Gbyf.js} +1 -1
  86. package/web/_astro/{chunk-4BX2VUAB.CuLMgKF5.js → chunk-4BX2VUAB.BYV1HGHx.js} +1 -1
  87. package/web/_astro/{chunk-55IACEB6.zkvgu54F.js → chunk-55IACEB6.CvI1zkrc.js} +1 -1
  88. package/web/_astro/{chunk-727SXJPM.DxWkACh8.js → chunk-727SXJPM.DNGSCRlX.js} +1 -1
  89. package/web/_astro/{chunk-AQP2D5EJ.42XrmIlH.js → chunk-AQP2D5EJ.DXhhgT5z.js} +1 -1
  90. package/web/_astro/{chunk-FMBD7UC4.Bao2wMK9.js → chunk-FMBD7UC4.dzkRKP2u.js} +1 -1
  91. package/web/_astro/{chunk-ND2GUHAM.BhydojD1.js → chunk-ND2GUHAM.DujGLeEf.js} +1 -1
  92. package/web/_astro/{chunk-QZHKN3VN.CmZ82g-H.js → chunk-QZHKN3VN.BWtIT3ZU.js} +1 -1
  93. package/web/_astro/{classDiagram-4FO5ZUOK.Blr83Gt_.js → classDiagram-4FO5ZUOK.DyApg0Nn.js} +1 -1
  94. package/web/_astro/{classDiagram-v2-Q7XG4LA2.Blr83Gt_.js → classDiagram-v2-Q7XG4LA2.DyApg0Nn.js} +1 -1
  95. package/web/_astro/{cose-bilkent-S5V4N54A.qmfv0SPn.js → cose-bilkent-S5V4N54A.DJQB-u_l.js} +1 -1
  96. package/web/_astro/{cynefin-OW5HDTMX.BtELhXPR.js → cynefin-OW5HDTMX.bi3D_siV.js} +1 -1
  97. package/web/_astro/{dagre-BM42HDAG.AWmaAvXo.js → dagre-BM42HDAG.C-f7TrRg.js} +1 -1
  98. package/web/_astro/{diagram-2AECGRRQ.DdH34KDi.js → diagram-2AECGRRQ.DrPfjHQB.js} +1 -1
  99. package/web/_astro/{diagram-5GNKFQAL.BmNPix1k.js → diagram-5GNKFQAL.C9S4WUHO.js} +1 -1
  100. package/web/_astro/{diagram-KO2AKTUF.BNQd_Ppo.js → diagram-KO2AKTUF.Dzzye8QH.js} +1 -1
  101. package/web/_astro/{diagram-LMA3HP47.BAPgDi0e.js → diagram-LMA3HP47.DX-LRiof.js} +1 -1
  102. package/web/_astro/{diagram-OG6HWLK6.DZ4zyLdC.js → diagram-OG6HWLK6.Z-kAKwIz.js} +1 -1
  103. package/web/_astro/{erDiagram-TEJ5UH35.Q1TySMmw.js → erDiagram-TEJ5UH35.D6dyClSv.js} +1 -1
  104. package/web/_astro/{flowDiagram-I6XJVG4X.BXhFBicG.js → flowDiagram-I6XJVG4X.Cx3q2cxD.js} +1 -1
  105. package/web/_astro/{ganttDiagram-6RSMTGT7.vHSgcuo2.js → ganttDiagram-6RSMTGT7.DU3gH6CT.js} +1 -1
  106. package/web/_astro/{gitGraphDiagram-PVQCEYII.Bi1f73C7.js → gitGraphDiagram-PVQCEYII.ISmCnJ87.js} +1 -1
  107. package/web/_astro/index.Do2lLdgo.css +1 -0
  108. package/web/_astro/{infoDiagram-5YYISTIA.DPvXZEWm.js → infoDiagram-5YYISTIA.DR6_iNOK.js} +1 -1
  109. package/web/_astro/{ishikawaDiagram-YF4QCWOH.Cz829fsV.js → ishikawaDiagram-YF4QCWOH.D7wY-ZGA.js} +1 -1
  110. package/web/_astro/{journeyDiagram-JHISSGLW.enRnB9Me.js → journeyDiagram-JHISSGLW.DkP9-WK8.js} +1 -1
  111. package/web/_astro/{kanban-definition-UN3LZRKU.DnTNk6d2.js → kanban-definition-UN3LZRKU.wtgY98M2.js} +1 -1
  112. package/web/_astro/{linear.BzGnBwNL.js → linear.CI6djNi7.js} +1 -1
  113. package/web/_astro/{mermaid.core.CSbTpIVz.js → mermaid.core.CuQPxS8b.js} +4 -4
  114. package/web/_astro/{mindmap-definition-RKZ34NQL.DGJDy8zT.js → mindmap-definition-RKZ34NQL.5HNIEG7R.js} +1 -1
  115. package/web/_astro/{pieDiagram-4H26LBE5.HSPdi5_8.js → pieDiagram-4H26LBE5.CchhDFjE.js} +1 -1
  116. package/web/_astro/{quadrantDiagram-W4KKPZXB.6Gv8mz2Y.js → quadrantDiagram-W4KKPZXB.PYXXJPSJ.js} +1 -1
  117. package/web/_astro/{requirementDiagram-4Y6WPE33.CnBCtFwa.js → requirementDiagram-4Y6WPE33.cUQuNAKU.js} +1 -1
  118. package/web/_astro/{sankeyDiagram-5OEKKPKP.5M8VWAu8.js → sankeyDiagram-5OEKKPKP.BO7MnRIA.js} +1 -1
  119. package/web/_astro/{sequenceDiagram-3UESZ5HK.DN41XN-U.js → sequenceDiagram-3UESZ5HK.D9bElyD6.js} +1 -1
  120. package/web/_astro/{stateDiagram-AJRCARHV.ErOO3W8j.js → stateDiagram-AJRCARHV.DhGdRz7I.js} +1 -1
  121. package/web/_astro/{stateDiagram-v2-BHNVJYJU.B_ZHICM-.js → stateDiagram-v2-BHNVJYJU.5GvLeAoL.js} +1 -1
  122. package/web/_astro/{timeline-definition-PNZ67QCA.CWdosr07.js → timeline-definition-PNZ67QCA.LtAT9haM.js} +1 -1
  123. package/web/_astro/{vennDiagram-CIIHVFJN.BHzYjNV5.js → vennDiagram-CIIHVFJN.DRth1yLA.js} +1 -1
  124. package/web/_astro/{wardleyDiagram-YWT4CUSO.h8x4IwPX.js → wardleyDiagram-YWT4CUSO.h9MlZfcr.js} +1 -1
  125. package/web/_astro/{xychartDiagram-2RQKCTM6.RTapW2X8.js → xychartDiagram-2RQKCTM6.DHqy9DYA.js} +1 -1
  126. package/web/index.html +2 -2
  127. package/config/proportional-route-table.ts +0 -155
  128. package/plugins/sp/scripts/daily-summary/logger.ts +0 -28
  129. package/web/_astro/channel.D4nG9YLf.js +0 -1
  130. package/web/_astro/index.BhSwN8yY.css +0 -1
  131. /package/plugins/sp/{hooks → lib}/context-owner.ts +0 -0
  132. /package/plugins/sp/{hooks → lib}/destructive-policy.ts +0 -0
  133. /package/plugins/sp/{hooks → lib}/task-file-policy.ts +0 -0
@@ -17,7 +17,7 @@ var __export = (target, all) => {
17
17
  var __esm = (fn, res) => () => (fn && (res = fn(fn = 0)), res);
18
18
  var __require = /* @__PURE__ */ createRequire(import.meta.url);
19
19
 
20
- // node_modules/.bun/@gobing-ai+ts-utils@0.5.22/node_modules/@gobing-ai/ts-utils/dist/errors.js
20
+ // node_modules/.bun/@gobing-ai+ts-utils@0.5.24/node_modules/@gobing-ai/ts-utils/dist/errors.js
21
21
  var ErrorCode;
22
22
  var init_errors = __esm(() => {
23
23
  ErrorCode = {
@@ -28,7 +28,7 @@ var init_errors = __esm(() => {
28
28
  };
29
29
  });
30
30
 
31
- // node_modules/.bun/@gobing-ai+ts-utils@0.5.22/node_modules/@gobing-ai/ts-utils/dist/api-response.js
31
+ // node_modules/.bun/@gobing-ai+ts-utils@0.5.24/node_modules/@gobing-ai/ts-utils/dist/api-response.js
32
32
  var API_ERROR_CODES, ERROR_CODE_TO_HTTP, CLIENT_SAFE_CODES;
33
33
  var init_api_response = __esm(() => {
34
34
  init_errors();
@@ -51,18 +51,18 @@ var init_api_response = __esm(() => {
51
51
  CLIENT_SAFE_CODES = new Set([ErrorCode.NotFound, ErrorCode.Validation, ErrorCode.Conflict]);
52
52
  });
53
53
 
54
- // node_modules/.bun/@gobing-ai+ts-utils@0.5.22/node_modules/@gobing-ai/ts-utils/dist/cursor.js
54
+ // node_modules/.bun/@gobing-ai+ts-utils@0.5.24/node_modules/@gobing-ai/ts-utils/dist/cursor.js
55
55
  var init_cursor = () => {};
56
56
 
57
- // node_modules/.bun/@gobing-ai+ts-utils@0.5.22/node_modules/@gobing-ai/ts-utils/dist/env.js
57
+ // node_modules/.bun/@gobing-ai+ts-utils@0.5.24/node_modules/@gobing-ai/ts-utils/dist/env.js
58
58
  function getEnvVars() {
59
59
  return process.env;
60
60
  }
61
61
 
62
- // node_modules/.bun/@gobing-ai+ts-utils@0.5.22/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
62
+ // node_modules/.bun/@gobing-ai+ts-utils@0.5.24/node_modules/@gobing-ai/ts-utils/dist/event-severity.js
63
63
  var init_event_severity = () => {};
64
64
 
65
- // node_modules/.bun/@gobing-ai+ts-utils@0.5.22/node_modules/@gobing-ai/ts-utils/dist/index.js
65
+ // node_modules/.bun/@gobing-ai+ts-utils@0.5.24/node_modules/@gobing-ai/ts-utils/dist/index.js
66
66
  var init_dist = __esm(() => {
67
67
  init_api_response();
68
68
  init_cursor();
@@ -23886,7 +23886,7 @@ var init_dist2 = __esm(() => {
23886
23886
  $visitAsync = visit.visitAsync;
23887
23887
  });
23888
23888
 
23889
- // node_modules/.bun/@gobing-ai+ts-db@0.5.22+4e07478ab737d0a0/node_modules/@gobing-ai/ts-db/dist/schema/common.js
23889
+ // node_modules/.bun/@gobing-ai+ts-db@0.5.24+685def093374c416/node_modules/@gobing-ai/ts-db/dist/schema/common.js
23890
23890
  function nowTimestamp() {
23891
23891
  return Date.now();
23892
23892
  }
@@ -23915,7 +23915,7 @@ var init_common3 = __esm(() => {
23915
23915
  appendOnlyColumns = buildAppendOnlyColumns();
23916
23916
  });
23917
23917
 
23918
- // node_modules/.bun/@gobing-ai+ts-db@0.5.22+4e07478ab737d0a0/node_modules/@gobing-ai/ts-db/dist/schema/drizzle-internals.js
23918
+ // node_modules/.bun/@gobing-ai+ts-db@0.5.24+685def093374c416/node_modules/@gobing-ai/ts-db/dist/schema/drizzle-internals.js
23919
23919
  function sqlExpressionToText(value) {
23920
23920
  if (typeof value !== "object" || value === null || !("queryChunks" in value)) {
23921
23921
  return;
@@ -23938,7 +23938,7 @@ function getDrizzleTableName(table3) {
23938
23938
  return String(table3[nameSym]);
23939
23939
  }
23940
23940
 
23941
- // node_modules/.bun/@gobing-ai+ts-db@0.5.22+4e07478ab737d0a0/node_modules/@gobing-ai/ts-db/dist/schema/ddl.js
23941
+ // node_modules/.bun/@gobing-ai+ts-db@0.5.24+685def093374c416/node_modules/@gobing-ai/ts-db/dist/schema/ddl.js
23942
23942
  function quoteIdent(name) {
23943
23943
  return `"${name.replace(/"/g, '""')}"`;
23944
23944
  }
@@ -24310,7 +24310,7 @@ var init_drizzle_zod = __esm(() => {
24310
24310
  };
24311
24311
  });
24312
24312
 
24313
- // node_modules/.bun/@gobing-ai+ts-db@0.5.22+4e07478ab737d0a0/node_modules/@gobing-ai/ts-db/dist/schema/define-table.js
24313
+ // node_modules/.bun/@gobing-ai+ts-db@0.5.24+685def093374c416/node_modules/@gobing-ai/ts-db/dist/schema/define-table.js
24314
24314
  function defineTable(name, columns2) {
24315
24315
  const table3 = sqliteTable(name, columns2);
24316
24316
  let insert2;
@@ -24344,7 +24344,7 @@ var init_define_table = __esm(() => {
24344
24344
  init_ddl();
24345
24345
  });
24346
24346
 
24347
- // node_modules/.bun/@gobing-ai+ts-db@0.5.22+4e07478ab737d0a0/node_modules/@gobing-ai/ts-db/dist/schema/index.js
24347
+ // node_modules/.bun/@gobing-ai+ts-db@0.5.24+685def093374c416/node_modules/@gobing-ai/ts-db/dist/schema/index.js
24348
24348
  var init_schema = __esm(() => {
24349
24349
  init_sqlite_core();
24350
24350
  init_define_table();
@@ -24438,6 +24438,7 @@ function isRfc3339Timestamp(value) {
24438
24438
  var ALL_FINDING_CODES = [
24439
24439
  "L1.markdown-parse",
24440
24440
  "L1.schema-validation",
24441
+ "L1.wbs-collision",
24441
24442
  "L2.missing-required-section",
24442
24443
  "L2.forbidden-section",
24443
24444
  "L2.disallowed-section",
@@ -24465,6 +24466,7 @@ var ALL_FINDING_CODES = [
24465
24466
  "L4.design-placeholder",
24466
24467
  "L4.feature-not-found",
24467
24468
  "L4.feature-terminal",
24469
+ "L4.feature-deprecated",
24468
24470
  "L4.missing-feature-id",
24469
24471
  "L4.parent-not-found",
24470
24472
  "L4.dependency-not-found",
@@ -24914,8 +24916,8 @@ var POST_WATERMARK_TABLES = [
24914
24916
  "history_daily_stats",
24915
24917
  "history_board_source_daily"
24916
24918
  ];
24917
- // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.22+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/schema-sql.js
24918
- var HISTORY_IMPORT_SCHEMA_VERSION = "0.5.22";
24919
+ // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.24+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/schema-sql.js
24920
+ var HISTORY_IMPORT_SCHEMA_VERSION = "0.5.24";
24919
24921
  var HISTORY_IMPORT_SCHEMA_SQL = `
24920
24922
  CREATE TABLE IF NOT EXISTS history_import_checkpoint (
24921
24923
  source TEXT NOT NULL,
@@ -25042,13 +25044,13 @@ CREATE INDEX IF NOT EXISTS idx_history_skill_call_invocation_kind
25042
25044
  ON history_skill_call(invocation_kind);
25043
25045
  `.trim();
25044
25046
 
25045
- // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.22+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/sources.js
25047
+ // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.24+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/sources.js
25046
25048
  init_zod();
25047
25049
 
25048
- // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.22+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/mappers.js
25050
+ // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.24+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/mappers.js
25049
25051
  init_zod();
25050
25052
 
25051
- // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.22+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/hash.js
25053
+ // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.24+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/hash.js
25052
25054
  import { createHash } from "node:crypto";
25053
25055
  function stableJson(value) {
25054
25056
  if (Array.isArray(value)) {
@@ -25067,7 +25069,7 @@ function sha256Text(text) {
25067
25069
  return createHash("sha256").update(text, "utf8").digest("hex");
25068
25070
  }
25069
25071
 
25070
- // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.22+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/capability.js
25072
+ // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.24+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/capability.js
25071
25073
  function matchCapabilityOrigin(origins, source, canonicalName, observable) {
25072
25074
  let candidates = origins.filter((origin2) => origin2.source === source && origin2.skillName === canonicalName);
25073
25075
  if (candidates.length === 0)
@@ -25332,7 +25334,7 @@ function extractNestedExecCommandLiterals(payloadText) {
25332
25334
  return literals;
25333
25335
  }
25334
25336
 
25335
- // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.22+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/redaction.js
25337
+ // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.24+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/redaction.js
25336
25338
  var DEFAULT_REDACTION_RULES = [
25337
25339
  {
25338
25340
  name: "api-key",
@@ -25374,7 +25376,7 @@ function applyRules(value, rules = DEFAULT_REDACTION_RULES) {
25374
25376
  return rules.reduce((current, rule) => current.replace(rule.pattern, rule.replacement), value);
25375
25377
  }
25376
25378
 
25377
- // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.22+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/mappers.js
25379
+ // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.24+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/mappers.js
25378
25380
  var MESSAGE_MAPPER_KEYS = [
25379
25381
  "_codexUsageCarrier",
25380
25382
  "session_id",
@@ -27480,7 +27482,7 @@ var GROK_SCHEMA = passthroughSchema;
27480
27482
  var GEMINI_SCHEMA = passthroughSchema;
27481
27483
  var DSH_SCHEMA = passthroughSchema;
27482
27484
 
27483
- // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.22+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/sources.js
27485
+ // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.24+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/sources.js
27484
27486
  var sourceRecordSchema = exports_external.object({
27485
27487
  source_record_id: exports_external.string().min(1),
27486
27488
  created_at: exports_external.string().min(1),
@@ -27584,10 +27586,10 @@ var SOURCE_DEFINITIONS = {
27584
27586
  openclaw: sourceDefinition("openclaw", "OpenClaw", [".openclaw"], ["*.jsonl"])
27585
27587
  };
27586
27588
 
27587
- // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.22+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/jsonl-importer-dao.js
27589
+ // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.24+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/jsonl-importer-dao.js
27588
27590
  var TYPED_HISTORY_TABLES = ["history_message", "history_tool_call", "history_skill_call"];
27589
27591
  var TYPED_IGNORED_KEYS = new Set(["_meta", "split_index", "source_record_id", "_capabilityConflict"]);
27590
- // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.22+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/tables.js
27592
+ // node_modules/.bun/@gobing-ai+ts-llm-jsonl-importer@0.5.24+f66f1d7f0d37c145/node_modules/@gobing-ai/ts-llm-jsonl-importer/dist/tables.js
27591
27593
  var BOOKKEEPING_HISTORY_TABLES = ["history_import_checkpoint", "history_import_ledger"];
27592
27594
  var IMPORTER_OWNED_TABLES = [
27593
27595
  ...TYPED_HISTORY_TABLES,
@@ -27664,6 +27666,9 @@ var artifactsTable = defineTable("artifacts", {
27664
27666
  ...standardColumns
27665
27667
  });
27666
27668
  var artifacts = artifactsTable.table;
27669
+ // packages/domain/src/dao/database-inspector.ts
27670
+ var encoder = new TextEncoder;
27671
+ var decoder = new TextDecoder;
27667
27672
  // packages/domain/src/schema/phase-runs.ts
27668
27673
  init_schema();
27669
27674
  var phaseRunsTable = defineTable("phase_runs", {
@@ -27701,7 +27706,7 @@ var workflowStatesTable = defineTable("workflow_states", {
27701
27706
  ...standardColumns
27702
27707
  });
27703
27708
  var workflowStates = workflowStatesTable.table;
27704
- // node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.5.22+df32fe902834add3/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/schema-sql.js
27709
+ // node_modules/.bun/@gobing-ai+ts-dual-workflow-engine@0.5.24+df32fe902834add3/node_modules/@gobing-ai/ts-dual-workflow-engine/dist/schema-sql.js
27705
27710
  var WORKFLOW_ENGINE_SCHEMA_SQL = `
27706
27711
  CREATE TABLE IF NOT EXISTS runs (
27707
27712
  id TEXT PRIMARY KEY,
@@ -27800,7 +27805,7 @@ ALTER TABLE runs ADD COLUMN owner_pid INTEGER;
27800
27805
  ALTER TABLE runs ADD COLUMN interrupt_reason TEXT;
27801
27806
  ALTER TABLE runs ADD COLUMN terminal_reason TEXT;
27802
27807
  `.trim();
27803
- // node_modules/.bun/@gobing-ai+ts-rule-engine@0.5.22+df32fe902834add3/node_modules/@gobing-ai/ts-rule-engine/dist/persistence/schema.js
27808
+ // node_modules/.bun/@gobing-ai+ts-rule-engine@0.5.24+df32fe902834add3/node_modules/@gobing-ai/ts-rule-engine/dist/persistence/schema.js
27804
27809
  var RULE_ENGINE_SCHEMA_SQL = `
27805
27810
  CREATE TABLE IF NOT EXISTS rule_runs (
27806
27811
  id TEXT PRIMARY KEY,
@@ -29885,7 +29890,15 @@ function escapeYamlValue(value) {
29885
29890
  // packages/domain/src/planning/schema.ts
29886
29891
  init_zod();
29887
29892
  var TASK_STATUSES = ["backlog", "todo", "wip", "testing", "blocked", "done", "cancelled"];
29888
- var FEATURE_STATUSES = ["backlog", "active", "verifying", "blocked", "done", "cancelled"];
29893
+ var FEATURE_STATUSES = [
29894
+ "backlog",
29895
+ "active",
29896
+ "verifying",
29897
+ "blocked",
29898
+ "done",
29899
+ "cancelled",
29900
+ "deprecated"
29901
+ ];
29889
29902
  var PRIORITIES = ["P0", "P1", "P2", "P3"];
29890
29903
  var PROFILES = [
29891
29904
  "simple",
@@ -2,7 +2,12 @@
2
2
  * GENERATED by scripts/commands/bundle-plugin-lib.ts — do not edit.
3
3
  * Source of truth: packages/app/src/services/residual-scan.ts (task 1003 R5).
4
4
  */
5
- export declare type ResidualCategory = 'review-finding' | 'diff-marker' | 'unchecked-box' | 'staging-residue';
5
+ export declare type ResidualCategory =
6
+ | 'review-finding'
7
+ | 'diff-marker'
8
+ | 'unchecked-box'
9
+ | 'staging-residue'
10
+ | 'review-contract';
6
11
  export declare type ResidualClass = 'blocking' | 'deferrable' | 'advisory' | 'housekeeping';
7
12
  export declare interface ResidualItem {
8
13
  id: string;
@@ -62,6 +67,7 @@ export declare function classify(
62
67
  export declare function scanResiduals(inputs: ResidualScanInputs): ResidualArtifact;
63
68
  export declare function parseDeferralEntries(raw: unknown): Deferral[];
64
69
  export declare function blockingReviewFindings(taskContent: string, deferrals: Deferral[]): ResidualItem[];
70
+ export declare function reviewContractViolations(taskContent: string): Array<{ location: string; text: string }>;
65
71
  export declare function buildReviewGateArtifact(
66
72
  wbs: string,
67
73
  taskContent: string,
@@ -1,6 +1,36 @@
1
1
  // packages/app/src/services/residual-scan.ts
2
2
  import { join } from "node:path";
3
3
  import { createHash } from "node:crypto";
4
+
5
+ // packages/app/src/services/verify-answer-lint.ts
6
+ var CLAIM_MARKERS = [
7
+ /@[a-z0-9._-]+\/[a-z0-9._-]+/i,
8
+ /\bnode_modules\//,
9
+ /\b\d+\.\d+\.\d+\b/,
10
+ /`[A-Za-z_$][\w.$]*\s*\([^`]*\)`/
11
+ ];
12
+ var CITATION_FORMS = [
13
+ /`[^`\s]+:\d+(?:-\d+)?`/,
14
+ /`[^`]+`\s+lines?\s+\d+/i,
15
+ /\b[\w./-]+\.[A-Za-z0-9]+:\d+(?:-\d+)?\b/,
16
+ /https?:\/\/\S+/i
17
+ ];
18
+ function hasClaimMarker(evidence) {
19
+ return CLAIM_MARKERS.some((re) => re.test(evidence));
20
+ }
21
+ function hasCitationForm(evidence) {
22
+ return CITATION_FORMS.some((re) => re.test(evidence));
23
+ }
24
+ var CONFIDENCE_LEVELS = ["HIGH", "MEDIUM", "LOW"];
25
+ function extractAnswerConfidence(text) {
26
+ const matches = [...text.matchAll(/^\s*Confidence:\s*(\S+)\s*$/gim)];
27
+ if (matches.length !== 1)
28
+ return;
29
+ const value = (matches[0]?.[1] ?? "").toUpperCase();
30
+ return CONFIDENCE_LEVELS.includes(value) ? value : undefined;
31
+ }
32
+
33
+ // packages/app/src/services/residual-scan.ts
4
34
  var MARKER_PATTERN = /TODO|FIXME|XXX|HACK/;
5
35
  var PRIORITY_PATTERN = /^P[1-4]/;
6
36
  var RANGE_PRIORITY = /^P[1-4]\s*[\u2013\u2014-]\s*P?[1-4]/;
@@ -27,11 +57,15 @@ function locationOf(locationCell, finding) {
27
57
  const backtick = finding.match(/`([^`]+)`/)?.[1];
28
58
  return backtick === undefined ? "" : normalizeAnchor(backtick);
29
59
  }
30
- function parseReviewFindings(taskContent) {
60
+ function reviewBody(taskContent) {
31
61
  const section = taskContent.split(/^### Review\b/m)[1];
32
- if (section === undefined)
62
+ return section === undefined ? null : section.split(/^### /m)[0] ?? "";
63
+ }
64
+ function parseReviewFindings(taskContent) {
65
+ const section = reviewBody(taskContent);
66
+ if (section === null)
33
67
  return [];
34
- const body = section.split(/^### /m)[0] ?? "";
68
+ const body = section;
35
69
  const out = [];
36
70
  const lines = body.split(`
37
71
  `);
@@ -144,7 +178,8 @@ function scanResiduals(inputs) {
144
178
  "review-finding": true,
145
179
  "diff-marker": base !== null,
146
180
  "unchecked-box": true,
147
- "staging-residue": true
181
+ "staging-residue": true,
182
+ "review-contract": false
148
183
  },
149
184
  items,
150
185
  counts
@@ -165,8 +200,36 @@ function blockingReviewFindings(taskContent, deferrals) {
165
200
  }));
166
201
  return classify(items, [...tableDeferrals, ...deferrals]);
167
202
  }
203
+ function reviewContractViolations(taskContent) {
204
+ const violations = [];
205
+ const body = reviewBody(taskContent);
206
+ if (body !== null && extractAnswerConfidence(body.replace(/\*\*/g, "")) === undefined) {
207
+ violations.push({
208
+ location: "task-file:Review",
209
+ text: "Review report carries no single valid `**Confidence:** HIGH | MEDIUM | LOW` line — " + "state the level the report can defend (HIGH: every requirement row MET, every finding " + "dispositioned, evidence cited; MEDIUM/LOW: name the gap)."
210
+ });
211
+ }
212
+ for (const row of parseReviewFindings(taskContent)) {
213
+ if (hasClaimMarker(row.text) && !hasCitationForm(row.text)) {
214
+ violations.push({
215
+ location: row.location.length > 0 ? row.location : "task-file:Review",
216
+ text: `${row.priority} finding asserts an external API/library/version claim without a ` + "same-cell citation (add a repo `path:line`, an external named-origin form, or a URL " + `to the Finding cell): ${row.text.slice(0, 80)}`
217
+ });
218
+ }
219
+ }
220
+ return violations;
221
+ }
168
222
  function buildReviewGateArtifact(wbs, taskContent, deferrals) {
169
- const items = blockingReviewFindings(taskContent, deferrals);
223
+ const items = [
224
+ ...blockingReviewFindings(taskContent, deferrals),
225
+ ...reviewContractViolations(taskContent).map((v) => ({
226
+ id: makeItemId("review-contract", v.location, v.text),
227
+ category: "review-contract",
228
+ class: "blocking",
229
+ location: v.location,
230
+ text: v.text
231
+ }))
232
+ ];
170
233
  const blocking = items.filter((i) => i.class === "blocking");
171
234
  const counts = { blocking: 0, deferrable: 0, advisory: 0, housekeeping: 0 };
172
235
  for (const item of items)
@@ -178,7 +241,8 @@ function buildReviewGateArtifact(wbs, taskContent, deferrals) {
178
241
  "review-finding": true,
179
242
  "diff-marker": false,
180
243
  "unchecked-box": false,
181
- "staging-residue": false
244
+ "staging-residue": false,
245
+ "review-contract": true
182
246
  },
183
247
  items,
184
248
  counts
@@ -313,6 +377,7 @@ function parseScanArgs(argv, cwd, defaultTmpDir) {
313
377
  export {
314
378
  verdictDisagreementNote,
315
379
  scanResiduals,
380
+ reviewContractViolations,
316
381
  renderReport,
317
382
  recordedVerdictPath,
318
383
  parseScanArgs,