tickmarkr 2.6.2 → 2.6.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 (63) hide show
  1. package/README.md +2 -0
  2. package/dist/cli/commands/approve.d.ts +6 -3
  3. package/dist/cli/commands/approve.js +16 -4
  4. package/dist/cli/commands/doctor.d.ts +6 -2
  5. package/dist/cli/commands/fleet.js +46 -8
  6. package/dist/cli/commands/plan.js +13 -8
  7. package/dist/cli/commands/report.d.ts +2 -1
  8. package/dist/cli/commands/report.js +56 -6
  9. package/dist/cli/commands/status.js +19 -1
  10. package/dist/compile/native.js +7 -0
  11. package/dist/config/config.d.ts +17 -4
  12. package/dist/config/config.js +43 -6
  13. package/dist/config/fleet-overlay.d.ts +13 -3
  14. package/dist/config/fleet-overlay.js +12 -8
  15. package/dist/drivers/herdr.d.ts +12 -0
  16. package/dist/drivers/herdr.js +51 -0
  17. package/dist/drivers/orca.d.ts +9 -1
  18. package/dist/drivers/orca.js +29 -7
  19. package/dist/drivers/types.d.ts +2 -0
  20. package/dist/drivers/types.js +2 -2
  21. package/dist/gates/acceptance.d.ts +7 -0
  22. package/dist/gates/acceptance.js +27 -5
  23. package/dist/gates/baseline.d.ts +20 -1
  24. package/dist/gates/baseline.js +100 -20
  25. package/dist/gates/cache.d.ts +8 -0
  26. package/dist/gates/cache.js +12 -2
  27. package/dist/gates/llm.d.ts +6 -0
  28. package/dist/gates/llm.js +27 -8
  29. package/dist/gates/review.d.ts +6 -1
  30. package/dist/gates/review.js +122 -32
  31. package/dist/gates/run-gates.d.ts +54 -3
  32. package/dist/gates/run-gates.js +331 -45
  33. package/dist/gates/test-manifest.d.ts +42 -0
  34. package/dist/gates/test-manifest.js +69 -10
  35. package/dist/route/router.d.ts +12 -1
  36. package/dist/route/router.js +26 -9
  37. package/dist/run/consult.d.ts +3 -1
  38. package/dist/run/consult.js +4 -2
  39. package/dist/run/daemon.d.ts +2 -1
  40. package/dist/run/daemon.js +342 -77
  41. package/dist/run/interactive-seed.d.ts +4 -0
  42. package/dist/run/interactive-seed.js +35 -9
  43. package/dist/run/journal.d.ts +26 -0
  44. package/dist/run/journal.js +143 -15
  45. package/dist/run/lease.d.ts +13 -0
  46. package/dist/run/lease.js +45 -0
  47. package/dist/run/protocol.d.ts +15 -0
  48. package/dist/run/protocol.js +11 -1
  49. package/dist/run/receipt-resolver.d.ts +22 -0
  50. package/dist/run/receipt-resolver.js +40 -1
  51. package/dist/run/repair-selection.d.ts +11 -1
  52. package/dist/run/repair-selection.js +17 -9
  53. package/dist/run/wall-budget.d.ts +48 -0
  54. package/dist/run/wall-budget.js +280 -0
  55. package/dist/tui/cockpit/run-cockpit.js +2 -2
  56. package/dist/tui/cockpit/run-view.d.ts +2 -1
  57. package/dist/tui/cockpit/run-view.js +13 -9
  58. package/dist/tui/cockpit/setup-cockpit.d.ts +2 -0
  59. package/dist/tui/cockpit/setup-cockpit.js +4 -0
  60. package/package.json +2 -1
  61. package/schema/config.schema.json +8 -1
  62. package/skills/tickmarkr-loop/SKILL.md +7 -1
  63. package/skills/tickmarkr-overseer/scripts/classify-vitest-log.sh +4 -1
@@ -1,5 +1,5 @@
1
1
  import type { CommandReceiptAttribution } from "../run/protocol.js";
2
- import { type Assignment, type BillingChannel, type WorkerAdapter, type WorkerResult } from "../adapters/types.js";
2
+ import { type Assignment, type AuthHealth, type BillingChannel, type WorkerAdapter, type WorkerResult } from "../adapters/types.js";
3
3
  import { type TickmarkrConfig } from "../config/config.js";
4
4
  import { type GateName, type Task } from "../graph/schema.js";
5
5
  import { type Baseline, type GateEvidenceOptions } from "./baseline.js";
@@ -60,18 +60,23 @@ export interface GateContext {
60
60
  baseline: Baseline;
61
61
  channels: BillingChannel[];
62
62
  judgeChannels?: BillingChannel[];
63
+ /** OBS-1186: doctor's cached verdict — the observed identity of the configured judge seat. Absent ⇒ unknown (conservative deny). */
64
+ health?: Record<string, AuthHealth> | null;
63
65
  adapters: WorkerAdapter[];
64
66
  cfg: TickmarkrConfig;
65
67
  via?: GateVia;
66
68
  carriedFindings?: readonly StructuredFinding[];
67
69
  /** Approval reason bound to this attempt; guidance, never criterion or closure authority. */
68
70
  operatorContext?: string;
71
+ /** OBS-1151: this task's earlier parsed judgments, newest first (the journal's, so they survive resume). */
72
+ priorJudgments?: readonly PriorJudgment[];
69
73
  excludeReviewers?: string[];
70
74
  demotedReviewers?: Set<string>;
71
75
  reviewNoVerdicts?: Map<string, string[]>;
72
76
  recheck?: boolean;
73
- /** Explicit worker funding requires fresh red measurements, never a gate waiver. */
74
- cachedRedBypass?: "operator-rerun";
77
+ /** Explicit worker funding requires fresh red measurements, never a gate waiver. OBS-1106: so does
78
+ * a retry that landed nothing on a timeout-class red — its one fresh re-observation. */
79
+ cachedRedBypass?: "operator-rerun" | "timeout-fresh";
75
80
  carriedAuthors?: readonly string[];
76
81
  /** The attempt whose worker last wrote the gated checkout; a dirty-tree refusal stamps it on the
77
82
  * preserve commit and its row. Absent (standalone verify, gate-only restores) preserves as "unknown". */
@@ -92,6 +97,52 @@ export interface GateContext {
92
97
  * a command that already has `--` takes them directly. Every path is quoted — config flows into a shell.
93
98
  */
94
99
  export declare function testCommandForFiles(testCmd: string, files: string[]): string;
100
+ /** OBS-635: a screen costing at least this share of the full suite runs the full suite instead. */
101
+ export declare const SCREEN_PROMOTION_RATIO = 0.75;
102
+ /**
103
+ * The screen's share of the full suite's cost, from the per-file durations the harness measured at
104
+ * baseline capture — never a worker's timing. Undefined (unknown) unless every selected file has a
105
+ * measured duration and the measured total is positive; unknown keeps the conservative screen path.
106
+ */
107
+ export declare function screenCostRatio(baseline: Baseline, selected: readonly string[]): number | undefined;
108
+ /** A retry base no runner invocation parses. evaluateManifestedTest builds its stranded single-fork
109
+ * retry from the base it is handed, and one it cannot parse throws before any spawn — so this base
110
+ * disables that inner recovery: a worker-RPC-stranded re-observation comes back infra (the caller
111
+ * parks it as ambiguous) instead of launching a second execution. */
112
+ export declare const REOBSERVATION_RETRY_BASE = "tickmarkr-reobservation-refuses-stranded-retry";
113
+ /** OBS-1106 residual: ONE isolated re-observation of a timeout-shaped red's attributed failing files on
114
+ * the same checkout, narrowed exactly as a screen is. Never cached and never a verdict: the caller
115
+ * keeps the original red and reads this only to decide whether that red is chargeable. Exactly one
116
+ * execution — the bounded infra/host-starved retries and the stranded single-fork recovery are all
117
+ * refused, so a diagnostic never buys more. */
118
+ export declare function reobserveTestFiles(worktree: string, testCmd: string, baseline: Baseline, files: string[], artifactDir?: string): Promise<GateResult>;
119
+ /** OBS-1151: one parsed judgment as the journal keeps it — the judged commit, the seat, and per criterion
120
+ * its subject key, ruling and cited paths. Never a verdict to reuse: only a subject to compare against. */
121
+ export interface PriorJudgment {
122
+ commit: string;
123
+ judge?: string;
124
+ criteria: ReadonlyArray<{
125
+ id: string;
126
+ key: string;
127
+ met: boolean;
128
+ paths: readonly string[];
129
+ }>;
130
+ }
131
+ /** OBS-1151: a criterion's comparable subject — its canonical text, the task's declared bounds and the
132
+ * operator context. The cited files' blobs are compared separately, over the union of both citations. */
133
+ export declare function judgmentSubjectKey(task: Pick<Task, "files" | "outOfScope">, criterion: string, operatorContext?: string): string;
134
+ export interface JudgeContradiction {
135
+ id: string;
136
+ met: boolean;
137
+ priorMet: boolean;
138
+ priorCommit: string;
139
+ paths: string[];
140
+ }
141
+ /** OBS-1151: the criteria whose fresh ruling reverses the newest prior ruling on the same subject key whose
142
+ * cited paths hold the identical blob at both commits (older comparable priors are still found behind a
143
+ * newer prior on different blobs). A citation-less side or an
144
+ * unreadable blob is unknown, never identical — that criterion's fresh ruling is simply fresh. */
145
+ export declare function judgeContradictions(worktree: string, head: string, fresh: PriorJudgment["criteria"], priors: readonly PriorJudgment[]): Promise<JudgeContradiction[]>;
95
146
  export declare function runGates(task: Task, ctx: GateContext): Promise<{
96
147
  results: GateResult[];
97
148
  commits: string[];