@ckanner/flywheel 0.31.0 → 0.32.0
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 +122 -5
- package/CONTRIBUTING.md +19 -0
- package/LICENSE +21 -0
- package/README.en.md +4 -171
- package/README.md +152 -269
- package/README.zh-CN.md +116 -0
- package/bin/flywheel-claude-code-pro-worker.js +1 -1
- package/bin/flywheel-codex-pro-worker.js +1 -1
- package/bin/flywheel-dsh-worker.js +1 -1
- package/bin/flywheel.js +1 -1
- package/bin/runtime.js +1 -1
- package/docs/README.md +86 -0
- package/docs/README.zh-CN.md +64 -0
- package/docs/archive/README.md +13 -0
- package/docs/archive/codex-pro-adapter-handoff.md +197 -0
- package/docs/archive/design-v0.24.md +540 -0
- package/docs/design.md +812 -0
- package/docs/en/claude-code-pro.md +25 -16
- package/docs/en/configuration.md +405 -145
- package/docs/en/contributing.md +303 -0
- package/docs/en/flow-console.md +142 -24
- package/docs/en/getting-started.md +232 -126
- package/docs/en/investigation.md +263 -0
- package/docs/en/jev-shadow.md +5 -0
- package/docs/en/jev.md +240 -0
- package/docs/en/model-policy.md +154 -62
- package/docs/en/releasing.md +207 -0
- package/docs/en/session-evaluation.md +4 -2
- package/docs/en/session-recovery.md +88 -6
- package/docs/en/workflow.md +241 -114
- package/docs/evaluation/README.md +12 -0
- package/docs/evaluation/jev-historical-provisional.json +138 -0
- package/docs/evaluation/jev-historical-result-2026-11-10.json +174 -0
- package/docs/plans/2026-11-01-dsh-integration.md +67 -0
- package/docs/plans/2026-11-01-model-profiles-preflight.md +29 -0
- package/docs/plans/2026-11-01-npm-installation.md +19 -0
- package/docs/plans/2026-11-03-codex-pro-default.md +28 -0
- package/docs/plans/2026-11-06-adaptive-workflow.md +365 -0
- package/docs/plans/2026-11-07-session-lifecycle.en.md +424 -0
- package/docs/plans/2026-11-07-session-lifecycle.md +337 -0
- package/docs/plans/2026-11-08-flow-console.md +271 -0
- package/docs/plans/2026-11-10-jev-shadow.md +32 -0
- package/docs/plans/2026-11-10-task-discovery.md +17 -0
- package/docs/plans/2026-11-10-workbench-redesign.md +19 -0
- package/docs/plans/2026-11-12-feedback-driven-workflows.md +739 -0
- package/docs/plans/2026-11-12-unified-jev-decisions.md +89 -0
- package/docs/plans/2026-11-13-jev-execution-decisions.md +110 -0
- package/docs/plans/2026-11-13-p5-ready-queue-prewarm.md +178 -0
- package/docs/plans/README.md +25 -0
- package/docs/reviews/2026-08-24-v0.18-review-fixplan.md +265 -0
- package/docs/reviews/2026-09-12-pr4-pr5-review.md +70 -0
- package/docs/reviews/README.md +12 -0
- package/docs/validation/2026-11-01-npm-installation.md +105 -0
- package/docs/validation/2026-11-01-profiles-preflight.md +67 -0
- package/docs/validation/2026-11-01-results.md +114 -0
- package/docs/validation/2026-11-03-codex-pro-default.md +90 -0
- package/docs/validation/2026-11-04-dsh-native-view.md +85 -0
- package/docs/validation/2026-11-04-release-0.28.1.md +33 -0
- package/docs/validation/2026-11-04-release-0.28.2.md +35 -0
- package/docs/validation/2026-11-05-dsh-0.2.2-compatibility.md +26 -0
- package/docs/validation/2026-11-05-registry-smoke-recovery.md +26 -0
- package/docs/validation/2026-11-05-release-0.28.3.md +32 -0
- package/docs/validation/2026-11-05-subscription-model-access.md +60 -0
- package/docs/validation/2026-11-05-view-order.md +14 -0
- package/docs/validation/2026-11-07-adaptive-workflow.md +79 -0
- package/docs/validation/2026-11-07-claude-code-pro.md +144 -0
- package/docs/validation/2026-11-07-session-lifecycle.md +136 -0
- package/docs/validation/2026-11-08-session-p3-p4.md +99 -0
- package/docs/validation/2026-11-09-flow-console.md +81 -0
- package/docs/validation/2026-11-10-jev-shadow.md +50 -0
- package/docs/validation/2026-11-10-task-discovery.md +45 -0
- package/docs/validation/2026-11-10-workbench-redesign.md +54 -0
- package/docs/validation/2026-11-11-release-0.30.2.md +65 -0
- package/docs/validation/2026-11-11-release-0.31.0.md +46 -0
- package/docs/validation/2026-11-12-dsh-0.2.2-rc.2.md +58 -0
- package/docs/validation/2026-11-12-feedback-driven-workflows.md +187 -0
- package/docs/validation/2026-11-12-release-0.31.1.md +58 -0
- package/docs/validation/2026-11-12-session-console-ux.md +46 -0
- package/docs/validation/2026-11-12-unified-jev-decisions.md +93 -0
- package/docs/validation/2026-11-13-dsh-settings-controls.md +104 -0
- package/docs/validation/2026-11-13-jev-execution-decisions.md +140 -0
- package/docs/validation/2026-11-13-p5-ready-queue-prewarm.md +138 -0
- package/docs/validation/2026-11-13-p5-review-closure.md +114 -0
- package/docs/validation/2026-11-13-p5-tracked-runtime-fixes.md +108 -0
- package/docs/validation/2026-11-13-prewarm-receipts-and-expiry-tests.md +92 -0
- package/docs/validation/2026-11-13-workspace-redesign.md +66 -0
- package/docs/validation/README.md +51 -0
- package/docs/validation/evidence/2026-11-08-session-p3-p4.json +5430 -0
- package/docs/validation/evidence/2026-11-13-p5-npm-candidate.json +54 -0
- package/docs/validation/evidence/claude-node-bridges.txt +118 -0
- package/docs/validation/evidence/claude-npm-build.txt +15 -0
- package/docs/validation/evidence/claude-npm-candidate.json +54 -0
- package/docs/validation/evidence/claude-npm-install.txt +21 -0
- package/docs/validation/evidence/claude-npm-tests.txt +145 -0
- package/docs/validation/evidence/claude-plugin-tests.txt +205 -0
- package/docs/validation/evidence/claude-quality-gate.txt +29 -0
- package/docs/validation/evidence/claude-race.txt +7 -0
- package/docs/validation/evidence/codex-pro-070-probes.txt +4 -0
- package/docs/validation/evidence/dsh-bridge.txt +4 -0
- package/docs/validation/evidence/dsh-native-view-bridge-tests.txt +1 -0
- package/docs/validation/evidence/dsh-native-view-build.txt +15 -0
- package/docs/validation/evidence/dsh-native-view-candidate.json +54 -0
- package/docs/validation/evidence/dsh-native-view-inspect.txt +27 -0
- package/docs/validation/evidence/dsh-native-view-install-tests.txt +19 -0
- package/docs/validation/evidence/dsh-native-view-npm-tests.txt +143 -0
- package/docs/validation/evidence/dsh-native-view-plugin-tests.txt +99 -0
- package/docs/validation/evidence/dsh-native-view-quality-gate.txt +29 -0
- package/docs/validation/evidence/dsh-plugin-tests.txt +48 -0
- package/docs/validation/evidence/function-coverage.txt +378 -0
- package/docs/validation/evidence/npm-build.txt +13 -0
- package/docs/validation/evidence/npm-contract-tests.txt +65 -0
- package/docs/validation/evidence/npm-dsh-bridge.txt +18 -0
- package/docs/validation/evidence/npm-dsh-plugin-tests.txt +62 -0
- package/docs/validation/evidence/npm-function-coverage.txt +420 -0
- package/docs/validation/evidence/npm-install-tests.txt +20 -0
- package/docs/validation/evidence/npm-quality-gate.txt +29 -0
- package/docs/validation/evidence/npm-race.txt +7 -0
- package/docs/validation/evidence/pr-dsh-bridge.txt +4 -0
- package/docs/validation/evidence/pr-dsh-plugin-tests.txt +48 -0
- package/docs/validation/evidence/pr-function-coverage.txt +379 -0
- package/docs/validation/evidence/pr-quality-gate.txt +28 -0
- package/docs/validation/evidence/pr-race.txt +6 -0
- package/docs/validation/evidence/profiles-control-smoke.json +1 -0
- package/docs/validation/evidence/profiles-dsh-bridge.txt +18 -0
- package/docs/validation/evidence/profiles-dsh-plugin-tests.txt +59 -0
- package/docs/validation/evidence/profiles-function-coverage.txt +411 -0
- package/docs/validation/evidence/profiles-quality-gate.txt +29 -0
- package/docs/validation/evidence/profiles-race.txt +7 -0
- package/docs/validation/evidence/quality-gate.txt +28 -0
- package/docs/validation/evidence/race.txt +6 -0
- package/docs/validation/evidence/watchdog-startup-after.txt +2 -0
- package/docs/validation/evidence/watchdog-startup-before.txt +6 -0
- package/docs/validation/evidence/watchdog-startup-quality-gate.txt +29 -0
- package/docs/validation/evidence/watchdog-startup-race.txt +7 -0
- package/docs/{claude-code-pro.md → zh-CN/claude-code-pro.md} +23 -17
- package/docs/{configuration.md → zh-CN/configuration.md} +397 -142
- package/docs/zh-CN/contributing.md +240 -0
- package/docs/zh-CN/flow-console.md +216 -0
- package/docs/zh-CN/getting-started.md +352 -0
- package/docs/zh-CN/investigation.md +213 -0
- package/docs/zh-CN/jev-shadow.md +5 -0
- package/docs/zh-CN/jev.md +192 -0
- package/docs/zh-CN/model-policy.md +128 -0
- package/docs/zh-CN/releasing.md +120 -0
- package/docs/{session-evaluation.md → zh-CN/session-evaluation.md} +4 -2
- package/docs/{session-recovery.md → zh-CN/session-recovery.md} +75 -12
- package/docs/zh-CN/workflow.md +284 -0
- package/npm/install.js +1 -1
- package/package.json +12 -25
- package/docs/flow-console.md +0 -122
- package/docs/getting-started.md +0 -418
- package/docs/model-policy.md +0 -65
- package/docs/workflow.md +0 -314
package/docs/en/model-policy.md
CHANGED
|
@@ -1,63 +1,155 @@
|
|
|
1
|
-
#
|
|
2
|
-
|
|
3
|
-
[
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
|
|
|
20
|
-
|
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
1
|
+
# Models, reasoning effort, and accounts
|
|
2
|
+
|
|
3
|
+
[Documentation](../README.md) · English · [简体中文](../zh-CN/model-policy.md)
|
|
4
|
+
|
|
5
|
+
Flywheel selects a model through a stage or execution-route binding. The
|
|
6
|
+
[default template](https://github.com/ckanner/flywheel/blob/main/templates/flywheel.config.example.json) is the source
|
|
7
|
+
of truth for new configurations; an existing installation keeps its own
|
|
8
|
+
configuration. These defaults are an editable baseline. The repository does not
|
|
9
|
+
establish that they are the optimum for representative tasks, or that increasing
|
|
10
|
+
reasoning effort improves every delivery.
|
|
11
|
+
|
|
12
|
+
## Default bindings
|
|
13
|
+
|
|
14
|
+
| Stage or route | Harness | Model | Access path | Effort |
|
|
15
|
+
|---|---|---|---|---|
|
|
16
|
+
| Plan | `kimi` | `kimi-code/k3.1-pro` | Kimi Code subscription through the native CLI | `high` |
|
|
17
|
+
| Execute: default | `dsh` | `deepseek-flash` | DSH `deepseek-account` | `high` |
|
|
18
|
+
| Execute: frontend | `kimi` | `kimi-code/k3.1-pro` | Kimi Code subscription through the native CLI | `high` |
|
|
19
|
+
| Execute: hard | `codex-pro` | `gpt-6.1-sol` | Codex login through the public machine API | `high` |
|
|
20
|
+
| Review | `dsh` | `gpt-6.1-sol` | DSH `chatgpt` provider | `high` |
|
|
21
|
+
| Judge | `dsh` | `gpt-6-astra` | DSH `chatgpt` provider | `high` |
|
|
22
|
+
| Intake | `dsh` | `deepseek-flash` | DSH `deepseek-account` | `low` |
|
|
23
|
+
| Garden | `kimi` | `kimi-code/k3.1-pro` | Kimi Code subscription through the native CLI | `high` |
|
|
24
|
+
|
|
25
|
+
The harness owns the agent/tool loop. A DSH `provider` selects its native LLM
|
|
26
|
+
adapter, while a `channel` names the configured account/credential path. A
|
|
27
|
+
`codex-pro` harness is not a DSH provider called `subagent_codex_pro`. Kimi uses
|
|
28
|
+
its native CLI, not ACP. Auto, Quick, and Full do not change these bindings or
|
|
29
|
+
increase effort automatically; see [Configuration](configuration.md).
|
|
30
|
+
|
|
31
|
+
Claude Code Pro is available as an [optional backend](claude-code-pro.md), with
|
|
32
|
+
no default stage or route assigned. Its profile uses an explicit native model
|
|
33
|
+
and effort rather than an implicit replacement for another subscription.
|
|
34
|
+
|
|
35
|
+
## Account selection
|
|
36
|
+
|
|
37
|
+
The default and `subscriptions` preset use `deepseek-account` with
|
|
38
|
+
`deepseek-flash`. Standard DSH desktop and SDK profiles under the same DSH home
|
|
39
|
+
can share account authorization without an additional API key. Custom profiles
|
|
40
|
+
must load the account service and adapter. Independent SDK calls still supply
|
|
41
|
+
an explicit provider/model; changing the desktop chat model does not update
|
|
42
|
+
Flywheel's bindings.
|
|
43
|
+
|
|
44
|
+
`deepseek-official` is a separate API-key provider, selected only by explicit
|
|
45
|
+
configuration. The default preset does not switch payment channels after an
|
|
46
|
+
authentication or quota failure. User-configured fallback chains retain their
|
|
47
|
+
own policy. ChatGPT and Kimi subscriptions likewise require the corresponding
|
|
48
|
+
installed adapter or CLI and its supported login flow.
|
|
49
|
+
|
|
50
|
+
Upgrades preserve existing user files. To adopt the subscription preset, inspect
|
|
51
|
+
the effective complete configuration, preview the migration, then explicitly
|
|
52
|
+
apply it as described in [Configuration](configuration.md). Restart the engine
|
|
53
|
+
afterward; neither installing packages nor changing a desktop chat model
|
|
54
|
+
migrates a running task.
|
|
55
|
+
|
|
56
|
+
## Reasoning effort is backend-specific
|
|
57
|
+
|
|
58
|
+
The following capabilities were checked for the documented integrations on
|
|
59
|
+
**2026-11-05**. They are compatibility evidence for those snapshots, not a live
|
|
60
|
+
catalog or an account-entitlement check.
|
|
61
|
+
|
|
62
|
+
| Checked integration | Accepted request values | Notes |
|
|
31
63
|
|---|---|---|
|
|
32
|
-
|
|
|
33
|
-
|
|
|
34
|
-
|
|
|
35
|
-
|
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
##
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
+
| GPT-6.1 Sol / Codex Pro 0.9.0 | `low`, `medium`, `high`, `xhigh`, `max` | The machine API forwards the selected effort |
|
|
65
|
+
| Sol and Astra / DSH ChatGPT provider | `low`, `medium`, `high`, `xhigh`, `max` | The provider serializes `reasoning.effort` |
|
|
66
|
+
| Kimi K3.1 Pro / native CLI | `low`, `high`, `max` | Thinking cannot be disabled; compatibility aliases `xhigh`, `max`, and `ultra` resolve to native `max` |
|
|
67
|
+
| DeepSeek Flash / checked DSH adapter | `off`, `low`, `high`, `max` | This adapter rejects `medium` and `xhigh` |
|
|
68
|
+
|
|
69
|
+
Names do not form a common scale across providers. In particular, a generic
|
|
70
|
+
API's compatibility mapping does not override the DSH adapter's own input
|
|
71
|
+
validation. Use `max`, not `xhigh`, when evaluating Flash's higher supported
|
|
72
|
+
level on this path. The adapter must reject an unsupported selection rather
|
|
73
|
+
than silently choose another model or effort.
|
|
74
|
+
|
|
75
|
+
Compatibility references: [Kimi model documentation](https://www.kimi.com/code/docs/en/kimi-code/models),
|
|
76
|
+
[DeepSeek thinking](https://api-docs.deepseek.com/guides/thinking_mode/),
|
|
77
|
+
[Sol model reference](https://developers.openai.com/api/docs/models/gpt-6.1-sol),
|
|
78
|
+
[Astra model reference](https://developers.openai.com/api/docs/models/gpt-6-astra),
|
|
79
|
+
[DSH DeepSeek configuration](https://github.com/deepseek-ai/deepseek-harness/blob/b830ec950faba0a46dda564be3e2d854afed94f1/packages/llm/llm-deepseek/src/config.ts),
|
|
80
|
+
and [serialization](https://github.com/deepseek-ai/deepseek-harness/blob/b830ec950faba0a46dda564be3e2d854afed94f1/packages/llm/llm-deepseek/src/serialize.ts).
|
|
81
|
+
The checked ChatGPT provider is 0.1.17 at `388868f91bcdc05795fb94d21b868ded6d7219c9`:
|
|
82
|
+
[model catalog](https://github.com/ckanner/dsh-plugin-chatgpt/blob/388868f91bcdc05795fb94d21b868ded6d7219c9/src/models/served.ts)
|
|
83
|
+
and [request serialization](https://github.com/ckanner/dsh-plugin-chatgpt/blob/388868f91bcdc05795fb94d21b868ded6d7219c9/src/convert/request.ts).
|
|
84
|
+
|
|
85
|
+
## Choose and evaluate a baseline
|
|
86
|
+
|
|
87
|
+
Seven of the eight default bindings use `high`; Intake uses `low`. Keeping a
|
|
88
|
+
stable starting point makes comparisons attributable to a particular stage.
|
|
89
|
+
The following candidates are engineering judgments based on stage
|
|
90
|
+
responsibilities, not measured Flywheel quality results.
|
|
91
|
+
|
|
92
|
+
| Stage | Candidate comparison |
|
|
93
|
+
|---|---|
|
|
94
|
+
| Intake | Compare `high` for ambiguous input, merging, or classification |
|
|
95
|
+
| Plan | Compare `max` for difficult architecture, dependencies, or acceptance design |
|
|
96
|
+
| Execute: default | Compare Flash `max` for difficult implementation or root-cause analysis |
|
|
97
|
+
| Execute: frontend | Compare Kimi `max` for complex interaction state or cross-component consistency |
|
|
98
|
+
| Execute: hard | Compare Sol `xhigh` first; evaluate `max` on the hardest tasks |
|
|
99
|
+
| Review | Compare `xhigh` for concurrency, consistency, or permission reviews |
|
|
100
|
+
| Judge | Compare Astra `xhigh` for high-impact milestone acceptance, then `max` where justified |
|
|
101
|
+
| Garden | Compare `low` for routine organization and `max` for difficult cross-task synthesis |
|
|
102
|
+
|
|
103
|
+
Change `thinking` in the effective complete configuration. For example, change
|
|
104
|
+
`routes.hard.thinking` to affect only hard execution, or
|
|
105
|
+
`loops.judge.thinking` to affect only Judge. A stage override avoids changing all
|
|
106
|
+
consumers of a shared profile. Do not create an incomplete task configuration
|
|
107
|
+
containing only these fields: configuration discovery selects one file rather
|
|
108
|
+
than merging files.
|
|
109
|
+
|
|
110
|
+
Hold the model, harness, context, task, permissions, and acceptance conditions
|
|
111
|
+
fixed. Measure delivery success, first-pass acceptance, missed defects and false
|
|
112
|
+
alarms, total time including rework, and input/output/reasoning/cache usage.
|
|
113
|
+
Record observable subscription quota separately and preserve unknown values.
|
|
114
|
+
API prices do not directly determine subscription task capacity. The
|
|
115
|
+
[session evaluation guide](session-evaluation.md) describes the repository's
|
|
116
|
+
paired experiment tooling; effort comparisons need their own fixed conditions.
|
|
117
|
+
|
|
118
|
+
## Bounded model and effort experiments
|
|
119
|
+
|
|
120
|
+
The optional [execution policy](configuration.md#bounded-execution-policy-opt-in)
|
|
121
|
+
declares complete allowed bindings per route, including account, effort,
|
|
122
|
+
permission and history mode. Auto/Quick/Full do not enable it. A confirmed
|
|
123
|
+
repeated L1 stall may advance the declared experiment order within existing
|
|
124
|
+
attempt/token budgets and an explicit switch limit. This deterministic rule
|
|
125
|
+
does not prove the next model is better. Channel errors use separately declared
|
|
126
|
+
fallbacks; neither mechanism may select an undeclared model or payment channel.
|
|
127
|
+
|
|
128
|
+
When the single [JEV switch](jev.md) is enabled, a confirmed failure can also
|
|
129
|
+
offer the already allowed bindings as decision candidates. The engine checks
|
|
130
|
+
the frozen allowlist, permission, remaining attempts and switch budget before
|
|
131
|
+
adoption. No extra JEV model-routing switch is required. Without an allowed
|
|
132
|
+
alternative, the configured binding stays in use. A semantic choice is recorded
|
|
133
|
+
as a choice, not as measured proof that the selected model is faster or better.
|
|
134
|
+
|
|
135
|
+
Effort changes cold-start the role and record complete before/after bindings.
|
|
136
|
+
Comparisons must include rereading, startup and actual known/unknown usage and
|
|
137
|
+
cost. Offline tests run real engine repair and recovery paths with controlled
|
|
138
|
+
driver results; they do not establish live model quality or speed. Use matched
|
|
139
|
+
real tasks with frozen oracles before changing defaults or claiming savings.
|
|
140
|
+
|
|
141
|
+
## Interpret configuration and quality evidence
|
|
142
|
+
|
|
143
|
+
Source and offline protocol tests establish field transmission and error
|
|
144
|
+
behavior. SDK or machine-API acceptance establishes acceptance at that interface.
|
|
145
|
+
Independent effective-effort evidence and better delivery quality require
|
|
146
|
+
backend evidence or actual task measurements.
|
|
147
|
+
|
|
148
|
+
DSH `initialize` validates configuration but returns only server information.
|
|
149
|
+
Flywheel's `ready.reasoningEffort` echoes the request after initialization;
|
|
150
|
+
it is not independent model-server attestation. Codex Pro separates
|
|
151
|
+
`requestedEffort`, `accepted`, and an unknown `effectiveEffort:null`.
|
|
152
|
+
See the [DSH SDK server](https://github.com/deepseek-ai/deepseek-harness/blob/b830ec950faba0a46dda564be3e2d854afed94f1/packages/sdk/server/src/server.ts)
|
|
153
|
+
and [Codex Pro machine protocol](https://github.com/ckanner/dsh-subagent-codex-pro/blob/37da3d75de32b809c4fb1a631ccc15191f3d87f9/docs/machine.md).
|
|
154
|
+
A no-inference doctor cannot prove account balance, live inference, or the
|
|
155
|
+
benefit of a higher effort setting.
|
|
@@ -0,0 +1,207 @@
|
|
|
1
|
+
# Releasing Flywheel
|
|
2
|
+
|
|
3
|
+
[Documentation](../README.md) · English · [简体中文](../zh-CN/releasing.md)
|
|
4
|
+
|
|
5
|
+
This runbook is for maintainers. Users should follow
|
|
6
|
+
[getting started](getting-started.md). A source commit, GitHub Release, or
|
|
7
|
+
successful `npm pack` does not establish that a version is available from npm.
|
|
8
|
+
Actual releases and verification limits belong in the
|
|
9
|
+
[validation records](../validation/README.md).
|
|
10
|
+
|
|
11
|
+
## 1. Release identity and prerequisites
|
|
12
|
+
|
|
13
|
+
One release contains six packages at the same exact version, published in
|
|
14
|
+
the following order:
|
|
15
|
+
|
|
16
|
+
| Order | Package | Contents |
|
|
17
|
+
| --- | --- | --- |
|
|
18
|
+
| 1–4 | `@ckanner/flywheel-{darwin,linux}-{arm64,amd64}` | Four platform-specific Go binaries |
|
|
19
|
+
| 5 | `@ckanner/dsh-plugin-flywheel` | Desktop plugin and workers |
|
|
20
|
+
| 6 | `@ckanner/flywheel` | User-facing CLI, installer, and documentation |
|
|
21
|
+
|
|
22
|
+
The meta package pins all five dependencies. Every Flywheel package declares
|
|
23
|
+
MIT and includes its `LICENSE`; the plugin retains third-party notices.
|
|
24
|
+
The Codex Pro dependency is pinned to 0.9.0 and bundled from the
|
|
25
|
+
[recorded source candidate](https://github.com/ckanner/flywheel/blob/main/plugins/dsh/vendor/README.md). Claude Code
|
|
26
|
+
Pro 0.4.0 remains an optional peer, not a seventh Flywheel release package.
|
|
27
|
+
|
|
28
|
+
Use Git, Go **1.27**, Node **24.22.1**, and npm **12.2.1**, matching the
|
|
29
|
+
repository workflows. The end-user Node requirement is lower; the release
|
|
30
|
+
toolchain is deliberately fixed. The reviewed source must be clean, all six
|
|
31
|
+
versions must agree, and the exact `vX.Y.Z` tag must point to HEAD. Never move
|
|
32
|
+
an existing release tag or replace already-published package bytes.
|
|
33
|
+
|
|
34
|
+
`candidate.json` records the source commit, tree, snapshot SHA-256, and each
|
|
35
|
+
tarball's SHA-512 integrity. Build once, then verify, test, and publish those
|
|
36
|
+
same tarballs. A candidate with `source.dirty: true` is for development only.
|
|
37
|
+
|
|
38
|
+
## 2. Validate the release source
|
|
39
|
+
|
|
40
|
+
Run the checks required by the [contribution guide](contributing.md) and
|
|
41
|
+
the current [CI workflow](https://github.com/ckanner/flywheel/blob/main/.github/workflows/ci.yml):
|
|
42
|
+
|
|
43
|
+
| Area | Required evidence |
|
|
44
|
+
| --- | --- |
|
|
45
|
+
| Go | `make quality-gate` and the workflow's core-package race checks |
|
|
46
|
+
| DSH plugin | Locked dependency installation, build, and behavior tests |
|
|
47
|
+
| Backend boundary | DSH, Codex Pro, and Claude Code Pro offline bridge tests |
|
|
48
|
+
| npm | `npm test` and real installation of the six-package candidate |
|
|
49
|
+
| Native CLI | Build, version/help, and JSON configuration checks |
|
|
50
|
+
| Session policies | `npm run test:sessions` with the built native binary |
|
|
51
|
+
| Documentation | Links, language parity, packaged guides, and licenses |
|
|
52
|
+
|
|
53
|
+
Prepare the exact optional Claude tarball using the workflow's pinned source
|
|
54
|
+
SHA and SHA-256 check. For plugin/bridge tests, the workflow temporarily
|
|
55
|
+
installs it as a development dependency and restores the source manifests.
|
|
56
|
+
Export `FLYWHEEL_CLAUDE_CODE_PRO_TARBALL` as the absolute path to that verified
|
|
57
|
+
tarball before running candidate installation tests.
|
|
58
|
+
An absent optional peer does not count as a passed Claude backend check.
|
|
59
|
+
|
|
60
|
+
These checks use isolated profiles and offline model fixtures. They do not
|
|
61
|
+
establish live account readiness, model quality, or physical desktop layout.
|
|
62
|
+
Record the actual platforms tested; cross-compilation does not establish
|
|
63
|
+
runtime verification on the target platform.
|
|
64
|
+
|
|
65
|
+
## 3. Build one candidate
|
|
66
|
+
|
|
67
|
+
From the clean checkout of the reviewed release tag, run each command and
|
|
68
|
+
stop on failure:
|
|
69
|
+
|
|
70
|
+
```sh
|
|
71
|
+
FLYWHEEL_RELEASE_VERSION=$(node -p "require('./package.json').version")
|
|
72
|
+
FLYWHEEL_RELEASE_SHA=$(git rev-parse HEAD)
|
|
73
|
+
node scripts/release-preflight.js --version "$FLYWHEEL_RELEASE_VERSION" --tag "v$FLYWHEEL_RELEASE_VERSION" --json
|
|
74
|
+
npm run build:npm
|
|
75
|
+
node scripts/release-publish.js verify-candidate --directory dist-npm --source-sha "$FLYWHEEL_RELEASE_SHA"
|
|
76
|
+
FLYWHEEL_NPM_PACKAGES_DIR=dist-npm npm run test:install
|
|
77
|
+
```
|
|
78
|
+
|
|
79
|
+
Set the Claude tarball environment variable described above before the final
|
|
80
|
+
command. The build installs locked plugin dependencies inside an isolated
|
|
81
|
+
source snapshot, with lifecycle scripts disabled, then builds the workers and
|
|
82
|
+
four Go binaries. It does not reuse the caller's `node_modules` or `dist`.
|
|
83
|
+
Root-level `npm install` is not required.
|
|
84
|
+
|
|
85
|
+
Preserve `dist-npm/`, its `candidate.json`, source identity, toolchain versions,
|
|
86
|
+
and validation results. Verify all six packed MIT licenses and the root and
|
|
87
|
+
plugin language editions. If source changes before any upload, prepare a new
|
|
88
|
+
candidate from the new reviewed source. After any upload, retain the original
|
|
89
|
+
candidate and follow the recovery rules below.
|
|
90
|
+
|
|
91
|
+
## 4. GitHub Actions publication
|
|
92
|
+
|
|
93
|
+
Pushing the reviewed tag triggers [publish.yml](https://github.com/ckanner/flywheel/blob/main/.github/workflows/publish.yml).
|
|
94
|
+
An existing tag can also be supplied to its manual dispatch. Linux and macOS
|
|
95
|
+
verify the same candidate artifact; the publish job refreshes remote refs and
|
|
96
|
+
requires the tag to still identify the checked source.
|
|
97
|
+
|
|
98
|
+
GitHub access and npm publication rights are separate. Configure trusted
|
|
99
|
+
publishing for each of the six packages with owner `ckanner`, repository
|
|
100
|
+
`flywheel`, workflow `publish.yml`, and no environment unless the workflow is
|
|
101
|
+
changed to use one. Both **npm publish** and **npm dist-tag** permissions are
|
|
102
|
+
needed. The workflow also supports an authorized `NPM_TOKEN` fallback.
|
|
103
|
+
|
|
104
|
+
New packages require npm's initial package-creation authorization before
|
|
105
|
+
their trusted publisher can be configured. Use the normal authorized npm
|
|
106
|
+
flow; do not upload different placeholder bytes under the release version.
|
|
107
|
+
See the official [trusted publisher](https://docs.npmjs.com/trusted-publishers/)
|
|
108
|
+
and [dist-tag](https://docs.npmjs.com/adding-dist-tags-to-packages/) documentation
|
|
109
|
+
for account setup. `npm whoami` identifies an account, not its publishing rights.
|
|
110
|
+
|
|
111
|
+
Publication requires explicit repository visibility: `public` requires
|
|
112
|
+
provenance; `private` disables unsupported private-source provenance. Choose
|
|
113
|
+
the repository's actual visibility. Publishing a package does not change
|
|
114
|
+
repository visibility, and OIDC authentication is separate from provenance.
|
|
115
|
+
|
|
116
|
+
## 5. Publish locally from private source
|
|
117
|
+
|
|
118
|
+
A maintainer can build from a normal Git checkout. With the current release
|
|
119
|
+
policy, new uploads from a public repository must use section 4: the publisher
|
|
120
|
+
requires provenance, which npm generates only in a supported cloud CI/CD
|
|
121
|
+
environment, not an ordinary local browser-login session. See
|
|
122
|
+
[npm provenance requirements](https://docs.npmjs.com/generating-provenance-statements/).
|
|
123
|
+
The local upload example below applies only when the source repository is
|
|
124
|
+
actually private. Do not label a public repository private to bypass this
|
|
125
|
+
requirement. No downloaded archive is required. Complete source review and
|
|
126
|
+
the checks above first. If Actions cannot run, record the maintainer's
|
|
127
|
+
authorization, actual local results, and checks that were not performed;
|
|
128
|
+
do not report unavailable CI as passing.
|
|
129
|
+
|
|
130
|
+
From the same clean tagged source and its original candidate:
|
|
131
|
+
|
|
132
|
+
```sh
|
|
133
|
+
npm login --auth-type=web --scope=@ckanner --registry=https://registry.npmjs.org/
|
|
134
|
+
npm run release:local -- --repository-visibility private
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
Complete the normal browser/2FA prompts in the terminal. The publisher
|
|
138
|
+
requires a TTY; do not pipe its output through `tee`.
|
|
139
|
+
|
|
140
|
+
`release:local` performs these steps:
|
|
141
|
+
|
|
142
|
+
1. Recheck clean source, exact local and remote tag, tree, snapshot, candidate
|
|
143
|
+
manifest, and package integrity.
|
|
144
|
+
2. Run candidate installation, then verify the source and candidate again.
|
|
145
|
+
3. Upload platform packages, plugin, and meta under `candidate-X-Y-Z`.
|
|
146
|
+
4. Install the exact version from the official npm registry.
|
|
147
|
+
5. Recheck source and remote tag, promote `latest` in the same order, and
|
|
148
|
+
verify all six tags and integrities.
|
|
149
|
+
|
|
150
|
+
The command uses the repository's existing release checks. Only npm publish
|
|
151
|
+
and dist-tag writes inherit terminal I/O; registry queries retain strict JSON
|
|
152
|
+
parsing and bounded timeouts. The command does not log in, create or move
|
|
153
|
+
tags, or change account security settings.
|
|
154
|
+
|
|
155
|
+
For a reviewed older release that needs newer tooling, `--source-directory`
|
|
156
|
+
can point at its exact tagged worktree and `--directory` at its original
|
|
157
|
+
candidate. The source defaults to the tooling checkout; the candidate
|
|
158
|
+
directory defaults to `dist-npm/` inside the selected source directory. Explicit
|
|
159
|
+
relative paths resolve from the invocation directory. Do not copy newer
|
|
160
|
+
tooling into old release source or rebuild an already-published version.
|
|
161
|
+
|
|
162
|
+
## 6. Visibility, promotion, and retry behavior
|
|
163
|
+
|
|
164
|
+
Packages first use the candidate tag. All exact versions and integrities must
|
|
165
|
+
be visible and registry installation must succeed before `latest` moves.
|
|
166
|
+
Platform packages are promoted first, the plugin next, and the user-facing
|
|
167
|
+
meta package last. npm has no atomic six-package tag transaction.
|
|
168
|
+
|
|
169
|
+
Only a structured E404 means a queried version is absent. Authentication,
|
|
170
|
+
transport, cancellation, malformed output, or missing integrity fails the
|
|
171
|
+
operation. Registry queries accept the supported scalar and single-element
|
|
172
|
+
array response shapes; multiple results are rejected.
|
|
173
|
+
|
|
174
|
+
After upload, visibility checks have a 180-second budget per package, with
|
|
175
|
+
E404 backoff from 2 seconds to at most 15 seconds. Each read is bounded by
|
|
176
|
+
30 seconds and the remaining budget. Promotion verification uses the same
|
|
177
|
+
bounded approach for `latest` and integrity. It repeats reads, not writes,
|
|
178
|
+
and refuses a newer `latest`, conflicting integrity, or invalid version.
|
|
179
|
+
|
|
180
|
+
| Failure | Recovery |
|
|
181
|
+
| --- | --- |
|
|
182
|
+
| Authentication or browser approval | Resolve the authorized npm login; retain the candidate. |
|
|
183
|
+
| Some packages uploaded | Retry the original candidate; existing versions must match its integrity. |
|
|
184
|
+
| Registry visibility timeout | Preserve the artifact and retry after the external issue is resolved. |
|
|
185
|
+
| Installation or tag promotion failed | Resume with the same candidate; do not downgrade a newer `latest`. |
|
|
186
|
+
| Source must change after upload | Use a new uniform version and a new reviewed tag. |
|
|
187
|
+
| Original candidate is missing | Recover it; do not assume a rebuild has identical bytes. |
|
|
188
|
+
|
|
189
|
+
With Actions, rerun failed jobs using the original artifact. Locally, rerun
|
|
190
|
+
the final `release:local` command against the preserved source and candidate.
|
|
191
|
+
|
|
192
|
+
## 7. Record completion
|
|
193
|
+
|
|
194
|
+
Publication is complete only after all six exact versions and integrities,
|
|
195
|
+
registry installation, and final `latest` checks have passed. Record those
|
|
196
|
+
results separately from source review, local tests, CI, and desktop acceptance.
|
|
197
|
+
For an additional exact-version installation check:
|
|
198
|
+
|
|
199
|
+
```sh
|
|
200
|
+
FLYWHEEL_NPM_VERSION=X.Y.Z npm run test:registry
|
|
201
|
+
```
|
|
202
|
+
|
|
203
|
+
Replace `X.Y.Z` with the released version. Record source SHA, candidate
|
|
204
|
+
identity, actual platforms, failures/retries, and remaining limits in a dated
|
|
205
|
+
validation record and release notes. See the
|
|
206
|
+
[0.30.2 release record](../validation/2026-11-11-release-0.30.2.md) for a
|
|
207
|
+
historical example; it is evidence for that release, not a live registry status.
|
|
@@ -1,8 +1,10 @@
|
|
|
1
1
|
# Session quality policy and paired evaluation
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[Documentation](../README.md) · English · [简体中文](../zh-CN/session-evaluation.md)
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
Flywheel supports bounded context rebuilding based on confirmed facts and paired experiments using three history policies on the same tasks. Rebuild thresholds default to disabled. The evaluator preserves original conditions and results, keeps missing usage unknown, and assumes no quality, cache, or speed benefit.
|
|
6
|
+
|
|
7
|
+
See [configuration](configuration.md) for the policy and [recovery](session-recovery.md) for lifecycle and ledger semantics. Implementation entry points are the [quality policy](https://github.com/ckanner/flywheel/blob/main/internal/machine/session_quality.go), [evaluator](https://github.com/ckanner/flywheel/blob/main/scripts/evaluate-sessions.js), and [corpus preparer](https://github.com/ckanner/flywheel/blob/main/scripts/prepare-session-evaluation.js).
|
|
6
8
|
|
|
7
9
|
## Bounded rebuilding
|
|
8
10
|
|
|
@@ -1,6 +1,27 @@
|
|
|
1
1
|
# Interrupted calls and context quality
|
|
2
2
|
|
|
3
|
-
|
|
3
|
+
[Documentation](../README.md) · English · [简体中文](../zh-CN/session-recovery.md)
|
|
4
|
+
|
|
5
|
+
Flywheel separates reuse of a role’s conversation history from recovery of an
|
|
6
|
+
interrupted invocation. Fresh and scoped histories both retain invocation safety
|
|
7
|
+
checks. Durable public-journal recovery requires **Codex Pro 0.9.0** or
|
|
8
|
+
**Claude Code Pro 0.4.0**; DSH and Kimi retain their own supported recovery paths.
|
|
9
|
+
|
|
10
|
+
## Resume an existing task
|
|
11
|
+
|
|
12
|
+
Use the original task ledger and integration directory. Read its status, then
|
|
13
|
+
request continuation through the normal engine entry point:
|
|
14
|
+
|
|
15
|
+
```sh
|
|
16
|
+
flywheel control status --cwd /repo --task-dir /repo/docs/my-task
|
|
17
|
+
flywheel control start --cwd /repo --task-dir /repo/docs/my-task
|
|
18
|
+
```
|
|
19
|
+
|
|
20
|
+
The engine reconciles earlier calls before making another model request. A
|
|
21
|
+
`pending` or `unknown` outcome can keep the task blocked; preserve its journals
|
|
22
|
+
and diagnostics rather than deleting state or selecting a fresh session to
|
|
23
|
+
force progress. A status response describes current facts, not permission to
|
|
24
|
+
replay an unresolved call.
|
|
4
25
|
|
|
5
26
|
## Ownership
|
|
6
27
|
|
|
@@ -44,6 +65,49 @@ At `cleanup-confirmed`, before acknowledging, Go captures the post-call candidat
|
|
|
44
65
|
|
|
45
66
|
A durable receipt without the Go candidate checkpoint may reconcile trustworthy usage while leaving business execution blocked. A proven pre-dispatch rejection may be treated as unexecuted only with confirmed cleanup and an unchanged original candidate and guard. Review/Judge contract and candidate checks remain mandatory.
|
|
46
67
|
|
|
68
|
+
### Shared-checkout execution
|
|
69
|
+
|
|
70
|
+
For shared-checkout execution, an Execute receipt fingerprints its declared write scope and binds that scope into the session identity. Independent peer changes do not discard a known invocation; changes within its own scope still reject stale receipts. L1, independent Review and collective delivery validate the entire combined candidate. Scoped receipts neither prove batch completion nor bypass unknown dispatch, outcome or cleanup.
|
|
71
|
+
|
|
72
|
+
### DSH runtime preparation after a restart
|
|
73
|
+
|
|
74
|
+
Optional `scheduler.prewarm` prepares a DSH Review runtime without a model prompt
|
|
75
|
+
while deterministic checks run. Before starting it, Go saves a single
|
|
76
|
+
`worker-prewarm` responsibility in task state, including the preparation identity,
|
|
77
|
+
role/scope, binding and run. Its terminal receipt is private under
|
|
78
|
+
`.control/prewarm/`; it is separate from a model invocation or passing Review.
|
|
79
|
+
|
|
80
|
+
The complete terminal JSON is limited to 8 KiB after UTF-8 serialization, including
|
|
81
|
+
escaped characters and the trailing newline. Long error diagnostics are shortened
|
|
82
|
+
with a truncation marker; ordinary short errors and all identity, dispatch and
|
|
83
|
+
cleanup fields remain intact. Diagnostic truncation does not relax any recovery
|
|
84
|
+
check or turn an initialization failure into a safe-expiry fallback.
|
|
85
|
+
|
|
86
|
+
A restarted engine never resumes that prepared worker. It may discharge the old
|
|
87
|
+
responsibility only when the matching receipt proves that no prompt was submitted,
|
|
88
|
+
SDK cleanup was confirmed, and both the recorded worker and its original process
|
|
89
|
+
group have exited. Receipt publication synchronizes the file and its directory;
|
|
90
|
+
recovery repeats those durability checks before clearing state. If no process was
|
|
91
|
+
ever started, an explicit local no-process receipt can establish that fact;
|
|
92
|
+
elapsed time or a missing PID cannot. Missing, oversized, corrupt or mismatched receipts, a
|
|
93
|
+
live or unconfirmed process/group, or uncertain cleanup keep the task blocked.
|
|
94
|
+
Turning prewarming off does not bypass reconciliation. After safe resolution,
|
|
95
|
+
subsequent work follows the current configuration and its normal invocation checks.
|
|
96
|
+
|
|
97
|
+
Within the same engine run, a safely expired unused runtime may fall back once to
|
|
98
|
+
a cold invocation only before any formal start was attempted, with the same
|
|
99
|
+
persisted invocation identity and its remaining deadlines. This is not restart
|
|
100
|
+
reuse, a second billed model attempt, or a way around unknown effects. Cancellation,
|
|
101
|
+
expired invocation deadlines, incomplete cleanup, or untrusted output prevent that
|
|
102
|
+
fallback.
|
|
103
|
+
|
|
104
|
+
Creating the first preparation record advances `state.sessions.version` to **3**
|
|
105
|
+
and later operations retain that version. This storage compatibility marker makes
|
|
106
|
+
older engines reject a task whose cleanup responsibilities they cannot interpret.
|
|
107
|
+
The new engine still reads versions 1 and 2. `sessions.policy-version` remains 1;
|
|
108
|
+
worker and lifecycle protocols retain their separate version contracts. Do not
|
|
109
|
+
edit the storage version or delete receipts to force a downgrade.
|
|
110
|
+
|
|
47
111
|
## Accounting and budgets
|
|
48
112
|
|
|
49
113
|
Consumed invocations do not create another model request or call count. If an unknown invocation later yields trusted usage, Go appends an auditable correction tied to the same call, provider, original day, and lifetime totals. Recovery does not recreate an expired daily bucket.
|
|
@@ -54,7 +118,7 @@ Unknown is not zero. Rebuilds, role overrides, new workers, and Quick-to-Full tr
|
|
|
54
118
|
|
|
55
119
|
## Bounded context rebuilds
|
|
56
120
|
|
|
57
|
-
`sessions.roles` can override fresh/scoped independently for Plan, Execute, Review, and
|
|
121
|
+
`sessions.roles` can override fresh/scoped independently for Plan, Execute, Review, Judge, and judge-panel. Other roles inherit the global mode. See [session configuration](configuration.md#session-policy-history-reuse-and-invocation-safety).
|
|
58
122
|
|
|
59
123
|
Optional `sessions.quality` supports:
|
|
60
124
|
|
|
@@ -68,16 +132,34 @@ All thresholds default to disabled. They may rebuild only after the previous cal
|
|
|
68
132
|
|
|
69
133
|
A rebuild records its reason and generation and hands over current contracts, workspace, valid reports, verification, and structured feedback. It never imports another role's private transcript or issues an unmetered model-compression call. A returning Reviewer must still inspect the entire current candidate.
|
|
70
134
|
|
|
71
|
-
|
|
135
|
+
### Verified incremental inputs
|
|
136
|
+
|
|
137
|
+
Explicit `sessions.context:"verified-incremental"` permits Execute to reuse a
|
|
138
|
+
confirmed same-role stable contract after Go verifies that the consumed receipt
|
|
139
|
+
proves `dispatched` and `completed`, together with the prompt version, current
|
|
140
|
+
contract and readable context/cache file digests. A safe admission rejection or
|
|
141
|
+
failed/cancelled turn may preserve the old thread, but cannot prove delivery of
|
|
142
|
+
that turn's newly prepared authority; the next call resends full input. New
|
|
143
|
+
input carries feedback, candidate identities, attempt and references. Changed or
|
|
144
|
+
unavailable authority, legacy missing checkpoints and invalid context receipts
|
|
145
|
+
select full input. The decision and reason are saved on the role record. Review
|
|
146
|
+
and Judge keep full current inputs and never inherit Executor private history.
|
|
147
|
+
|
|
148
|
+
An opt-in [execution policy](configuration.md#bounded-execution-policy-opt-in)
|
|
149
|
+
can select another complete allowed binding. Every switch starts a new history
|
|
150
|
+
generation, including effort-only changes. Explicit session mode is also part
|
|
151
|
+
of the binding. Unknown/pending invocations reconcile first; fresh context cannot
|
|
152
|
+
authorize replaying uncertain effects. Switch records separate quality upgrades
|
|
153
|
+
from channel fallback and preserve the original task and packet budgets.
|
|
154
|
+
|
|
155
|
+
## Paired evaluation
|
|
72
156
|
|
|
73
157
|
The repository tools pin source and use an independent frozen oracle to compare fresh, Execute-only scoped, and role-scoped policies. The corpus covers first-pass success, L1 repair, Review return, long context, stop/resume, and configuration changes, with repeated trials and rotated strategy order. Reports retain quality, omissions, regressions, repair rounds, repeated findings, elapsed time, known/unknown tokens and cache use, rebuild reasons, and recovery failures. Actual state evidence determines whether a scenario occurred.
|
|
74
158
|
|
|
75
|
-
The offline native fixture exercises the real Go engine, worker v3, and public plugin API. It validates the evaluator and safety behavior, not model quality, cache rates, or savings. Real paired results require an available native CLI, account, permissions, and model. Defaults remain unchanged until that evidence exists. See the [
|
|
159
|
+
The offline native fixture exercises the real Go engine, worker v3, and public plugin API. It validates the evaluator and safety behavior, not model quality, cache rates, or savings. Real paired results require an available native CLI, account, permissions, and model. Defaults remain unchanged until that evidence exists. See the [paired evaluation guide](session-evaluation.md) for commands and report interpretation.
|
|
76
160
|
|
|
77
161
|
## Retention and operation
|
|
78
162
|
|
|
79
163
|
Recovery journals have private permissions, exclusive creation, identity/digest checks, and atomic persistence. Existing directories never authorize redispatch. They are task audit data and may contain model output and diagnostics; keep their access and backups with the task. Do not copy credentials or delete uncertain evidence during upgrades.
|
|
80
164
|
|
|
81
165
|
There is currently no automatic journal-retention timer. Archive evidence through the project's task lifecycle after completion or explicit resolution of an unknown result. Deleting a journal is not a recovery procedure. `control status` and doctor are observation surfaces; models and skills never write `state.json`. Resume through the normal Go entry point from the original task directory so the engine can reconcile before making a new call.
|
|
82
|
-
|
|
83
|
-
For shared-checkout execution, an Execute receipt fingerprints its declared write scope and binds that scope into the session identity. Independent peer changes do not discard a known invocation; changes within its own scope still reject stale receipts. L1, independent Review and collective delivery validate the entire combined candidate. Scoped receipts neither prove batch completion nor bypass unknown dispatch, outcome or cleanup.
|