fix(run): S10 del 2 — post-mortem: stopp-artefakt, SDK-isolasjon, raw-JSON-direktiv
Transkript-analyse av den stoppede live-kjøringen (10 kall, 162 250 tokens, $0.331506): konfig-lekkasjen (setting_sources=None laster ALLE filsystem- settings) injiserte operatørens Claude-konfig i hvert kall — ~10-15k uncachede tokens, en påtvunget bekreftelses-preamble som gjorde ren-JSON-svar umulige, og en checker kapret av lekkede instrukser (debatt konvergerte aldri). - persist_stop_artifacts: stopp-event verbatim + usage/kost persisteres ALLTID ved BudgetExceeded (delt usage-shape med fullført-run-stien) - build_call_options: setting_sources=[] (SDK isolation mode, verifisert mot installert 0.2.110-kilde), system_prompt=None → tom system-prompt; detach- bevis via monkeypatchet query - _generation_prompt: krever ONLY the raw JSON object (fence-innpakning ga 4 fullpris parse-retries) 187/187 uten nøkkel · ruff + mypy --strict rene · tre detach-bevis RØDE → grønn Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01QdSfQdND84oeq2mbjueLTS
This commit is contained in:
parent
0238507df4
commit
7637c6feae
7 changed files with 253 additions and 25 deletions
|
|
@ -17,7 +17,11 @@ import argparse
|
|||
import os
|
||||
from pathlib import Path
|
||||
|
||||
from portfolio_optimiser_claude.artifacts import build_citations, persist_run_artifacts
|
||||
from portfolio_optimiser_claude.artifacts import (
|
||||
build_citations,
|
||||
persist_run_artifacts,
|
||||
persist_stop_artifacts,
|
||||
)
|
||||
from portfolio_optimiser_claude.budget import BudgetExceeded, BudgetMeter
|
||||
from portfolio_optimiser_claude.contracts import load_contracts
|
||||
from portfolio_optimiser_claude.experience import (
|
||||
|
|
@ -93,9 +97,20 @@ def main(argv: list[str] | None = None) -> int:
|
|||
default_project_id=ir_projection.project_id,
|
||||
)
|
||||
except BudgetExceeded as stop:
|
||||
# §8: the structured stop event — report it, never a silent hang.
|
||||
# §8: the structured stop event — report it, never a silent hang, and
|
||||
# persist the spend (the first live run stopped here with NO record).
|
||||
print(f"STOPPED by budget: {stop.kind} observed {stop.observed} > limit {stop.limit}")
|
||||
print(f"cost so far: {client.total_cost_usd:.6f} USD")
|
||||
stop_paths = persist_stop_artifacts(
|
||||
args.out,
|
||||
stop=stop,
|
||||
termination=contracts.termination,
|
||||
tokens_used=meter.tokens_used,
|
||||
rounds_used=meter.rounds_used,
|
||||
cost_usd=round(client.total_cost_usd, 6),
|
||||
)
|
||||
for name, path in sorted(stop_paths.items()):
|
||||
print(f"artifact: {name} -> {path}")
|
||||
return 3
|
||||
|
||||
provenance = Provenance(
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue