@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.
- package/.claude-plugin/marketplace.json +1 -1
- package/config/decisions/maker-liveness.yaml +39 -0
- package/config/plugin-scripts.json +0 -4
- package/config/rules/README.md +1 -0
- package/config/rules/docs/sourced-api-claims.yaml +56 -12
- package/config/rules/strict/runtime-boundaries.yaml +7 -0
- package/config/script-placement-baseline.json +1 -19
- package/config/workflows/feature-lifecycle.yaml +46 -1
- package/config/workflows/feature-verification.yaml +11 -0
- package/package.json +9 -9
- package/plugins/sp/README.md +22 -16
- package/plugins/sp/agents/super-reviewer.md +43 -0
- package/plugins/sp/bunfig.toml +8 -5
- package/plugins/sp/hooks/careful-guard.ts +1 -1
- package/plugins/sp/hooks/context-post-tool.ts +7 -427
- package/plugins/sp/hooks/context-session-start.ts +5 -213
- package/plugins/sp/hooks/context-session-stop.ts +5 -191
- package/plugins/sp/hooks/pi/guard-extension.ts +6 -5
- package/plugins/sp/hooks/task-write-guard.ts +1 -1
- package/plugins/sp/{hooks → lib}/agent-hint.ts +1 -1
- package/plugins/sp/lib/context-post-tool.ts +432 -0
- package/plugins/sp/lib/context-session-start.ts +214 -0
- package/plugins/sp/lib/context-session-stop.ts +196 -0
- package/plugins/sp/lib/dogfood-pipeline.ts +265 -0
- package/plugins/sp/lib/dogfood-report.ts +278 -0
- package/plugins/sp/lib/idea-handoff.generated.mjs +3 -3
- package/plugins/sp/lib/inline-run-app.ts +40 -0
- package/plugins/sp/lib/inline-run.generated.d.mts +3 -3
- package/plugins/sp/lib/inline-run.generated.mjs +1347 -90
- package/plugins/sp/lib/plan-projection.generated.d.mts +150 -0
- package/plugins/sp/lib/plan-projection.generated.mjs +591 -1
- package/plugins/sp/lib/quality-gate.generated.mjs +38 -25
- package/plugins/sp/lib/residual-scan.generated.d.mts +7 -1
- package/plugins/sp/lib/residual-scan.generated.mjs +71 -6
- package/plugins/sp/lib/run-summary-core.ts +34 -370
- package/plugins/sp/lib/transcript.ts +37 -228
- package/plugins/sp/plugin.json +1 -1
- package/plugins/sp/scripts/batch-plan.mjs +586 -0
- package/plugins/sp/scripts/batch-preflight.mjs +23 -1
- package/plugins/sp/scripts/batch-preflight.ts +35 -295
- package/plugins/sp/scripts/daily-summary/daily-summary.mjs +108 -87
- package/plugins/sp/scripts/daily-summary/daily-summary.ts +111 -104
- package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.mjs +2 -1
- package/plugins/sp/scripts/dogfood-testing/detect-pipeline-driving.ts +7 -265
- package/plugins/sp/scripts/dogfood-testing/validate-report.mjs +3 -0
- package/plugins/sp/scripts/dogfood-testing/validate-report.ts +6 -272
- package/plugins/sp/scripts/feature-verification-steps.mjs +7 -123
- package/plugins/sp/scripts/feature-verification-steps.ts +29 -181
- package/plugins/sp/scripts/inline-run-dispatch.mjs +27 -26
- package/plugins/sp/scripts/inline-run-dispatch.ts +1 -21
- package/plugins/sp/scripts/inline-run-setup.mjs +149 -122
- package/plugins/sp/scripts/inline-run-setup.ts +1 -21
- package/plugins/sp/scripts/quality-gate.mjs +14 -2
- package/plugins/sp/scripts/residual-scan.mjs +73 -6
- package/plugins/sp/scripts/residual-scan.ts +8 -5
- package/plugins/sp/scripts/run-summary.mjs +151 -97
- package/plugins/sp/scripts/run-summary.ts +7 -5
- package/plugins/sp/scripts/session-timeline.mjs +46 -19
- package/plugins/sp/scripts/task-diffstat.mjs +11 -1
- package/plugins/sp/scripts/task-diffstat.ts +8 -39
- package/plugins/sp/skills/code-implementation/SKILL.md +7 -1
- package/plugins/sp/skills/code-verification/references/secu-review.md +2 -1
- package/plugins/sp/skills/code-verification/references/verdict-schema.md +4 -0
- package/plugins/sp/skills/dogfood-testing/SKILL.md +2 -2
- package/plugins/sp/skills/next-feature/SKILL.md +1 -1
- package/plugins/sp/skills/parallel-execution/references/dispatch-surface.md +1 -1
- package/plugins/sp/skills/source-driven-development/SKILL.md +7 -4
- package/plugins/sp/skills/spur-cli/references/builder.md +3 -2
- package/plugins/sp/skills/spur-cli/references/decision.md +32 -7
- package/plugins/sp/skills/spur-cli/references/features.md +46 -5
- package/plugins/sp/skills/spur-dev/references/execution-batch-report.md +1 -1
- package/plugins/sp/skills/spur-dev/references/execution-batch.md +13 -3
- package/plugins/sp/skills/spur-dev/references/execution-worktree-landing.md +22 -0
- package/plugins/sp/skills/spur-dev/references/execution-worktree-setup.md +14 -0
- package/plugins/sp/skills/spur-dev/references/inline-pipeline-driver.md +29 -12
- package/spur.js +80681 -79296
- package/web/_astro/{BoardApp.B3GQZvj8.js → BoardApp.5IIl2O-z.js} +1 -1
- package/web/_astro/{BoardApp.BT7L2kSb.js → BoardApp.Drnx-KeM.js} +150 -150
- package/web/_astro/{TaskDetail.Cxov1_N_.js → TaskDetail.Ci4LNn9S.js} +1 -1
- package/web/_astro/{arc.vaT7tPOB.js → arc.j2EVkYVd.js} +1 -1
- package/web/_astro/{architectureDiagram-3BPJPVTR.DRMmTjkN.js → architectureDiagram-3BPJPVTR.DZWSFqEG.js} +1 -1
- package/web/_astro/{blockDiagram-GPEHLZMM.cla0LO_q.js → blockDiagram-GPEHLZMM.DE6GpXCN.js} +1 -1
- package/web/_astro/{c4Diagram-AAUBKEIU.D4YAIBKn.js → c4Diagram-AAUBKEIU.DoVR1G6B.js} +1 -1
- package/web/_astro/channel.DmdDxGsq.js +1 -0
- package/web/_astro/{chunk-2J33WTMH.BrSJbMRZ.js → chunk-2J33WTMH.Do6-Gbyf.js} +1 -1
- package/web/_astro/{chunk-4BX2VUAB.CuLMgKF5.js → chunk-4BX2VUAB.BYV1HGHx.js} +1 -1
- package/web/_astro/{chunk-55IACEB6.zkvgu54F.js → chunk-55IACEB6.CvI1zkrc.js} +1 -1
- package/web/_astro/{chunk-727SXJPM.DxWkACh8.js → chunk-727SXJPM.DNGSCRlX.js} +1 -1
- package/web/_astro/{chunk-AQP2D5EJ.42XrmIlH.js → chunk-AQP2D5EJ.DXhhgT5z.js} +1 -1
- package/web/_astro/{chunk-FMBD7UC4.Bao2wMK9.js → chunk-FMBD7UC4.dzkRKP2u.js} +1 -1
- package/web/_astro/{chunk-ND2GUHAM.BhydojD1.js → chunk-ND2GUHAM.DujGLeEf.js} +1 -1
- package/web/_astro/{chunk-QZHKN3VN.CmZ82g-H.js → chunk-QZHKN3VN.BWtIT3ZU.js} +1 -1
- package/web/_astro/{classDiagram-4FO5ZUOK.Blr83Gt_.js → classDiagram-4FO5ZUOK.DyApg0Nn.js} +1 -1
- package/web/_astro/{classDiagram-v2-Q7XG4LA2.Blr83Gt_.js → classDiagram-v2-Q7XG4LA2.DyApg0Nn.js} +1 -1
- package/web/_astro/{cose-bilkent-S5V4N54A.qmfv0SPn.js → cose-bilkent-S5V4N54A.DJQB-u_l.js} +1 -1
- package/web/_astro/{cynefin-OW5HDTMX.BtELhXPR.js → cynefin-OW5HDTMX.bi3D_siV.js} +1 -1
- package/web/_astro/{dagre-BM42HDAG.AWmaAvXo.js → dagre-BM42HDAG.C-f7TrRg.js} +1 -1
- package/web/_astro/{diagram-2AECGRRQ.DdH34KDi.js → diagram-2AECGRRQ.DrPfjHQB.js} +1 -1
- package/web/_astro/{diagram-5GNKFQAL.BmNPix1k.js → diagram-5GNKFQAL.C9S4WUHO.js} +1 -1
- package/web/_astro/{diagram-KO2AKTUF.BNQd_Ppo.js → diagram-KO2AKTUF.Dzzye8QH.js} +1 -1
- package/web/_astro/{diagram-LMA3HP47.BAPgDi0e.js → diagram-LMA3HP47.DX-LRiof.js} +1 -1
- package/web/_astro/{diagram-OG6HWLK6.DZ4zyLdC.js → diagram-OG6HWLK6.Z-kAKwIz.js} +1 -1
- package/web/_astro/{erDiagram-TEJ5UH35.Q1TySMmw.js → erDiagram-TEJ5UH35.D6dyClSv.js} +1 -1
- package/web/_astro/{flowDiagram-I6XJVG4X.BXhFBicG.js → flowDiagram-I6XJVG4X.Cx3q2cxD.js} +1 -1
- package/web/_astro/{ganttDiagram-6RSMTGT7.vHSgcuo2.js → ganttDiagram-6RSMTGT7.DU3gH6CT.js} +1 -1
- package/web/_astro/{gitGraphDiagram-PVQCEYII.Bi1f73C7.js → gitGraphDiagram-PVQCEYII.ISmCnJ87.js} +1 -1
- package/web/_astro/index.Do2lLdgo.css +1 -0
- package/web/_astro/{infoDiagram-5YYISTIA.DPvXZEWm.js → infoDiagram-5YYISTIA.DR6_iNOK.js} +1 -1
- package/web/_astro/{ishikawaDiagram-YF4QCWOH.Cz829fsV.js → ishikawaDiagram-YF4QCWOH.D7wY-ZGA.js} +1 -1
- package/web/_astro/{journeyDiagram-JHISSGLW.enRnB9Me.js → journeyDiagram-JHISSGLW.DkP9-WK8.js} +1 -1
- package/web/_astro/{kanban-definition-UN3LZRKU.DnTNk6d2.js → kanban-definition-UN3LZRKU.wtgY98M2.js} +1 -1
- package/web/_astro/{linear.BzGnBwNL.js → linear.CI6djNi7.js} +1 -1
- package/web/_astro/{mermaid.core.CSbTpIVz.js → mermaid.core.CuQPxS8b.js} +4 -4
- package/web/_astro/{mindmap-definition-RKZ34NQL.DGJDy8zT.js → mindmap-definition-RKZ34NQL.5HNIEG7R.js} +1 -1
- package/web/_astro/{pieDiagram-4H26LBE5.HSPdi5_8.js → pieDiagram-4H26LBE5.CchhDFjE.js} +1 -1
- package/web/_astro/{quadrantDiagram-W4KKPZXB.6Gv8mz2Y.js → quadrantDiagram-W4KKPZXB.PYXXJPSJ.js} +1 -1
- package/web/_astro/{requirementDiagram-4Y6WPE33.CnBCtFwa.js → requirementDiagram-4Y6WPE33.cUQuNAKU.js} +1 -1
- package/web/_astro/{sankeyDiagram-5OEKKPKP.5M8VWAu8.js → sankeyDiagram-5OEKKPKP.BO7MnRIA.js} +1 -1
- package/web/_astro/{sequenceDiagram-3UESZ5HK.DN41XN-U.js → sequenceDiagram-3UESZ5HK.D9bElyD6.js} +1 -1
- package/web/_astro/{stateDiagram-AJRCARHV.ErOO3W8j.js → stateDiagram-AJRCARHV.DhGdRz7I.js} +1 -1
- package/web/_astro/{stateDiagram-v2-BHNVJYJU.B_ZHICM-.js → stateDiagram-v2-BHNVJYJU.5GvLeAoL.js} +1 -1
- package/web/_astro/{timeline-definition-PNZ67QCA.CWdosr07.js → timeline-definition-PNZ67QCA.LtAT9haM.js} +1 -1
- package/web/_astro/{vennDiagram-CIIHVFJN.BHzYjNV5.js → vennDiagram-CIIHVFJN.DRth1yLA.js} +1 -1
- package/web/_astro/{wardleyDiagram-YWT4CUSO.h8x4IwPX.js → wardleyDiagram-YWT4CUSO.h9MlZfcr.js} +1 -1
- package/web/_astro/{xychartDiagram-2RQKCTM6.RTapW2X8.js → xychartDiagram-2RQKCTM6.DHqy9DYA.js} +1 -1
- package/web/index.html +2 -2
- package/config/proportional-route-table.ts +0 -155
- package/plugins/sp/scripts/daily-summary/logger.ts +0 -28
- package/web/_astro/channel.D4nG9YLf.js +0 -1
- package/web/_astro/index.BhSwN8yY.css +0 -1
- /package/plugins/sp/{hooks → lib}/context-owner.ts +0 -0
- /package/plugins/sp/{hooks → lib}/destructive-policy.ts +0 -0
- /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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
24918
|
-
var HISTORY_IMPORT_SCHEMA_VERSION = "0.5.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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.
|
|
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 = [
|
|
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 =
|
|
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
|
|
60
|
+
function reviewBody(taskContent) {
|
|
31
61
|
const section = taskContent.split(/^### Review\b/m)[1];
|
|
32
|
-
|
|
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
|
|
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 =
|
|
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,
|