@alecsibilia/luca 14.0.0-alpha.2 → 14.0.0-alpha.21
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/CHANGELOG.md +76 -0
- package/README.md +7 -2
- package/board/client/board-look.ts +31 -1
- package/board/client/board-panel-parts.tsx +150 -0
- package/board/client/board-panel-stages.ts +99 -0
- package/board/client/board-panel-styles.ts +223 -0
- package/board/client/board-panel.tsx +77 -1275
- package/board/client/engine-life.ts +48 -0
- package/board/client/final-review-stack.tsx +144 -0
- package/board/client/heartbeat.tsx +61 -0
- package/board/client/helper-lines.tsx +69 -0
- package/board/client/live-feed.tsx +86 -0
- package/board/client/live-line.ts +73 -0
- package/board/client/model-line.tsx +178 -0
- package/board/client/needs-you-section.tsx +133 -0
- package/board/client/one-line.tsx +193 -0
- package/board/client/repo-wait-banner.tsx +69 -0
- package/board/client/run-footer.tsx +68 -0
- package/board/client/run-header.tsx +189 -0
- package/board/client/run-picker.tsx +98 -0
- package/board/client/status-bar.tsx +131 -0
- package/board/client/step-dots.tsx +127 -0
- package/board/client/stuck-actions.tsx +269 -0
- package/board/client/ticket-card-view.tsx +238 -0
- package/board/client/ticket-detail.tsx +87 -0
- package/board/client/ticket-stack.tsx +119 -0
- package/board/client/ticket-wait.ts +188 -0
- package/board/client/timeline-rows.tsx +41 -14
- package/board/client/usage-line.tsx +51 -0
- package/board/client/wait-line.tsx +39 -0
- package/board/index.client.tsx +1 -1
- package/board/index.server.ts +7 -1
- package/board/package.json +1 -1
- package/board/server/board-panel-state-helpers.ts +67 -0
- package/board/server/board-server-check.ts +294 -0
- package/board/server/board-server-engine.ts +129 -0
- package/board/server/board-server-events.ts +134 -0
- package/board/server/board-server-read.ts +190 -0
- package/board/server/board-server-resume.ts +164 -0
- package/board/server/board-server-start.ts +174 -0
- package/board/server/board-server-store.ts +281 -0
- package/board/server/board-server-types.ts +114 -0
- package/board/server/board-server-util.ts +4 -0
- package/board/server/board-server.ts +52 -943
- package/board/server/board-vocabulary-engine.ts +144 -0
- package/board/server/board-vocabulary-review.ts +115 -0
- package/board/server/board-vocabulary-run.ts +145 -0
- package/board/server/board-vocabulary-shapes.ts +153 -0
- package/board/server/board-vocabulary.ts +20 -375
- package/board/server/current-step-panel-helpers.ts +108 -0
- package/board/server/describe-record.ts +403 -0
- package/board/server/engine-launch.ts +20 -3
- package/board/server/engine-restart-helpers.ts +105 -0
- package/board/server/engine-watch.ts +45 -5
- package/board/server/journal-rebuild-helpers.ts +169 -0
- package/board/server/live-file.ts +130 -0
- package/board/server/luca-version.ts +1 -1
- package/board/server/make-rows.ts +14 -629
- package/board/server/record-texts.ts +350 -0
- package/board/server/reduce-board-agent-start.ts +224 -0
- package/board/server/reduce-board-agents.ts +160 -0
- package/board/server/reduce-board-counters.ts +138 -0
- package/board/server/reduce-board-create.ts +148 -0
- package/board/server/reduce-board-final-review.ts +174 -0
- package/board/server/reduce-board-needs-you.ts +283 -0
- package/board/server/reduce-board-reasons.ts +59 -0
- package/board/server/reduce-board-run.ts +255 -0
- package/board/server/reduce-board-settle.ts +88 -0
- package/board/server/reduce-board-steps.ts +226 -0
- package/board/server/reduce-board-text.ts +139 -0
- package/board/server/reduce-board-ticket-checks.ts +168 -0
- package/board/server/reduce-board-ticket-join.ts +144 -0
- package/board/server/reduce-board-ticket-start.ts +132 -0
- package/board/server/reduce-board-update.ts +117 -0
- package/board/server/reduce-board-usage.ts +247 -0
- package/board/server/reduce-board.ts +100 -1917
- package/board/server/reply-post.ts +407 -0
- package/board/server/run-registry.ts +8 -4
- package/board/server/ticket-stages-panel-helpers.ts +296 -0
- package/board/shared/board-rows.ts +9 -0
- package/board/shared/board-rpc.ts +42 -0
- package/board/shared/board-state-counts.ts +77 -0
- package/board/shared/board-state-live.ts +99 -0
- package/board/shared/board-state-review.ts +59 -0
- package/board/shared/board-state-run.ts +236 -0
- package/board/shared/board-state-ticket.ts +257 -0
- package/board/shared/board-state-usage.ts +107 -0
- package/board/shared/board-state.ts +97 -567
- package/board/shared/reply-actions.ts +207 -0
- package/engine/agents/agent-launcher.ts +27 -4
- package/engine/agents/claude-launcher-helpers.ts +233 -0
- package/engine/agents/claude-launcher.ts +28 -669
- package/engine/agents/claude-messages.ts +212 -0
- package/engine/agents/claude-options.ts +43 -8
- package/engine/agents/common-instructions.ts +138 -0
- package/engine/agents/input-channel.ts +36 -0
- package/engine/agents/launch-paths.ts +29 -0
- package/engine/agents/launch-session.ts +227 -0
- package/engine/agents/learner-instructions.ts +31 -0
- package/engine/agents/open-session.ts +210 -0
- package/engine/agents/prompt-sections.ts +95 -0
- package/engine/agents/rejoin-prompts.ts +135 -0
- package/engine/agents/reviewer-instructions.ts +99 -0
- package/engine/agents/role-instructions.ts +31 -244
- package/engine/agents/role-prompts.ts +39 -109
- package/engine/agents/role-results.ts +106 -7
- package/engine/agents/scripted-launcher.ts +21 -6
- package/engine/agents/session-pool.ts +124 -0
- package/engine/agents/turn-progress.ts +283 -0
- package/engine/agents/writer-instructions.ts +151 -0
- package/engine/cli/computer-adapters-real.ts +15 -3
- package/engine/cli/computer-adapters.ts +2 -0
- package/engine/cli/computer-checks.ts +87 -4
- package/engine/cli/config-reload-text.ts +39 -0
- package/engine/cli/decision-model-setup.ts +70 -0
- package/engine/cli/doctor-command.ts +1 -0
- package/engine/cli/doctor.ts +21 -3
- package/engine/cli/going-runs.ts +192 -36
- package/engine/cli/init-command.ts +1 -0
- package/engine/cli/init.ts +23 -1
- package/engine/cli/live-runs.ts +73 -0
- package/engine/cli/luca-run.ts +42 -7
- package/engine/cli/luca-skills.ts +183 -0
- package/engine/cli/luca.ts +8 -1
- package/engine/cli/models-command.ts +119 -0
- package/engine/cli/read-run.ts +81 -0
- package/engine/cli/run-args.ts +33 -6
- package/engine/cli/run-demo.ts +143 -0
- package/engine/cli/run-end.ts +184 -0
- package/engine/cli/run-modes-helpers.ts +81 -0
- package/engine/cli/run-modes.ts +62 -439
- package/engine/cli/setup.ts +5 -48
- package/engine/cli/unfinished-runs.ts +122 -0
- package/engine/cli/upgrade-command.ts +212 -30
- package/engine/cli/upgrade-finish.ts +149 -0
- package/engine/cli/upgrade.ts +112 -71
- package/engine/config/config-fields.ts +127 -0
- package/engine/config/config-reload.ts +250 -0
- package/engine/config/engine-config-schema.ts +235 -0
- package/engine/config/engine-config.ts +72 -142
- package/engine/config/test-commands.ts +102 -0
- package/engine/core/agent-guards-helpers.ts +84 -0
- package/engine/core/agent-turn.ts +395 -0
- package/engine/core/already-done.ts +44 -1
- package/engine/core/build-action.ts +214 -0
- package/engine/core/build-context.ts +135 -0
- package/engine/core/build-launch.ts +259 -0
- package/engine/core/commit-in.ts +282 -0
- package/engine/core/decide-build-early.ts +108 -0
- package/engine/core/decide-build-ending.ts +145 -0
- package/engine/core/decide-build-helpers.ts +87 -0
- package/engine/core/decide-build-tickets.ts +207 -0
- package/engine/core/decide-build-view.ts +103 -0
- package/engine/core/decide-build.ts +101 -1368
- package/engine/core/decide-final-fix.ts +203 -0
- package/engine/core/decide-final-review.ts +55 -310
- package/engine/core/decide-red-green.ts +398 -0
- package/engine/core/decide-rejoin.ts +259 -0
- package/engine/core/decide-repo-wait.ts +129 -0
- package/engine/core/decide-run-budget.ts +86 -12
- package/engine/core/decide-stuck-helpers.ts +127 -0
- package/engine/core/decide-stuck.ts +60 -8
- package/engine/core/decide-ticket-review.ts +95 -0
- package/engine/core/decide-ticket.ts +267 -0
- package/engine/core/decide-waits.ts +47 -0
- package/engine/core/decide.ts +74 -23
- package/engine/core/engine-chores.ts +163 -0
- package/engine/core/environment-rerun.ts +83 -0
- package/engine/core/evidence-text.ts +84 -0
- package/engine/core/execute-action.ts +303 -0
- package/engine/core/execute-already-done-check.ts +133 -0
- package/engine/core/execute-build.ts +68 -944
- package/engine/core/execute-changeset.ts +5 -7
- package/engine/core/execute-final-review.ts +125 -13
- package/engine/core/execute-gates.ts +182 -0
- package/engine/core/execute-intake.ts +130 -0
- package/engine/core/execute-join.ts +276 -0
- package/engine/core/execute-memory.ts +12 -0
- package/engine/core/execute-pull-request.ts +84 -0
- package/engine/core/execute-red-check.ts +219 -0
- package/engine/core/execute-repo-wait.ts +129 -0
- package/engine/core/execute-stuck.ts +25 -10
- package/engine/core/execute-waits.ts +158 -0
- package/engine/core/execute-with-jev.ts +118 -0
- package/engine/core/execute.ts +124 -831
- package/engine/core/final-failure-cap.ts +38 -0
- package/engine/core/final-review-action.ts +125 -0
- package/engine/core/final-review-text.ts +63 -17
- package/engine/core/final-stuck-text.ts +86 -0
- package/engine/core/fix-loop-text.ts +49 -2
- package/engine/core/left-out.ts +120 -0
- package/engine/core/live-file.ts +372 -0
- package/engine/core/loop-caps.ts +25 -2
- package/engine/core/not-in-run.ts +7 -3
- package/engine/core/pull-request-text.ts +255 -6
- package/engine/core/repo-wait-text.ts +81 -0
- package/engine/core/review-text.ts +55 -1
- package/engine/core/run-crash-recovery-helpers.ts +16 -0
- package/engine/core/run-session-close-helpers.ts +96 -0
- package/engine/core/run-start.ts +148 -0
- package/engine/core/run-stuck-text.ts +86 -0
- package/engine/core/schedule-rules.ts +193 -0
- package/engine/core/stuck-detail-text.ts +89 -0
- package/engine/core/stuck-format.ts +22 -0
- package/engine/core/stuck-text.ts +29 -332
- package/engine/core/ticket-stuck-text.ts +192 -0
- package/engine/core/worktree-changes.ts +106 -0
- package/engine/gates/already-done-check.ts +120 -0
- package/engine/gates/feature-map.ts +96 -0
- package/engine/gates/gate-runner.ts +108 -108
- package/engine/gates/gate-schemas.ts +61 -2
- package/engine/gates/leftover-scan.ts +154 -31
- package/engine/gates/new-tests.ts +45 -0
- package/engine/gates/own-files-check.ts +98 -0
- package/engine/gates/prepare-check.ts +60 -0
- package/engine/gates/prepare-slots.ts +99 -0
- package/engine/gates/red-check.ts +184 -16
- package/engine/gates/shell-check.ts +64 -0
- package/engine/gates/slot-waits.ts +55 -0
- package/engine/gates/slow-test-runner.ts +59 -0
- package/engine/gates/test-checks.ts +161 -0
- package/engine/gates/test-runner.ts +164 -5
- package/engine/gates/test-slots.ts +48 -0
- package/engine/git/git-adapter.ts +55 -396
- package/engine/git/git-commits.ts +132 -0
- package/engine/git/git-join.ts +139 -0
- package/engine/git/git-read.ts +123 -0
- package/engine/git/git-run.ts +32 -0
- package/engine/git/git-worktrees.ts +143 -0
- package/engine/git/outside-links.ts +55 -0
- package/engine/guards/after-turn-check.ts +31 -5
- package/engine/guards/guard-hook.ts +60 -12
- package/engine/guards/guard-roles.ts +68 -0
- package/engine/guards/helper-rules.ts +92 -0
- package/engine/guards/permission-rules.ts +161 -0
- package/engine/guards/role-rules-helpers.ts +48 -0
- package/engine/guards/role-rules.ts +34 -606
- package/engine/guards/shell-rules.ts +344 -0
- package/engine/guards/worktree-git.ts +208 -0
- package/engine/guards/worktree-snapshot.ts +412 -0
- package/engine/guards/worktree-state.ts +28 -825
- package/engine/guards/worktree-undo.ts +260 -0
- package/engine/guards/write-rules.ts +149 -0
- package/engine/index.ts +30 -9
- package/engine/intake/criteria-checks.ts +114 -0
- package/engine/intake/intake-checks.ts +164 -30
- package/engine/intake/intake-schemas.ts +37 -2
- package/engine/jev/clef-client.ts +259 -0
- package/engine/jev/decision-model-credentials.ts +212 -0
- package/engine/jev/jev-jobs.ts +144 -60
- package/engine/jev/jev-schemas.ts +86 -5
- package/engine/jev/jev-shadow-helpers.ts +218 -0
- package/engine/jev/jev-shadow.ts +109 -64
- package/engine/jev/model-pick.ts +275 -0
- package/engine/journal/agent-entries.ts +167 -0
- package/engine/journal/agent-message-entries.ts +72 -0
- package/engine/journal/agent-turn-replay.ts +203 -0
- package/engine/journal/already-done-entries.ts +55 -0
- package/engine/journal/commit-entries.ts +56 -0
- package/engine/journal/cross-ticket-replay.ts +222 -0
- package/engine/journal/decision-model-entries.ts +86 -0
- package/engine/journal/entry-fields.ts +10 -0
- package/engine/journal/final-review-entries.ts +128 -0
- package/engine/journal/final-review-replay.ts +324 -0
- package/engine/journal/final-review-round.ts +320 -0
- package/engine/journal/final-review-state.ts +180 -0
- package/engine/journal/gate-entries.ts +81 -0
- package/engine/journal/intake-entries.ts +87 -0
- package/engine/journal/join-entries.ts +126 -0
- package/engine/journal/journal-entry-schema.ts +218 -0
- package/engine/journal/journal-kinds.ts +97 -0
- package/engine/journal/journal-record-schema.ts +218 -0
- package/engine/journal/journal-record.ts +43 -1400
- package/engine/journal/journal.ts +6 -1
- package/engine/journal/limit-entries.ts +90 -0
- package/engine/journal/memory-entries.ts +124 -0
- package/engine/journal/memory-replay.ts +157 -0
- package/engine/journal/plan-replay.ts +139 -0
- package/engine/journal/pull-request-entries.ts +41 -0
- package/engine/journal/replay.ts +157 -2144
- package/engine/journal/reply-replay.ts +144 -0
- package/engine/journal/repo-wait-entries.ts +53 -0
- package/engine/journal/run-entries.ts +172 -0
- package/engine/journal/run-state.ts +264 -0
- package/engine/journal/shared-failure-replay.ts +133 -0
- package/engine/journal/stuck-entries.ts +193 -0
- package/engine/journal/ticket-progress.ts +392 -0
- package/engine/journal/ticket-replay.ts +411 -0
- package/engine/journal/ticket-result-replay.ts +364 -0
- package/engine/journal/ticket-retry-replay.ts +142 -0
- package/engine/journal/worktree-entries.ts +122 -0
- package/engine/models/model-score.ts +512 -0
- package/engine/shell/run-command.ts +187 -18
- package/engine/testing/agent-turn-fixtures.ts +287 -0
- package/engine/testing/already-done-fixtures.ts +97 -0
- package/engine/testing/build-fixtures.ts +68 -973
- package/engine/testing/checkouts-fixtures.ts +48 -0
- package/engine/testing/final-review-fixtures.ts +62 -1
- package/engine/testing/final-review-steps.ts +143 -0
- package/engine/testing/limit-fixtures.ts +85 -0
- package/engine/testing/live-file-fixtures.ts +57 -0
- package/engine/testing/practice-repo.ts +10 -4
- package/engine/testing/practice-run.ts +1 -1
- package/engine/testing/reply-fixtures.ts +88 -0
- package/engine/testing/run-budget-fixtures.ts +165 -0
- package/engine/testing/run-fixtures.ts +219 -0
- package/engine/testing/sdk-play.ts +177 -0
- package/engine/testing/setup-repo.ts +194 -0
- package/engine/testing/step-record-fixtures.ts +55 -0
- package/engine/testing/ticket-step-fixtures.ts +272 -0
- package/engine/testing/wait-scenarios.ts +186 -0
- package/engine/tracker/gh-retry.ts +217 -0
- package/engine/tracker/github-tracker.ts +310 -90
- package/engine/tracker/in-memory-tracker.ts +8 -4
- package/engine/tracker/tracker.ts +131 -6
- package/package.json +2 -1
- package/skills/luca-retro/SKILL.md +74 -0
- package/skills/luca-retro/scripts/retro-summary.ts +1356 -0
- package/skills/luca-unstick/SKILL.md +153 -0
- package/skills/luca-unstick/scripts/stuck-summary.ts +1063 -0
- package/engine/jev/jev-client.ts +0 -173
|
@@ -0,0 +1,392 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* The shape of one ticket's progress as replay rebuilds it, with its parts
|
|
3
|
+
* (worktree, gates, review fix round, rejoin, test update), and the progress
|
|
4
|
+
* of a ticket nothing has happened to yet.
|
|
5
|
+
*/
|
|
6
|
+
import type {
|
|
7
|
+
AgentFailure,
|
|
8
|
+
CommitStage,
|
|
9
|
+
JournalRecord,
|
|
10
|
+
StuckReason,
|
|
11
|
+
} from './journal-record'
|
|
12
|
+
|
|
13
|
+
import type { RejoinContext } from '../agents/role-prompts'
|
|
14
|
+
import type {
|
|
15
|
+
AgentRole,
|
|
16
|
+
BadTest,
|
|
17
|
+
BadTestSource,
|
|
18
|
+
Finding,
|
|
19
|
+
FindingResponse,
|
|
20
|
+
ImplementerResult,
|
|
21
|
+
TestRef,
|
|
22
|
+
TestWriterResult,
|
|
23
|
+
TicketReviewResult,
|
|
24
|
+
} from '../agents/role-results'
|
|
25
|
+
import type {
|
|
26
|
+
GateCheck,
|
|
27
|
+
LeftoverHit,
|
|
28
|
+
RedCheckResult,
|
|
29
|
+
TestCase,
|
|
30
|
+
TestRun,
|
|
31
|
+
} from '../gates/gate-schemas'
|
|
32
|
+
|
|
33
|
+
/** A worktree the engine made, as journaled. */
|
|
34
|
+
export type ReplayedWorktree = {
|
|
35
|
+
branch: string
|
|
36
|
+
path: string
|
|
37
|
+
base_sha: string
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
/**
|
|
41
|
+
* A ticket sent back to be fixed on top of the run branch (`ticket_rebased`):
|
|
42
|
+
* why, where it starts now, the files that clashed, and the findings known
|
|
43
|
+
* from its reviews. `tests_pending` and `code_pending` stay true until a
|
|
44
|
+
* fresh test-writer (the clashed tests) or the implementer (the clashed
|
|
45
|
+
* code) has answered.
|
|
46
|
+
*/
|
|
47
|
+
export type ReplayedRejoin = RejoinContext & {
|
|
48
|
+
tests_pending: boolean
|
|
49
|
+
code_pending: boolean
|
|
50
|
+
/** Where the ticket started from before this rebase. */
|
|
51
|
+
from_sha: string
|
|
52
|
+
}
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* The open test update after a rebase (`tests_sent_back`, #489): the bad
|
|
56
|
+
* test, what joined the run branch, and the test-writer's answer once it
|
|
57
|
+
* gave one. It closes when the implementer answers after it.
|
|
58
|
+
*/
|
|
59
|
+
export type TestUpdate = TestsSentBackContent & {
|
|
60
|
+
/** The test-writer's answer, `null` until it gave one. */
|
|
61
|
+
result: TestWriterResult | null
|
|
62
|
+
}
|
|
63
|
+
|
|
64
|
+
type TestsSentBackContent = Extract<
|
|
65
|
+
JournalRecord,
|
|
66
|
+
{ kind: 'tests_sent_back' }
|
|
67
|
+
>['content']
|
|
68
|
+
|
|
69
|
+
/**
|
|
70
|
+
* One gate run, as journaled. A ticket's gates also carry the test cases of
|
|
71
|
+
* its red test files, with their `expect()` counts (#581); none in an older
|
|
72
|
+
* journal, or in a join's or the final review's gates.
|
|
73
|
+
*/
|
|
74
|
+
export type ReplayedGates = {
|
|
75
|
+
ok: boolean
|
|
76
|
+
checks: GateCheck[]
|
|
77
|
+
cases?: TestCase[]
|
|
78
|
+
} & SharedFailureFields
|
|
79
|
+
|
|
80
|
+
/**
|
|
81
|
+
* What a ticket's red check or gates carry for shared failures (#544):
|
|
82
|
+
* whether the run was a lone rerun, and whether each old test it failed
|
|
83
|
+
* also failed in another ticket shortly before, so a lone rerun is due.
|
|
84
|
+
*/
|
|
85
|
+
export type SharedFailureFields = {
|
|
86
|
+
/** It was a lone rerun, alone on every test slot. */
|
|
87
|
+
exclusive?: boolean
|
|
88
|
+
/** It failed only on old tests another ticket failed within 10 minutes. */
|
|
89
|
+
shared?: boolean
|
|
90
|
+
}
|
|
91
|
+
|
|
92
|
+
/** The red check's verdict, plus the test run's (clipped) output. */
|
|
93
|
+
export type ReplayedRedCheck = RedCheckResult & {
|
|
94
|
+
output: string
|
|
95
|
+
} & SharedFailureFields
|
|
96
|
+
|
|
97
|
+
/** A check that can get a lone rerun (#544). */
|
|
98
|
+
export type LoneRerunCheck = 'red_check' | 'gates'
|
|
99
|
+
|
|
100
|
+
/** The roles that write: they fix review findings. */
|
|
101
|
+
export type WriterRole = 'test-writer' | 'implementer'
|
|
102
|
+
|
|
103
|
+
/**
|
|
104
|
+
* A writer's `environment` answer to a failed check (#613): who gave it,
|
|
105
|
+
* its evidence, and the failed check it blamed on the environment. The
|
|
106
|
+
* check runs again; a rerun that fails the same way makes it stuck. It
|
|
107
|
+
* stays until the next agent answers.
|
|
108
|
+
*/
|
|
109
|
+
export type EnvironmentRerun = {
|
|
110
|
+
role: 'test-writer' | 'implementer'
|
|
111
|
+
evidence: string
|
|
112
|
+
} & (
|
|
113
|
+
| { check: 'red_check'; failed: ReplayedRedCheck }
|
|
114
|
+
| { check: 'gates'; failed: ReplayedGates }
|
|
115
|
+
)
|
|
116
|
+
|
|
117
|
+
/**
|
|
118
|
+
* The open review fix round: the blockers and should-fixes the latest ticket
|
|
119
|
+
* review sent back, and which fixers have answered. Test findings go to a
|
|
120
|
+
* fresh test-writer first, then code findings to the implementer, then any
|
|
121
|
+
* finding a fixer answered `other_role` to the other writer role.
|
|
122
|
+
*/
|
|
123
|
+
export type ReviewFix = {
|
|
124
|
+
/** 1 after the first review, 2 after the first re-review, ... */
|
|
125
|
+
round: number
|
|
126
|
+
findings: Finding[]
|
|
127
|
+
/** True once the test-writer answered, or when no finding is a test finding. */
|
|
128
|
+
tests_answered: boolean
|
|
129
|
+
/** True once the implementer answered, or when no finding is a code finding. */
|
|
130
|
+
code_answered: boolean
|
|
131
|
+
/**
|
|
132
|
+
* The fixers' answers, oldest first. A handed-off finding's answer from
|
|
133
|
+
* the other role replaces the first one.
|
|
134
|
+
*/
|
|
135
|
+
responses: FindingResponse[]
|
|
136
|
+
/**
|
|
137
|
+
* The findings a fixer answered `other_role` (#616), by the writer role
|
|
138
|
+
* they were handed to. After the round's fixers answered, each role here
|
|
139
|
+
* runs once more, fresh, with only these findings; its answer clears it.
|
|
140
|
+
*/
|
|
141
|
+
handed_off: Partial<Record<WriterRole, string[]>>
|
|
142
|
+
/** A test the implementer sent back as bad while fixing, if any. */
|
|
143
|
+
bad_test: BadTest | null
|
|
144
|
+
}
|
|
145
|
+
|
|
146
|
+
/**
|
|
147
|
+
* A finding a fixer answered "won't fix" and the next reviewer let go: its
|
|
148
|
+
* ruling was `accepted`, or it gave none and did not list the finding again.
|
|
149
|
+
*/
|
|
150
|
+
export type DeclinedFinding = {
|
|
151
|
+
finding: Finding
|
|
152
|
+
/** The fixer's reason. */
|
|
153
|
+
reason: string
|
|
154
|
+
/** The reviewer's reason for accepting it, if it gave one. */
|
|
155
|
+
ruling: string
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* How far one ticket got, from its journal records. Each field holds the
|
|
160
|
+
* latest record of its kind; `null` means the step has not finished.
|
|
161
|
+
*
|
|
162
|
+
* The fix-loop counts are derived from record order, never written by hand,
|
|
163
|
+
* so a crashed run counts them the same way again: a test-writer result that
|
|
164
|
+
* comes after a red check answers a fix round (and the red check runs again),
|
|
165
|
+
* and an implementer result after the gates does the same for the gates.
|
|
166
|
+
*/
|
|
167
|
+
export type TicketProgress = {
|
|
168
|
+
worktree: ReplayedWorktree | null
|
|
169
|
+
/** The install in the new worktree; its `check` is `null` with no manifest. */
|
|
170
|
+
install: ReplayedInstall | null
|
|
171
|
+
/** The prepare command run before its baseline tests (`baseline_prepared`). */
|
|
172
|
+
prepare: GateCheck | null
|
|
173
|
+
/** Its own baseline test run, or the one it reused (`baseline_reused`). */
|
|
174
|
+
baseline: TestRun | null
|
|
175
|
+
/**
|
|
176
|
+
* The run-branch commit the baseline was taken at. It stays when a rebase
|
|
177
|
+
* moves the worktree, so the baseline is only lent to tickets from there.
|
|
178
|
+
*/
|
|
179
|
+
baseline_sha: string | null
|
|
180
|
+
test_writer: TestWriterResult | null
|
|
181
|
+
red_check: ReplayedRedCheck | null
|
|
182
|
+
/**
|
|
183
|
+
* The new tests the latest passing red check proved fail first (#513),
|
|
184
|
+
* from the test-writer's criteria, one per file and name. A failed red
|
|
185
|
+
* check leaves them; a worktree reset clears them.
|
|
186
|
+
*/
|
|
187
|
+
red_tests: TestRef[]
|
|
188
|
+
/**
|
|
189
|
+
* The engine's check of the test-writer's latest `already_done`
|
|
190
|
+
* evidence (#495), `null` until it runs. A new test-writer result
|
|
191
|
+
* clears it.
|
|
192
|
+
*/
|
|
193
|
+
already_done_check: { ok: boolean; problems: string[] } | null
|
|
194
|
+
/** Follow-ups the test-writer answered after a failed red check. */
|
|
195
|
+
red_fix_rounds: number
|
|
196
|
+
implementer: ImplementerResult | null
|
|
197
|
+
/** Follow-ups the implementer answered after failed gates. */
|
|
198
|
+
gate_fix_rounds: number
|
|
199
|
+
/**
|
|
200
|
+
* `environment` answers to a failed red check or failed gates (#613),
|
|
201
|
+
* each a rerun that used no fix round.
|
|
202
|
+
*/
|
|
203
|
+
environment_reruns: number
|
|
204
|
+
/** The latest `environment` answer, until the next agent answers. */
|
|
205
|
+
environment: EnvironmentRerun | null
|
|
206
|
+
/**
|
|
207
|
+
* How many times a test was sent back as bad, by the implementer or by
|
|
208
|
+
* the engine, which found a mapped test that passes with no `expect()`
|
|
209
|
+
* (#581). Both count toward `MAX_BAD_TEST_BOUNCES`.
|
|
210
|
+
*/
|
|
211
|
+
bad_test_bounces: number
|
|
212
|
+
/** The latest test sent back as bad, for the fresh test-writer's prompt. */
|
|
213
|
+
bad_test: BadTest | null
|
|
214
|
+
/**
|
|
215
|
+
* Who sent each bounce counted in `bad_test_bounces`, oldest first (the
|
|
216
|
+
* last is who sent `bad_test`). The prompt and the stuck details word each
|
|
217
|
+
* bounce from its source (#581).
|
|
218
|
+
*/
|
|
219
|
+
bad_test_sources: BadTestSource[]
|
|
220
|
+
/**
|
|
221
|
+
* Who sent `bad_test`, kept beside it. A retry clears `bad_test_sources`
|
|
222
|
+
* but keeps this, so a fresh test-writer's prompt still words the bounce
|
|
223
|
+
* from its source (#581).
|
|
224
|
+
*/
|
|
225
|
+
bad_test_source: BadTestSource | null
|
|
226
|
+
/** The session each role's latest turn ran in, for follow-ups. */
|
|
227
|
+
sessions: Partial<Record<AgentRole, string>>
|
|
228
|
+
/** Every assumption any agent on the ticket made, oldest first. */
|
|
229
|
+
assumptions: string[]
|
|
230
|
+
/**
|
|
231
|
+
* How many turns each role on the ticket ran out of turns (#543), in the
|
|
232
|
+
* order each first did, for the PR.
|
|
233
|
+
*/
|
|
234
|
+
out_of_turns: Partial<Record<AgentRole, number>>
|
|
235
|
+
/** The latest ticket review's result. */
|
|
236
|
+
review: TicketReviewResult | null
|
|
237
|
+
/** Ticket reviews finished on this ticket. */
|
|
238
|
+
review_rounds: number
|
|
239
|
+
/** The commit the latest review looked at. */
|
|
240
|
+
reviewed_sha: string | null
|
|
241
|
+
/** The open review fix round; `null` before a review or once approved. */
|
|
242
|
+
review_fix: ReviewFix | null
|
|
243
|
+
/** Every nit reviewers reported, oldest first, one per id. */
|
|
244
|
+
nits: Finding[]
|
|
245
|
+
/** Findings declined through "won't fix", oldest first. */
|
|
246
|
+
declined: DeclinedFinding[]
|
|
247
|
+
/**
|
|
248
|
+
* The seq of the review that finally approved the ticket (no blocker or
|
|
249
|
+
* should-fix left), `null` until one does. Approved tickets join the run
|
|
250
|
+
* branch in this order, one at a time.
|
|
251
|
+
*/
|
|
252
|
+
approved_seq: number | null
|
|
253
|
+
/** How many times the ticket was sent back onto the run branch. */
|
|
254
|
+
rejoins: number
|
|
255
|
+
/** The latest time it was sent back, `null` if it never was. */
|
|
256
|
+
rejoin: ReplayedRejoin | null
|
|
257
|
+
/**
|
|
258
|
+
* How many times its tests went back to the test-writer after a rebase
|
|
259
|
+
* made them wrong (`tests_sent_back`, #489).
|
|
260
|
+
*/
|
|
261
|
+
test_updates: number
|
|
262
|
+
/** The open test update, `null` when none is open. */
|
|
263
|
+
test_update: TestUpdate | null
|
|
264
|
+
/**
|
|
265
|
+
* The latest failed agent turn, if no agent finished after it: its role,
|
|
266
|
+
* error, how it failed, and the session it ran in (for a follow-up).
|
|
267
|
+
*/
|
|
268
|
+
agent_failure: {
|
|
269
|
+
role: AgentRole
|
|
270
|
+
error: string
|
|
271
|
+
failure: AgentFailure
|
|
272
|
+
session_id: string | null
|
|
273
|
+
} | null
|
|
274
|
+
/**
|
|
275
|
+
* Failed tries (agent, result, and guard failures) each role has used on
|
|
276
|
+
* this ticket, in all. Engine failures never count here.
|
|
277
|
+
*/
|
|
278
|
+
failed_tries: Partial<Record<AgentRole, number>>
|
|
279
|
+
/**
|
|
280
|
+
* The model each role's latest agent on this ticket launched on
|
|
281
|
+
* (#604); `null` in older journals.
|
|
282
|
+
*/
|
|
283
|
+
launched_on: Partial<Record<AgentRole, string | null>>
|
|
284
|
+
/**
|
|
285
|
+
* The roles that used up a try (as `failed_tries` counts one) on a
|
|
286
|
+
* model cheaper than Opus (#604): their later fresh agents on this
|
|
287
|
+
* ticket run Opus. A retry keeps it.
|
|
288
|
+
*/
|
|
289
|
+
failed_cheaper: AgentRole[]
|
|
290
|
+
/** Engine failures in a row; any other turn's end resets it. */
|
|
291
|
+
engine_failures: number
|
|
292
|
+
leftovers: Record<CommitStage, LeftoverHit[] | null>
|
|
293
|
+
commits: Record<CommitStage, string | null>
|
|
294
|
+
/** The files each stage's latest commit changed. */
|
|
295
|
+
commit_files: Record<CommitStage, string[]>
|
|
296
|
+
gates: ReplayedGates | null
|
|
297
|
+
/** The checks that had their one lone rerun on this ticket (#544). */
|
|
298
|
+
lone_reruns: LoneRerunCheck[]
|
|
299
|
+
joined: { ok: true; shas: string[] } | { ok: false; error: string } | null
|
|
300
|
+
join_gates: ReplayedGates | null
|
|
301
|
+
pushed: string | null
|
|
302
|
+
stuck: ReplayedStuck | null
|
|
303
|
+
/** The spec issue's comment that told the owner, once posted. */
|
|
304
|
+
stuck_report: { comment_id: number } | null
|
|
305
|
+
/** The owner's reply to this stuck ticket, until the engine acts on it. */
|
|
306
|
+
reply: { word: 'retry' | 'skip'; comment_id: number } | null
|
|
307
|
+
/** Left out of the run: skipped by reply, or waits on a skipped ticket. */
|
|
308
|
+
skipped: { because: number | null } | null
|
|
309
|
+
/**
|
|
310
|
+
* Its work was already on the base branch, done by these commits (#484):
|
|
311
|
+
* the ticket is done without a join, like a pushed one.
|
|
312
|
+
*/
|
|
313
|
+
already_done: { shas: string[] } | null
|
|
314
|
+
/** The engine closed it (an already-done ticket in a run with no PR). */
|
|
315
|
+
closed: boolean
|
|
316
|
+
/**
|
|
317
|
+
* Why the ticket got stuck before its latest `retry` resumed it; the next
|
|
318
|
+
* fresh agent is told. Cleared once an agent starts.
|
|
319
|
+
*/
|
|
320
|
+
retried: ReplayedStuck | null
|
|
321
|
+
/** A test setup file change an agent asked for; the ticket is stuck on it. */
|
|
322
|
+
setup_change: { role: AgentRole; file: string; reason: string } | null
|
|
323
|
+
/**
|
|
324
|
+
* The role whose turn a crash cut off (`run_resumed`), so the fresh
|
|
325
|
+
* agent that takes it again is told. Cleared once an agent starts.
|
|
326
|
+
*/
|
|
327
|
+
crashed_turn: AgentRole | null
|
|
328
|
+
}
|
|
329
|
+
|
|
330
|
+
/** Why a ticket is stuck, as journaled. */
|
|
331
|
+
export type ReplayedStuck = { reason: StuckReason; detail: string }
|
|
332
|
+
|
|
333
|
+
/** The engine's install in a new worktree: `null` check means nothing to install. */
|
|
334
|
+
export type ReplayedInstall = { check: GateCheck | null }
|
|
335
|
+
|
|
336
|
+
/** A ticket nothing has happened to yet. */
|
|
337
|
+
export const EMPTY_TICKET_PROGRESS: TicketProgress = {
|
|
338
|
+
worktree: null,
|
|
339
|
+
install: null,
|
|
340
|
+
prepare: null,
|
|
341
|
+
baseline: null,
|
|
342
|
+
baseline_sha: null,
|
|
343
|
+
test_writer: null,
|
|
344
|
+
red_check: null,
|
|
345
|
+
red_tests: [],
|
|
346
|
+
already_done_check: null,
|
|
347
|
+
red_fix_rounds: 0,
|
|
348
|
+
implementer: null,
|
|
349
|
+
gate_fix_rounds: 0,
|
|
350
|
+
environment_reruns: 0,
|
|
351
|
+
environment: null,
|
|
352
|
+
bad_test_bounces: 0,
|
|
353
|
+
bad_test: null,
|
|
354
|
+
bad_test_sources: [],
|
|
355
|
+
bad_test_source: null,
|
|
356
|
+
sessions: {},
|
|
357
|
+
assumptions: [],
|
|
358
|
+
out_of_turns: {},
|
|
359
|
+
review: null,
|
|
360
|
+
review_rounds: 0,
|
|
361
|
+
reviewed_sha: null,
|
|
362
|
+
review_fix: null,
|
|
363
|
+
nits: [],
|
|
364
|
+
declined: [],
|
|
365
|
+
approved_seq: null,
|
|
366
|
+
rejoins: 0,
|
|
367
|
+
rejoin: null,
|
|
368
|
+
test_updates: 0,
|
|
369
|
+
test_update: null,
|
|
370
|
+
agent_failure: null,
|
|
371
|
+
failed_tries: {},
|
|
372
|
+
launched_on: {},
|
|
373
|
+
failed_cheaper: [],
|
|
374
|
+
engine_failures: 0,
|
|
375
|
+
leftovers: { red: null, green: null, fix: null },
|
|
376
|
+
commits: { red: null, green: null, fix: null },
|
|
377
|
+
commit_files: { red: [], green: [], fix: [] },
|
|
378
|
+
gates: null,
|
|
379
|
+
lone_reruns: [],
|
|
380
|
+
joined: null,
|
|
381
|
+
join_gates: null,
|
|
382
|
+
pushed: null,
|
|
383
|
+
stuck: null,
|
|
384
|
+
stuck_report: null,
|
|
385
|
+
reply: null,
|
|
386
|
+
skipped: null,
|
|
387
|
+
already_done: null,
|
|
388
|
+
closed: false,
|
|
389
|
+
retried: null,
|
|
390
|
+
setup_change: null,
|
|
391
|
+
crashed_turn: null,
|
|
392
|
+
}
|