fv-skills-baif 2.3.2 → 2.3.4

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 (78) hide show
  1. package/CHANGELOG.md +30 -0
  2. package/README.md +27 -7
  3. package/agents/fvs-crypto-thinker.md +27 -18
  4. package/bin/install.js +64 -35
  5. package/commands/fvs/aeneas-extract.md +21 -23
  6. package/commands/fvs/configure.md +159 -0
  7. package/commands/fvs/crypto-eval.md +52 -28
  8. package/commands/fvs/crypto-execute.md +14 -28
  9. package/commands/fvs/crypto-followup.md +21 -13
  10. package/commands/fvs/crypto-plan.md +26 -16
  11. package/commands/fvs/crypto-review.md +44 -23
  12. package/commands/fvs/fc-plan.md +10 -5
  13. package/commands/fvs/help.md +23 -12
  14. package/commands/fvs/lean-formalise.md +10 -15
  15. package/commands/fvs/lean-refactor.md +10 -15
  16. package/commands/fvs/lean-spec-review.md +26 -5
  17. package/commands/fvs/lean-specify.md +10 -15
  18. package/commands/fvs/lean-verify.md +10 -15
  19. package/commands/fvs/manage.md +3 -2
  20. package/commands/fvs/map-code.md +10 -19
  21. package/commands/fvs/natural-language.md +12 -2
  22. package/commands/fvs/reapply-patches.md +28 -21
  23. package/commands/fvs/sync-aeneas-verif.md +12 -13
  24. package/commands/fvs/trust-audit.md +11 -6
  25. package/fv-skills/VERSION +1 -1
  26. package/fv-skills/references/crypto-plan-review.md +10 -3
  27. package/fv-skills/references/fc-spec-review.md +4 -2
  28. package/fv-skills/references/model-profiles.md +252 -169
  29. package/fv-skills/references/review-diagnostics.md +10 -8
  30. package/fv-skills/templates/config.json +28 -4
  31. package/fv-skills/workflows/aeneas-extract.md +13 -5
  32. package/fv-skills/workflows/crypto-eval.md +34 -15
  33. package/fv-skills/workflows/crypto-execute.md +6 -3
  34. package/fv-skills/workflows/crypto-followup.md +4 -2
  35. package/fv-skills/workflows/crypto-plan.md +4 -2
  36. package/fv-skills/workflows/crypto-review.md +34 -14
  37. package/fv-skills/workflows/fc-plan.md +4 -5
  38. package/fv-skills/workflows/lean-formalise.md +4 -13
  39. package/fv-skills/workflows/lean-refactor.md +7 -13
  40. package/fv-skills/workflows/lean-spec-review.md +66 -42
  41. package/fv-skills/workflows/lean-specify.md +4 -13
  42. package/fv-skills/workflows/lean-verify.md +4 -13
  43. package/fv-skills/workflows/map-code.md +4 -14
  44. package/fv-skills/workflows/sync-aeneas-verif.md +8 -5
  45. package/fv-skills/workflows/trust-audit.md +13 -4
  46. package/package.json +11 -3
  47. package/pi/skills/fvs-aeneas/SKILL.md +23 -0
  48. package/pi/skills/fvs-aeneas-extract/SKILL.md +224 -0
  49. package/pi/skills/fvs-checkpoint/SKILL.md +154 -0
  50. package/pi/skills/fvs-configure/SKILL.md +160 -0
  51. package/pi/skills/fvs-context/SKILL.md +22 -0
  52. package/pi/skills/fvs-crypto-eval/SKILL.md +204 -0
  53. package/pi/skills/fvs-crypto-execute/SKILL.md +218 -0
  54. package/pi/skills/fvs-crypto-followup/SKILL.md +272 -0
  55. package/pi/skills/fvs-crypto-plan/SKILL.md +322 -0
  56. package/pi/skills/fvs-crypto-review/SKILL.md +162 -0
  57. package/pi/skills/fvs-fc/SKILL.md +31 -0
  58. package/pi/skills/fvs-fc-plan/SKILL.md +289 -0
  59. package/pi/skills/fvs-formalise/SKILL.md +37 -0
  60. package/pi/skills/fvs-help/SKILL.md +457 -0
  61. package/pi/skills/fvs-kb-setup/SKILL.md +322 -0
  62. package/pi/skills/fvs-lean-formalise/SKILL.md +397 -0
  63. package/pi/skills/fvs-lean-refactor/SKILL.md +293 -0
  64. package/pi/skills/fvs-lean-spec-review/SKILL.md +61 -0
  65. package/pi/skills/fvs-lean-specify/SKILL.md +424 -0
  66. package/pi/skills/fvs-lean-verify/SKILL.md +461 -0
  67. package/pi/skills/fvs-manage/SKILL.md +29 -0
  68. package/pi/skills/fvs-map-code/SKILL.md +349 -0
  69. package/pi/skills/fvs-natural-language/SKILL.md +220 -0
  70. package/pi/skills/fvs-pause-work/SKILL.md +154 -0
  71. package/pi/skills/fvs-reapply-patches/SKILL.md +27 -0
  72. package/pi/skills/fvs-resume-work/SKILL.md +96 -0
  73. package/pi/skills/fvs-sync-aeneas-verif/SKILL.md +235 -0
  74. package/pi/skills/fvs-trust-audit/SKILL.md +234 -0
  75. package/pi/skills/fvs-update/SKILL.md +24 -0
  76. package/scripts/build-plugin.cjs +128 -6
  77. package/scripts/fvs-codex-think.mjs +128 -54
  78. package/scripts/fvs-spec-review.mjs +135 -39
@@ -160,23 +160,16 @@ mkdir -p "$PROOF_ENG_ROOT/lessons/fc" "$PROOF_ENG_ROOT/lessons/crypto" \
160
160
  cp ~/.claude/fv-skills/templates/proof-engineering-index.md "$PROOF_ENG_INDEX"
161
161
  ```
162
162
 
163
- ## Step 3: Read Config and Resolve Models
163
+ ## Step 3: Read Config and Resolve Models + Effort
164
164
 
165
- Read the project config to determine which models to use for subagent dispatch:
165
+ Read the complete config and apply `model-profiles.md`. This command declares `fc_proof_plan` for
166
+ the structure/planning `fvs-researcher` and `fc_spec` for the Lean-definition/spec-authoring
167
+ `fvs-executor`. Resolve each stage independently; do not choose tiers from the shared agent names.
166
168
 
167
- ```bash
168
- CONFIG=$(cat .formalising/fvs-config.json 2>/dev/null || echo '{"model_profile":"quality","model_overrides":{}}')
169
- ```
170
-
171
- Resolve models using the profile table from `fv-skills/references/model-profiles.md`:
172
-
173
- 1. Parse `model_profile` from config (default: `"quality"`)
174
- 2. Check `model_overrides` for `"fvs-researcher"` and `"fvs-executor"`
175
- 3. If no override, look up profile table:
176
- - quality: fvs-researcher=inherit, fvs-executor=inherit
177
- - balanced: fvs-researcher=sonnet, fvs-executor=sonnet
178
- - budget: fvs-researcher=haiku, fvs-executor=sonnet
179
- 4. Store resolved models as `RESEARCH_MODEL` and `EXECUTOR_MODEL`
169
+ Before dispatch, show one command-level selection manifest containing both authority stages and
170
+ obtain confirmation. Offer one-run adjustment, exact-stage Save override, notes that rebuild and
171
+ reconfirm the manifest, and Cancel. Missing preferred models or unsupported efforts prompt
172
+ interactively; noninteractive unresolved choices fail before dispatch with exact remediation.
180
173
 
181
174
  ## Step 4: Read Reference Files for Inlining
182
175
 
@@ -208,6 +201,7 @@ If no Aeneas markers: skip aeneas-patterns (paper track may be pure math, not Ae
208
201
  Task(
209
202
  subagent_type="fvs-researcher",
210
203
  model="$RESEARCH_MODEL",
204
+ reasoning_effort="$RESEARCH_EFFORT", // when supported; otherwise apply the capability gate
211
205
  description="Research context for formalisation: $TASK_DESCRIPTION",
212
206
  prompt="Research mode: formalise
213
207
 
@@ -284,6 +278,7 @@ Use AskUserQuestion. If user adjusts: incorporate feedback before dispatching ex
284
278
  Task(
285
279
  subagent_type="fvs-executor",
286
280
  model="$EXECUTOR_MODEL",
281
+ reasoning_effort="$EXECUTOR_EFFORT", // when supported; otherwise apply the capability gate
287
282
  description="Create Lean files for formalisation: $TASK_DESCRIPTION",
288
283
  prompt="Execute mode: formalise
289
284
 
@@ -112,23 +112,16 @@ TACTIC_LINES=$(grep -cE "^\s+(unfold|step|simp|agrind|scalar_tac|ring|field_simp
112
112
  echo "Baseline: $TOTAL_LINES lines, $THEOREM_COUNT theorems, $TACTIC_LINES tactic lines"
113
113
  ```
114
114
 
115
- ## Step 3: Read Config and Resolve Models
115
+ ## Step 3: Read Config and Resolve Models + Effort
116
116
 
117
- Read the project config to determine which models to use for subagent dispatch:
117
+ Read the complete config and apply `model-profiles.md`. Declare `research` for
118
+ `fvs-researcher` and `lean_refactor` for `fvs-lean-refactorer`; resolve both stages independently
119
+ rather than deriving tiers from agent names.
118
120
 
119
- ```bash
120
- CONFIG=$(cat .formalising/fvs-config.json 2>/dev/null || echo '{"model_profile":"quality","model_overrides":{}}')
121
- ```
122
-
123
- Resolve models using the profile table from `fv-skills/references/model-profiles.md`:
124
-
125
- 1. Parse `model_profile` from config (default: `"quality"`)
126
- 2. Check `model_overrides` for `"fvs-researcher"` and `"fvs-lean-refactorer"`
127
- 3. If no override, look up profile table:
128
- - quality: fvs-researcher=inherit, fvs-lean-refactorer=inherit
129
- - balanced: fvs-researcher=sonnet, fvs-lean-refactorer=sonnet
130
- - budget: fvs-researcher=haiku, fvs-lean-refactorer=sonnet
131
- 4. Store resolved models as `RESEARCH_MODEL` and `REFACTORER_MODEL`
121
+ Before dispatch, show one command-level selection manifest with both stages and obtain confirmation.
122
+ Offer one-run adjustment, exact-stage Save override, notes that rebuild and reconfirm the manifest,
123
+ and Cancel. Missing preferred models or unsupported efforts prompt interactively; noninteractive
124
+ unresolved choices fail before dispatch with exact remediation.
132
125
 
133
126
  ## Step 4: Read Reference Files for Inlining
134
127
 
@@ -148,6 +141,7 @@ All three must be captured as content strings for inlining into subagent prompts
148
141
  Task(
149
142
  subagent_type="fvs-researcher",
150
143
  model="$RESEARCH_MODEL",
144
+ reasoning_effort="$RESEARCH_EFFORT", // when supported; otherwise apply the capability gate
151
145
  description="Research refactoring context for $SPEC_FILE",
152
146
  prompt="Research mode: lean-refactor
153
147
 
@@ -201,6 +195,7 @@ WHILE PASS < MAX_PASSES:
201
195
  Task(
202
196
  subagent_type="fvs-lean-refactorer",
203
197
  model="$REFACTORER_MODEL",
198
+ reasoning_effort="$REFACTORER_EFFORT", // when supported; otherwise apply the capability gate
204
199
  description="Refactor {theorem_name} pass {PASS+1}",
205
200
  prompt="<refactoring_reference>$LEAN_REFACTORING_CONTENT</refactoring_reference>
206
201
  <research_findings>$RESEARCH_OUTPUT</research_findings>
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  name: fvs:lean-spec-review
3
3
  description: Adversarially review an FC Lean specification with a chosen runtime, model, and effort
4
- argument-hint: "<spec.lean> [--reviewer codex|claude|other] [--model ID] [--effort LEVEL]"
4
+ argument-hint: "<spec.lean> [--reviewer codex|claude|pi|other] [--model ID] [--effort LEVEL]"
5
5
  allowed-tools:
6
6
  - Read
7
7
  - Bash
@@ -20,6 +20,7 @@ runtime, model, and effort menu; preserve the spec and record the review and fin
20
20
  <execution_context>
21
21
  @~/.claude/fv-skills/workflows/lean-spec-review.md
22
22
  @~/.claude/fv-skills/references/fc-spec-review.md
23
+ @~/.claude/fv-skills/references/model-profiles.md
23
24
  </execution_context>
24
25
 
25
26
  <process>
@@ -27,10 +28,30 @@ Follow the review workflow with `$ARGUMENTS`. Explicit invocation always runs th
27
28
  even when `spec_review.automatic` is false. Automatic invocation from `lean-specify` enters the
28
29
  same workflow after generation checks, with the resolved spec/source paths and author runtime.
29
30
 
30
- Honor explicit reviewer/model/effort choices. Supplying all three standalone flags is the
31
- non-interactive path; otherwise ask only for missing choices in order: reviewer -> model -> effort.
32
- Automatic callers record `Skip review` exactly as `Unreviewed (user skipped)` and do not auto-start
33
- proof work.
31
+ Declare authority stage `spec_review` and apply `model-profiles.md`. Precedence is explicit one-run
32
+ flags, non-null `spec_review.reviewer` / `spec_review.model` / `spec_review.effort`, then the quality
33
+ opposite-runtime recommendation. Null saved values keep profile routing active.
34
+
35
+ Detect the specification authoring runtime. Recommend an authenticated opposite provider/runtime:
36
+ OpenAI/Codex-authored specs use Claude Code CLI; Claude-authored specs use a fresh
37
+ provider-qualified OpenAI Pi seat when running in Pi, then Codex CLI. Unknown authors receive an
38
+ explicit reviewer menu without an independence claim. Never route a Claude Code subscription
39
+ through Pi. The `pi` reviewer is available only inside Pi with a provider-qualified model from its
40
+ live authenticated catalog and a fresh-child facility that can honor and report the exact per-child
41
+ model/effort. It launches a fresh read-only child, never a manual Other packet. Persistence requires
42
+ the workflow's completed-child receipt with actual run ID/model/effort and packet/response hashes;
43
+ missing capability or evidence leaves the review pending.
44
+
45
+ Build one review selection manifest containing reviewer runner, provenance, exact catalog model,
46
+ and effort. Confirm it before launch with Continue once, Adjust once, Save override, or Cancel;
47
+ retain notes. Notes rebuild the manifest and require reconfirmation. Save writes only the
48
+ `spec_review` object. Offer every effort value the selected model/provider reports as supported.
49
+ Missing models or unsupported efforts ask for one-run/save/cancel; unresolved noninteractive
50
+ choices fail before launch with exact remediation.
51
+
52
+ If no opposite runner is authenticated, ask among setup/retry, fresh same-runtime review, Other
53
+ handoff, one-run skip, or cancel; never switch silently. A one-run skip records exactly
54
+ `Unreviewed (user skipped)`, stops at the review boundary, and does not auto-start proof work.
34
55
 
35
56
  The reviewer is read-only; the `lean-specify` authoring seat keeps `review.md` unchanged and writes
36
57
  separate `triage.md` with finding IDs, old/new hashes (pre-edit/post-edit), and rerun structure,
@@ -112,23 +112,16 @@ if [ "$CACHE_STATUS" -ne 0 ]; then
112
112
  fi
113
113
  ```
114
114
 
115
- ## Step 3: Read Config and Resolve Models
115
+ ## Step 3: Read Config and Resolve Models + Effort
116
116
 
117
- Read the project config to determine which models to use for subagent dispatch:
117
+ Read the complete config and apply `model-profiles.md`. Declare `research` for the implementation
118
+ analysis `fvs-researcher` and `fc_spec` for the specification-authoring `fvs-executor`. Resolve both
119
+ stages independently rather than deriving tiers from shared agent names.
118
120
 
119
- ```bash
120
- CONFIG=$(cat .formalising/fvs-config.json 2>/dev/null || echo '{"model_profile":"quality","model_overrides":{}}')
121
- ```
122
-
123
- Resolve models using the profile table from `fv-skills/references/model-profiles.md`:
124
-
125
- 1. Parse `model_profile` from config (default: `"quality"`)
126
- 2. Check `model_overrides` for `"fvs-researcher"` and `"fvs-executor"`
127
- 3. If no override, look up profile table:
128
- - quality: fvs-researcher=inherit, fvs-executor=inherit
129
- - balanced: fvs-researcher=sonnet, fvs-executor=sonnet
130
- - budget: fvs-researcher=haiku, fvs-executor=sonnet
131
- 4. Store resolved models as `RESEARCH_MODEL` and `EXECUTOR_MODEL`
121
+ Before dispatch, show one command-level selection manifest with both stages and obtain confirmation.
122
+ Offer one-run adjustment, exact-stage Save override, notes that rebuild and reconfirm the manifest,
123
+ and Cancel. Missing preferred models or unsupported efforts prompt interactively; noninteractive
124
+ unresolved choices fail before dispatch with exact remediation.
132
125
 
133
126
  ## Step 4: Discover and Load the Target Style Guide
134
127
 
@@ -174,6 +167,7 @@ target style guide from Step 4 must be inlined separately into BOTH prompts.
174
167
  Task(
175
168
  subagent_type="fvs-researcher",
176
169
  model="$RESEARCH_MODEL",
170
+ reasoning_effort="$RESEARCH_EFFORT", // when supported; otherwise apply the capability gate
177
171
  description="Research context for spec generation of $FUNCTION_NAME",
178
172
  prompt="Research mode: spec-generation
179
173
 
@@ -230,6 +224,7 @@ Parse the returned research findings for use by the executor.
230
224
  Task(
231
225
  subagent_type="fvs-executor",
232
226
  model="$EXECUTOR_MODEL",
227
+ reasoning_effort="$EXECUTOR_EFFORT", // when supported; otherwise apply the capability gate
233
228
  description="Generate spec for $FUNCTION_NAME",
234
229
  prompt="Execute mode: spec-generation
235
230
 
@@ -115,23 +115,16 @@ if [ "$CACHE_STATUS" -ne 0 ]; then
115
115
  fi
116
116
  ```
117
117
 
118
- ## Step 2: Read Config and Resolve Models
118
+ ## Step 2: Read Config and Resolve Models + Effort
119
119
 
120
- Read the project config to determine which models to use for subagent dispatch:
120
+ Read the complete config and apply `model-profiles.md`. Declare `fc_proof_plan` for the proof
121
+ strategy `fvs-researcher` and `fc_proof_execution` for the proving `fvs-executor`. Resolve both
122
+ stages independently rather than deriving tiers from shared agent names.
121
123
 
122
- ```bash
123
- CONFIG=$(cat .formalising/fvs-config.json 2>/dev/null || echo '{"model_profile":"quality","model_overrides":{}}')
124
- ```
125
-
126
- Resolve models using the profile table from `fv-skills/references/model-profiles.md`:
127
-
128
- 1. Parse `model_profile` from config (default: `"quality"`)
129
- 2. Check `model_overrides` for `"fvs-researcher"` and `"fvs-executor"`
130
- 3. If no override, look up profile table:
131
- - quality: fvs-researcher=inherit, fvs-executor=inherit
132
- - balanced: fvs-researcher=sonnet, fvs-executor=sonnet
133
- - budget: fvs-researcher=haiku, fvs-executor=sonnet
134
- 4. Store resolved models as `RESEARCH_MODEL` and `EXECUTOR_MODEL`
124
+ Before dispatch, show one command-level selection manifest with both stages and obtain confirmation.
125
+ Offer one-run adjustment, exact-stage Save override, notes that rebuild and reconfirm the manifest,
126
+ and Cancel. Missing preferred models or unsupported efforts prompt interactively; noninteractive
127
+ unresolved choices fail before dispatch with exact remediation.
135
128
 
136
129
  ## Step 3: Discover the Target Style Guide and Capture a Baseline
137
130
 
@@ -212,6 +205,7 @@ grep -E "@\[step\]|theorem " "$SPEC_PATH"
212
205
  Task(
213
206
  subagent_type="fvs-researcher",
214
207
  model="$RESEARCH_MODEL",
208
+ reasoning_effort="$RESEARCH_EFFORT", // when supported; otherwise apply the capability gate
215
209
  description="Research proof context for $SPEC_FILE",
216
210
  prompt="Research mode: proof-attempt
217
211
 
@@ -286,6 +280,7 @@ FOR EACH SORRY (in recommended order from research):
286
280
  Task(
287
281
  subagent_type="fvs-executor",
288
282
  model="$EXECUTOR_MODEL",
283
+ reasoning_effort="$EXECUTOR_EFFORT", // when supported; otherwise apply the capability gate
289
284
  description="Prove sorry {N} in $SPEC_FILE",
290
285
  prompt="Execute mode: proof-attempt
291
286
 
@@ -1,11 +1,11 @@
1
1
  ---
2
2
  name: fvs:manage
3
- description: "management | help update checkpoint pause resume patches kb"
3
+ description: "management | help configure update checkpoint pause resume patches kb"
4
4
  argument-hint: ""
5
5
  allowed-tools:
6
6
  - Read
7
7
  - Skill
8
- requires: [help, update, checkpoint, pause-work, resume-work, reapply-patches, kb-setup]
8
+ requires: [help, configure, update, checkpoint, pause-work, resume-work, reapply-patches, kb-setup]
9
9
  ---
10
10
 
11
11
  Route to the appropriate management skill based on the user's intent.
@@ -15,6 +15,7 @@ When invoked WITH a request, match it against the table below and invoke the mat
15
15
  | User wants | Invoke |
16
16
  |---|---|
17
17
  | Show the FVS command reference | fvs:help |
18
+ | Configure subagent models, effort, and review defaults | fvs:configure |
18
19
  | Update FVS to the latest version | fvs:update |
19
20
  | Checkpoint current verification progress | fvs:checkpoint |
20
21
  | Pause work and write a handoff doc | fvs:pause-work |
@@ -95,26 +95,15 @@ If .formalising/ already exists, ask user whether to refresh CODEMAP.md or abort
95
95
 
96
96
  ## Step 3: Read config and resolve models
97
97
 
98
- Read the project config to determine which models to use for subagent dispatch:
98
+ Read the complete config and apply `model-profiles.md`. Both the read-only researcher and the
99
+ map-writing executor use stage key `map_code`: the output is a code map, not authority or proof
100
+ execution. Resolve one stage selection and reuse it for both agents unless an explicit one-run
101
+ adjustment says otherwise.
99
102
 
100
- ```bash
101
- CONFIG=$(cat .formalising/fvs-config.json 2>/dev/null)
102
- ```
103
-
104
- If config exists, extract `model_profile` and `model_overrides`.
105
- If config is missing, use defaults: `model_profile = "quality"`, no overrides.
106
-
107
- **Resolve models from profile table** (see fv-skills/references/model-profiles.md):
108
-
109
- For `fvs-researcher`:
110
- - Check `model_overrides["fvs-researcher"]` first
111
- - Otherwise use profile table: quality=inherit, balanced=sonnet, budget=haiku
112
-
113
- For `fvs-executor`:
114
- - Check `model_overrides["fvs-executor"]` first
115
- - Otherwise use profile table: quality=inherit, balanced=sonnet, budget=sonnet
116
-
117
- Store resolved models as `$RESEARCH_MODEL` and `$EXECUTOR_MODEL`.
103
+ Before dispatch, show and confirm the command-level selection manifest. Offer one-run adjustment,
104
+ exact-stage Save override, notes that rebuild and reconfirm the manifest, and Cancel. Missing
105
+ preferred models or unsupported efforts prompt interactively; noninteractive unresolved choices
106
+ fail before dispatch with exact remediation.
118
107
 
119
108
  ## Step 4: Generate the canonical function inventory
120
109
 
@@ -200,6 +189,7 @@ Spawn the research subagent to annotate the canonical functions:
200
189
  Task(
201
190
  subagent_type="fvs-researcher",
202
191
  model="$RESEARCH_MODEL",
192
+ reasoning_effort="$RESEARCH_EFFORT", // when supported; otherwise apply the capability gate
203
193
  description="Map codebase dependencies",
204
194
  prompt="Research mode: map-code
205
195
 
@@ -264,6 +254,7 @@ Spawn the executor subagent with research findings:
264
254
  Task(
265
255
  subagent_type="fvs-executor",
266
256
  model="$EXECUTOR_MODEL",
257
+ reasoning_effort="$EXECUTOR_EFFORT", // when supported; otherwise apply the capability gate
267
258
  description="Write CODEMAP.md",
268
259
  prompt="Execute mode: map-code
269
260
 
@@ -71,9 +71,17 @@ Or run /fvs:map-code to build the function index.
71
71
 
72
72
  Wait for user clarification.
73
73
 
74
- ## Step 2: Read Reference Files for Agent Dispatch
74
+ ## Step 2: Resolve Runtime Settings and Read References
75
75
 
76
- Read the three reference files. These MUST be inlined into the Task() prompt because @-references do NOT cross Task boundaries.
76
+ Read `fv-skills/references/model-profiles.md` and declare stage key `explain` for
77
+ `fvs-explainer`. Resolve the exact runtime/provider model and effort through the canonical
78
+ precedence. Before dispatch, show and confirm the command-level selection manifest. Offer one-run
79
+ adjustment, exact-stage Save override, notes that rebuild and reconfirm the manifest, and Cancel.
80
+ Missing preferred models or unsupported efforts prompt interactively; noninteractive unresolved
81
+ choices fail before dispatch with exact remediation.
82
+
83
+ Read the three domain reference files. These MUST be inlined into the Task() prompt because
84
+ @-references do NOT cross Task boundaries.
77
85
 
78
86
  ```bash
79
87
  AENEAS_PATTERNS=$(cat ~/.claude/fv-skills/references/aeneas-patterns.md)
@@ -101,6 +109,8 @@ Display dispatch indicator:
101
109
 
102
110
  ```
103
111
  Task(
112
+ model="$EXPLAINER_MODEL",
113
+ reasoning_effort="$EXPLAINER_EFFORT", // when supported; otherwise apply the capability gate
104
114
  prompt="Analyze function for natural-language explanation.
105
115
 
106
116
  <rust_module>
@@ -21,16 +21,19 @@ manifest. For local installs this is under the project runtime directory; for
21
21
  global installs use that runtime’s configured root (including custom config roots).
22
22
  Do not search unrelated runtimes or prefer a global backup over the active local one.
23
23
 
24
- Read `backup-meta.json` from the patches directory. For version 2, resolve its `bundle`
25
- relative to that directory (strictly `bundles/bundle-<id>`). This immutable bundle is
26
- the source for the file copies below. Legacy metadata refers to the flat directory.
24
+ Read `backup-meta.json` from the patches directory. For version 2 or 3, resolve its `bundle`
25
+ relative to that directory (strictly `bundles/bundle-<id>`). This immutable bundle is the source
26
+ for file copies below. Version 3 uses `pending` as the active reapply set and keeps `files` as the
27
+ historical bundle inventory; version 2 treats every `files` entry as pending. Legacy metadata refers
28
+ to the flat directory.
27
29
  Check canonical paths remain inside the selected installation and reject symlinks.
28
30
 
29
- Before merging, enumerate every file in the bundle, excluding its `backup-meta.json`.
30
- Compare the enumeration with `files` and verify `hashes` when present. Report every
31
- unlisted file and every missing or changed entry; never silently omit them. Stop for
32
- user inspection on missing/changed entries. Offer unlisted legacy files for recovery.
33
- Older immutable bundles and legacy flat copies remain available for inspection.
31
+ Before merging, enumerate every file in the bundle, excluding its `backup-meta.json`. Compare the
32
+ enumeration with historical `files` and verify `hashes` when present. Report every unlisted file and
33
+ every missing or changed entry; never silently omit them. Stop for user inspection on
34
+ missing/changed entries. Offer unlisted legacy files for recovery. Process only `pending` (or
35
+ version-2 `files`) as active patches. Older immutable bundles and resolved entries remain available
36
+ for inspection without being copied into the next active set.
34
37
 
35
38
  **If no patches found:**
36
39
  ```
@@ -58,7 +61,7 @@ Exit.
58
61
 
59
62
  ## Step 3: Merge each file
60
63
 
61
- For each file in `backup-meta.json`:
64
+ For each active file in `pending` (or version-2 `files`):
62
65
 
63
66
  1. **Read the backed-up version** (user's modified copy from `fvs-local-patches/`)
64
67
  2. **Read the newly installed version** (current file after update)
@@ -88,21 +91,24 @@ For each file in `backup-meta.json`:
88
91
  - `Skipped` -- modification already in upstream
89
92
  - `Conflict` -- user chose resolution
90
93
 
91
- ## Step 4: Update manifest
94
+ ## Step 4: Retire processed active entries
92
95
 
93
- After reapplying, note that the manifest will be regenerated on the next `/fvs:update`:
96
+ After each file reaches a final outcome (`Merged`, `Skipped (already upstream)`, or an explicit
97
+ choice to keep the new upstream file), atomically rewrite the top-level `backup-meta.json` as
98
+ version 3 with that path removed from `pending`. Preserve `bundle`, historical `files`, `hashes`,
99
+ `kinds`, and the immutable bundle contents. A conflict the user defers remains pending.
94
100
 
95
- ```bash
96
- # The manifest will be regenerated on next /fvs:update
97
- # For now, just note which files were modified
98
- ```
101
+ When `pending` becomes empty, keep the pointer with `pending: []` so the selected bundle remains
102
+ historical evidence. The next update must not reactivate or copy those resolved entries. A newly
103
+ modified installed file will still be detected independently against `fvs-file-manifest.json`.
99
104
 
100
105
  ## Step 5: Cleanup option
101
106
 
102
107
  Ask user:
103
- - "Keep patch backups for reference?" -- preserve `fvs-local-patches/`
104
- - "Clean up selected patch bundle?" -- name the exact bundle; delete it only after
105
- explicit approval, without deleting older bundles or dangling the active pointer.
108
+ - "Keep patch backups for reference?" -- preserve `fvs-local-patches/`; this never keeps resolved
109
+ entries active.
110
+ - "Clean up selected patch bundle?" -- only when its `pending` set is empty; name the exact bundle
111
+ and delete it after explicit approval without deleting older bundles or dangling the pointer.
106
112
 
107
113
  ## Step 6: Report
108
114
 
@@ -121,8 +127,9 @@ Ask user:
121
127
  </process>
122
128
 
123
129
  <success_criteria>
124
- - [ ] All backed-up patches processed
125
- - [ ] User modifications merged into new version
126
- - [ ] Conflicts resolved with user input
130
+ - [ ] Every active pending patch processed or explicitly left pending
131
+ - [ ] User modifications merged into the new version
132
+ - [ ] Resolved/upstream-chosen entries removed from `pending` without deleting historical bundles
133
+ - [ ] Conflicts resolved with user input or kept pending
127
134
  - [ ] Status reported for each file
128
135
  </success_criteria>
@@ -90,18 +90,14 @@ of every normal runtime install. If the preflight fails, STOP before all later s
90
90
 
91
91
  ## Step 1: Read config and resolve subagent model
92
92
 
93
- Read the project config and resolve the model for the `fvs-doc-syncer` dispatch using the
94
- model-profiles dispatch sequence (config `model_overrides` first, then the profile table, then
95
- `inherit` for unknown agents):
93
+ Read the complete config and apply `model-profiles.md`. Declare stage key `doc_sync` for every
94
+ `fvs-doc-syncer` mode and resolve one exact runtime/provider model+effort selection.
96
95
 
97
- ```bash
98
- CONFIG=$(cat .formalising/fvs-config.json 2>/dev/null)
99
- # profile = config.model_profile || "balanced"
100
- # SYNCER_MODEL = model_overrides["fvs-doc-syncer"] ?? PROFILE_TABLE["fvs-doc-syncer"][profile]
101
- ```
102
-
103
- On Codex (which does not support dynamic model selection) the `model=` parameter is silently
104
- ignored; the dispatches work unchanged.
96
+ Before the first dispatch, show and confirm the command-level selection manifest. Offer one-run
97
+ adjustment, exact-stage Save override, notes that rebuild and reconfirm the manifest, and Cancel.
98
+ Missing preferred models or unsupported efforts prompt interactively; noninteractive unresolved
99
+ choices fail before dispatch with exact remediation. Pass only native fields the selected runtime
100
+ actually supports.
105
101
 
106
102
  ## Step 2: Resolve the local clones (config -> auto-detect -> prompt -> error)
107
103
 
@@ -159,6 +155,7 @@ the `tactic_renames` table (the parent inlines all reference content; the worker
159
155
 
160
156
  ```
161
157
  Task(subagent_type="fvs-doc-syncer", model="$SYNCER_MODEL",
158
+ reasoning_effort="$SYNCER_EFFORT", // when supported; otherwise apply the capability gate
162
159
  description="Sync tactics + Lean-syntax docs (mode a)",
163
160
  prompt="<sync_mode>tactics-lean-syntax</sync_mode>
164
161
  ...inlined _sync-meta.json mapping + tactic_renames + snapshot SHA + the
@@ -178,6 +175,7 @@ extraction doc targets and the current `blocker-catalog.md` seed:
178
175
 
179
176
  ```
180
177
  Task(subagent_type="fvs-doc-syncer", model="$SYNCER_MODEL",
178
+ reasoning_effort="$SYNCER_EFFORT", // when supported; otherwise apply the capability gate
181
179
  description="Sync extraction docs + reconcile blocker catalog (mode b)",
182
180
  prompt="<sync_mode>extraction-docs</sync_mode>
183
181
  ...Charon docs/{what_charon_translates,transformations,limitations}.md + README.md +
@@ -219,8 +217,9 @@ On Codex, every interactive HALT in this command -- the clone-path prompt (Step
219
217
  propose-each approval the workers surface -- degrades to a plain-text question and WAITS for the
220
218
  user. It is fail-closed: it never auto-picks a default, never auto-applies a change, and never
221
219
  fetches or opens an upstream artifact without the read-only fetch being explicitly part of the sync.
222
- The `Task(...)` dispatches survive intact (the `model=` parameter is silently ignored on Codex, per
223
- model-profiles runtime handling).
220
+ Before dispatch on Codex, apply the model-profile capability gate: confirm only the actual
221
+ active/inherited model and applicable effort, or fail before dispatch. Never silently ignore a
222
+ confirmed field.
224
223
  </codex_skill_adapter>
225
224
 
226
225
  <success_criteria>
@@ -55,8 +55,7 @@ project-defs paths with the precedence config -> auto-detect -> prompt -> error,
55
55
 
56
56
  ```bash
57
57
  CONFIG=$(cat .formalising/fvs-config.json 2>/dev/null)
58
- # profile = config.model_profile || "balanced"
59
- # model = model_overrides["fvs-axiom-auditor"] ?? PROFILE_TABLE["fvs-axiom-auditor"][profile]
58
+ # Resolve stage `trust_audit` for fvs-axiom-auditor through model-profiles.md.
60
59
  ```
61
60
 
62
61
  The target is UNTRUSTED input flowing into path expansion and a `lake` / `lake env lean`
@@ -134,11 +133,16 @@ Never fall back to grep/model enumeration; models never discover, add, remove, o
134
133
 
135
134
  ## Step 4: Resolve the auditor model + dispatch the read-only auditor
136
135
 
137
- Resolve `$AUDITOR_MODEL` for `fvs-axiom-auditor` from the profile table (auditor:
138
- quality=inherit, balanced=sonnet, budget=haiku), then dispatch:
136
+ Resolve `$AUDITOR_MODEL` and `$AUDITOR_EFFORT` for `fvs-axiom-auditor` with stage key
137
+ `trust_audit` through `model-profiles.md`. Before dispatch, show and confirm the command-level
138
+ selection manifest. Offer one-run adjustment, exact-stage Save override, notes that rebuild and
139
+ reconfirm the manifest, and Cancel. Missing preferred models or unsupported efforts prompt
140
+ interactively; noninteractive unresolved choices fail before dispatch with exact remediation.
141
+ Pass validated native fields, then dispatch:
139
142
 
140
143
  ```
141
144
  Task(subagent_type="fvs-axiom-auditor", model="$AUDITOR_MODEL",
145
+ reasoning_effort="$AUDITOR_EFFORT", // when supported; otherwise apply the capability gate
142
146
  description="Introspect #print axioms over canonical functions",
143
147
  prompt="Target: $TARGET
144
148
 
@@ -214,8 +218,9 @@ Table: .formalising/audits/<target>.md
214
218
  On Codex, every interactive HALT in this command -- the build-precondition HALT (Step 2) and any
215
219
  justification prompt at the gate (Step 5) -- degrades to a plain-text question and WAITS for the
216
220
  user. It is fail-closed: it never auto-justifies an axiom, never self-clears the NOT-CLEAN gate,
217
- and never produces a CLEAN verdict without a green build. The `Task(...)` dispatch survives intact
218
- (the `model=` parameter is silently ignored on Codex, per model-profiles runtime handling).
221
+ and never produces a CLEAN verdict without a green build. Before dispatch on Codex, apply the
222
+ model-profile capability gate: confirm only the actual active/inherited model and applicable
223
+ effort, or fail before dispatch. Never silently ignore a confirmed field.
219
224
  </codex_skill_adapter>
220
225
 
221
226
  <success_criteria>
package/fv-skills/VERSION CHANGED
@@ -1 +1 @@
1
- 2.3.2
1
+ 2.3.4
@@ -65,7 +65,9 @@ specify a stricter order, use:
65
65
  4. The plan documents under review.
66
66
 
67
67
  On conflict, the earlier item wins. Missing or ambiguous authority is itself a finding when the
68
- plan makes a normative mathematical choice.
68
+ plan makes a normative mathematical choice. When the project names a practical reference
69
+ implementation, use it to settle details the mathematics leaves open (for example field names or
70
+ return order); it never overrides definitions, equations, or other mathematical authority.
69
71
 
70
72
  </authority>
71
73
 
@@ -103,8 +105,10 @@ Work through every applicable item and record both findings and cleared surfaces
103
105
  surface regresses, and the follow-up stays bounded to the named defects.
104
106
  10. **Reuse audit and scope economy.** Judge the explicit `## Reuse audit` against
105
107
  the supplied grounding inventory. Missing reuse analysis is a MAJOR CONTENT
106
- finding. Check new abstractions against existing project and pinned-upstream
107
- signatures, and apply the appended shared reuse/scope policy.
108
+ finding. Check whether the same concept already exists in the project; following an external
109
+ specification is not itself a reason to duplicate it. Apply the appended shared reuse/scope
110
+ policy. Detailed tables have one canonical copy; other locations reference it rather than
111
+ reproducing rows that can drift.
108
112
 
109
113
  </attack_surface>
110
114
 
@@ -140,6 +144,9 @@ End with exactly one verdict:
140
144
  - **APPROVE-WITH-EDITS** — no BLOCKER; the named bounded edits are sufficient before dispatch.
141
145
  - **REJECT** — any BLOCKER, or MAJOR findings that require re-planning rather than bounded edits.
142
146
 
147
+ `REJECT` and `APPROVE-WITH-EDITS` require at least one finding. An empty Findings section is valid
148
+ only with `APPROVE`.
149
+
143
150
  </severities_and_verdict>
144
151
 
145
152
  <output_contract>
@@ -41,7 +41,8 @@ Check every applicable surface:
41
41
  The implementation is the source of truth; library convenience must not change its semantics.
42
42
 
43
43
  Give each finding an ID, severity (BLOCKER, MAJOR, MINOR), a precise claim, reproducible `path:line`
44
- evidence or a concrete counterexample, and a minimal suggested change. Combine duplicate symptoms.
44
+ evidence or a concrete counterexample, and a minimal suggested change. `OBSERVATION` is not a
45
+ supported FC severity. Combine duplicate symptoms.
45
46
  Do not invent findings to satisfy a quota. Explain which surfaces were checked and which remain
46
47
  unverified; a blanket approval is insufficient.
47
48
 
@@ -78,7 +79,8 @@ Choose **PASS** only when the statement has adequate source/intent coverage and
78
79
  semantic corrections remain. Choose **APPROVE-WITH-EDITS** only when every necessary change can be
79
80
  named exhaustively as a bounded edit and no missing authority remains. Use **REVISE** for
80
81
  substantive statement correction and **BLOCKED** for missing or ambiguous evidence. Findings may be
81
- empty, but Coverage and Evidence remain substantive.
82
+ empty only for PASS or BLOCKED; APPROVE-WITH-EDITS and REVISE require at least one finding.
83
+ Coverage and Evidence remain substantive.
82
84
 
83
85
  The reviewer response is immutable and the reviewer never edits the specification. The separate
84
86
  authoring seat (`lean-specify`) re-checks findings and writes `triage.md`. For