B-gate row 1's premise, made callable. Every path through the framework CLI constructs a chat
client, so an outside caller -- a human at a terminal, or an agent that is NOT po -- could not
reach a single run-path step without paying for a model. These four steps need no model at all.
One CLI, four subcommands, one core call each:
navigate-bundle --bundle-dir -> okf.navigate_bundle
cost-baseline --bundle-dir --project-id -> okf.derive_cost_baseline
retrieve-chunks --query --docs-dir [--top-k] -> datasource.retrieve_chunks
prepass-admit --payload --bundle-dir [--dimension] -> prepass.admit_payload
Each handler is a thin adapter: strings in, the SAME function the run path calls, JSON on stdout,
and an exit code that says what happened (0 ran, 2 malformed call, 3 the step refused, named).
A handler that computed anything of its own would be a second implementation of a run-path step,
and the outside caller would stop getting what the debate gets.
Dispatch is an explicit branch per command, not argparse's `set_defaults(handler=...)`: the table
hides the one thing a reader wants to see, and B-gate row 1 asks the same question of the source
(it walks the call graph from `main` down to the step's symbol), where a callable in a Namespace
is a hop neither can follow.
Probes (`tests/test_toolbox_doors.py`, 10 arms): each starts the door as a SUBPROCESS with the
subcommand in argv and asserts on what it wrote -- never by importing the core function, which is
the whole difference the gate exists to measure. The yardstick is outside the door in every arm:
the filesystem (navigate-bundle, including the one deliberate outside-bundle link), a table
transcribed from the priced fixture (cost-baseline), the in-process seam it must equal byte for
byte (retrieve-chunks), and the producer's own checked-in payload (prepass-admit). Every refusal
arm has an rc-0 control beside it.
`portfolio-optimiser-toolbox` is the THIRD console script, and the pin test now says why: it is
the door the other two cannot be used for. README and CLAUDE.md updated with the command and the
reason it exists; every documented invocation was run.
Row 1: 1 -> 5 of 17 (four subcommands + `gate`, which the class fix in e47be68 stopped rejecting
on a name technicality). No other row moved; exit 1.
Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
635 lines
20 KiB
JSON
635 lines
20 KiB
JSON
{
|
|
"outcome": "En Claude Code-økt driver en hel analyse med po som verktøykasse, uten at po gjør ett eneste modellkall.",
|
|
"run_path": {
|
|
"module": "run.py",
|
|
"scope": "run_project",
|
|
"package": "portfolio_optimiser",
|
|
"held_out": [
|
|
{
|
|
"symbol": "admits",
|
|
"reason": "dimensjonsfilteret inne i mandat-vurderingen; skriver ingen egen artefakt"
|
|
},
|
|
{
|
|
"symbol": "baseline_from_project",
|
|
"reason": "utleder grunnlaget fra prosjektobjektet inne i «kostnadsgrunnlag»"
|
|
},
|
|
{
|
|
"symbol": "build_mcp_tools",
|
|
"reason": "bygger verktøylista debatten kaller; hører til modellveien"
|
|
},
|
|
{
|
|
"symbol": "bundle_citations",
|
|
"reason": "siteringshjelper inne i «kontekst»"
|
|
},
|
|
{
|
|
"symbol": "bundle_excerpt_citations",
|
|
"reason": "siteringshjelper inne i «kontekst»"
|
|
},
|
|
{
|
|
"symbol": "chunk_dict_to_citation",
|
|
"reason": "formkonvertering inne i «kontekst»"
|
|
},
|
|
{
|
|
"symbol": "classify_codes",
|
|
"reason": "klassifiserer avvisningskodene inne i «validering»"
|
|
},
|
|
{
|
|
"symbol": "criteria_block",
|
|
"reason": "renderer mandatkriteriene inn i prompten; modellveien"
|
|
},
|
|
{
|
|
"symbol": "fresh_workflow",
|
|
"reason": "krever chatklient: bygger MAF-debatten"
|
|
},
|
|
{
|
|
"symbol": "generate_via_llm",
|
|
"reason": "krever chatklient: ER modellkallet"
|
|
},
|
|
{
|
|
"symbol": "grounding_offer",
|
|
"reason": "bygger grunnlagstilbudet til prompten; modellveien"
|
|
},
|
|
{
|
|
"symbol": "load_contracts",
|
|
"reason": "leser kontraktsfilene før kjøringen; egen dør hører i preflight"
|
|
},
|
|
{
|
|
"symbol": "load_verdicts_from_dir",
|
|
"reason": "leser tidligere dommer inn i ExpeL-konteksten; inne i «dom»"
|
|
},
|
|
{
|
|
"symbol": "make_retrieval_tool",
|
|
"reason": "pakker «kontekst» som FunctionTool for agentene; modellveien"
|
|
},
|
|
{
|
|
"symbol": "navigator_tools",
|
|
"reason": "explore-modusens verktøy; rad 2 avgrenser B til proposer og checker"
|
|
},
|
|
{
|
|
"symbol": "optional_bundle_candidate_features",
|
|
"reason": "henter valgfrie trekk inne i «verdict-id»"
|
|
},
|
|
{
|
|
"symbol": "proposal_reviews_payload",
|
|
"reason": "bygger nyttelasten «forslagsvurderinger» skriver"
|
|
},
|
|
{
|
|
"symbol": "requirement_payload",
|
|
"reason": "explore-modus; utenfor B slik rad 2 avgrenser den"
|
|
},
|
|
{
|
|
"symbol": "resolve_model",
|
|
"reason": "slår opp deployment-navnet for chatklienten; modellveien"
|
|
},
|
|
{
|
|
"symbol": "tool_call_payload",
|
|
"reason": "bygger nyttelasten «debatt-verktøy» skriver"
|
|
},
|
|
{
|
|
"symbol": "tool_server_index",
|
|
"reason": "indekserer MCP-serverne for debatten; modellveien"
|
|
},
|
|
{
|
|
"symbol": "assert_declared_ids_agree",
|
|
"reason": "konsistenssjekk inne i «pakke»"
|
|
},
|
|
{
|
|
"symbol": "declared_reference_numbers",
|
|
"reason": "leser de erklærte referansetallene inne i «pakke»"
|
|
},
|
|
{
|
|
"symbol": "load_optional_cost_baseline",
|
|
"reason": "valgfri overstyring inne i «kostnadsgrunnlag»"
|
|
},
|
|
{
|
|
"symbol": "reconcile_bundle_id",
|
|
"reason": "binder bundle-id-en inne i «pakke»"
|
|
},
|
|
{
|
|
"symbol": "declaration_of",
|
|
"reason": "leser prepass-erklæringen inne i «prepass»"
|
|
},
|
|
{
|
|
"symbol": "declaration_payload",
|
|
"reason": "bygger erklæringens nyttelast inne i «prepass»"
|
|
},
|
|
{
|
|
"symbol": "render_context",
|
|
"reason": "renderer prepass-konteksten inn i prompten; modellveien"
|
|
}
|
|
]
|
|
},
|
|
"steps": [
|
|
{
|
|
"id": "pakke",
|
|
"label": "last kunnskapspakken og naviger den",
|
|
"module": "okf.py",
|
|
"symbol": "navigate_bundle",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "subcommand",
|
|
"module": "toolbox.py",
|
|
"scope": "main",
|
|
"command": "navigate-bundle"
|
|
},
|
|
"probe": [
|
|
"tests/test_toolbox_doors.py::test_navigate_bundle_from_outside_reports_every_file_the_base_holds"
|
|
]
|
|
},
|
|
{
|
|
"id": "kostnadsgrunnlag",
|
|
"label": "slå opp kostnadsgrunnlaget",
|
|
"module": "okf.py",
|
|
"symbol": "derive_cost_baseline",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "subcommand",
|
|
"module": "toolbox.py",
|
|
"scope": "main",
|
|
"command": "cost-baseline"
|
|
},
|
|
"probe": [
|
|
"tests/test_toolbox_doors.py::test_cost_baseline_from_outside_derives_exactly_what_the_priced_table_says"
|
|
]
|
|
},
|
|
{
|
|
"id": "kontekst",
|
|
"label": "hent kontekst-utdrag til forslaget",
|
|
"module": "datasource.py",
|
|
"symbol": "retrieve_chunks",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "subcommand",
|
|
"module": "toolbox.py",
|
|
"scope": "main",
|
|
"command": "retrieve-chunks"
|
|
},
|
|
"probe": [
|
|
"tests/test_toolbox_doors.py::test_retrieve_chunks_from_outside_matches_the_in_process_seam_exactly"
|
|
]
|
|
},
|
|
{
|
|
"id": "prepass",
|
|
"label": "slipp inn prepass-nyttelasten",
|
|
"module": "prepass.py",
|
|
"symbol": "admit_payload",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "subcommand",
|
|
"module": "toolbox.py",
|
|
"scope": "main",
|
|
"command": "prepass-admit"
|
|
},
|
|
"probe": [
|
|
"tests/test_toolbox_doors.py::test_prepass_admit_from_outside_admits_the_producers_own_payload"
|
|
]
|
|
},
|
|
{
|
|
"id": "validering",
|
|
"label": "valider forslaget, metodetak inkludert",
|
|
"module": "validator.py",
|
|
"symbol": "validate_proposal",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "evaluate_mandate_candidates"
|
|
},
|
|
"entry": {
|
|
"kind": "console-script",
|
|
"module": "run.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": []
|
|
},
|
|
{
|
|
"id": "verdict-id",
|
|
"label": "mint verdict_id fra IR-ens trekk",
|
|
"module": "verdicts.py",
|
|
"symbol": "verdict_key",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "console-script",
|
|
"module": "run.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": []
|
|
},
|
|
{
|
|
"id": "dom",
|
|
"label": "fang fagpersonens dom som en Verdict",
|
|
"module": "verdicts.py",
|
|
"symbol": "capture_verdict",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "console-script",
|
|
"module": "run.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": []
|
|
},
|
|
{
|
|
"id": "kjørekonfig",
|
|
"label": "skriv kjøringens konfigurasjon",
|
|
"module": "outbox.py",
|
|
"symbol": "write_run_config",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "console-script",
|
|
"module": "run.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": []
|
|
},
|
|
{
|
|
"id": "coverage",
|
|
"label": "skriv coverage-raden per tilnærming",
|
|
"module": "outbox.py",
|
|
"symbol": "write_coverage",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "console-script",
|
|
"module": "run.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": []
|
|
},
|
|
{
|
|
"id": "utboks",
|
|
"label": "skriv utboksen",
|
|
"module": "outbox.py",
|
|
"symbol": "write_outbox",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "console-script",
|
|
"module": "run.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": []
|
|
},
|
|
{
|
|
"id": "rundebinding",
|
|
"label": "bind en utboks til en rundekatalog",
|
|
"module": "evals/round_builder.py",
|
|
"symbol": "build_round",
|
|
"driver": {
|
|
"module": "evals/round_builder.py",
|
|
"scope": "main"
|
|
},
|
|
"entry": {
|
|
"kind": "module-main",
|
|
"module": "evals/round_builder.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": [
|
|
"tests/test_round_builder_loadbearing.py::test_the_command_line_builds_a_round_and_refuses_one_it_cannot"
|
|
]
|
|
},
|
|
{
|
|
"id": "rapport",
|
|
"label": "skriv rundens rapport på norsk",
|
|
"module": "evals/round_builder.py",
|
|
"symbol": "build_report",
|
|
"driver": {
|
|
"module": "evals/round_builder.py",
|
|
"scope": "build_round"
|
|
},
|
|
"entry": {
|
|
"kind": "module-main",
|
|
"module": "evals/round_builder.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": [
|
|
"tests/test_round_builder_loadbearing.py::test_the_report_names_every_approach_that_was_considered"
|
|
]
|
|
},
|
|
{
|
|
"id": "gate",
|
|
"label": "døm rundene med v1-gaten",
|
|
"module": "evals/v1_gate.py",
|
|
"symbol": "evaluate",
|
|
"driver": {
|
|
"module": "evals/v1_gate.py",
|
|
"scope": "main"
|
|
},
|
|
"entry": {
|
|
"kind": "module-main",
|
|
"module": "evals/v1_gate.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": [
|
|
"tests/test_v1_gate.py::test_the_command_is_red_today_with_every_row_in_its_output"
|
|
]
|
|
},
|
|
{
|
|
"id": "prepass-artefakt",
|
|
"label": "skriv prepassets egen artefakt",
|
|
"module": "outbox.py",
|
|
"symbol": "write_prepass",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "console-script",
|
|
"module": "run.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": []
|
|
},
|
|
{
|
|
"id": "parse-feil",
|
|
"label": "skriv det som ikke lot seg lese",
|
|
"module": "outbox.py",
|
|
"symbol": "write_parse_failures",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "console-script",
|
|
"module": "run.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": []
|
|
},
|
|
{
|
|
"id": "forslagsvurderinger",
|
|
"label": "skriv vurderingene av hvert forslag",
|
|
"module": "outbox.py",
|
|
"symbol": "write_proposal_reviews",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "console-script",
|
|
"module": "run.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": []
|
|
},
|
|
{
|
|
"id": "debatt-verktøy",
|
|
"label": "skriv verktøyene debatten kalte",
|
|
"module": "outbox.py",
|
|
"symbol": "write_debate_tools",
|
|
"driver": {
|
|
"module": "run.py",
|
|
"scope": "run_project"
|
|
},
|
|
"entry": {
|
|
"kind": "console-script",
|
|
"module": "run.py",
|
|
"scope": "main"
|
|
},
|
|
"probe": []
|
|
}
|
|
],
|
|
"roles": {
|
|
"source": {
|
|
"module": "workflow.py",
|
|
"symbol": "_MAKER_CHECKER_ROLES"
|
|
},
|
|
"evidence": {
|
|
"proposer": [
|
|
"tests/test_b_toolbox_probes.py::test_proposer_from_outside_mints_byte_identical_artefacts",
|
|
"tests/test_b_toolbox_probes.py::test_proposer_from_outside_is_rejected_with_the_same_reason"
|
|
],
|
|
"checker": [
|
|
"tests/test_b_toolbox_probes.py::test_checker_from_outside_mints_byte_identical_artefacts",
|
|
"tests/test_b_toolbox_probes.py::test_checker_from_outside_is_rejected_with_the_same_reason"
|
|
]
|
|
}
|
|
},
|
|
"no_claude_path": {
|
|
"manifest": {
|
|
"sentinels": [
|
|
"src/portfolio_optimiser/run.py",
|
|
"main.py",
|
|
"examples/ingest-golden-file/expected-bundle/index.md",
|
|
"spikes/__init__.py",
|
|
"contexts/dekke-og-kontrakt-lindaas-2027/bundle.txt"
|
|
],
|
|
"skip_dirs": [
|
|
".git",
|
|
"__pycache__",
|
|
".venv",
|
|
".pytest_cache",
|
|
".ruff_cache",
|
|
".mypy_cache",
|
|
"node_modules",
|
|
".idea",
|
|
".vscode"
|
|
]
|
|
},
|
|
"patterns": [
|
|
{
|
|
"id": "prosess",
|
|
"label": "prosess-start av claude fra kode",
|
|
"pattern_b64": "KHN1YnByb2Nlc3NcLihydW58UG9wZW58Y2FsbHxjaGVja19vdXRwdXQpfG9zXC5zeXN0ZW18b3NcLmV4ZWNcdyspXHMqXChccypcWz9ccypbIiddY2xhdWRlWyInXQ==",
|
|
"known_positive_b64": "c3VicHJvY2Vzcy5ydW4oWyJjbGF1ZGUiLCAiLXAiLCAiYW5hbHlzZXIgcHJvc2pla3RldCJdKQ==",
|
|
"known_negative_b64": "c3VicHJvY2Vzcy5ydW4oWyJweXRob24iLCAiLW0iLCAicG9ydGZvbGlvX29wdGltaXNlci5ydW4iLCAiUDEiXSk="
|
|
},
|
|
{
|
|
"id": "kommando",
|
|
"label": "claude som kommando i en kjørbar linje",
|
|
"pattern_b64": "KF58W1xzOyZ8YCQoXSljbGF1ZGVccysoLXBcYnwtLXByaW50XGJ8LS1wZXJtaXNzaW9uLW1vZGVcYnwtLWRhbmdlcm91c2x5LXNraXAtcGVybWlzc2lvbnNcYnwtLW1vZGVsXHMp",
|
|
"known_positive_b64": "Y2xhdWRlIC1wICJrasO4ciBhbmFseXNlbiIgLS1tb2RlbCBvcHVz",
|
|
"known_negative_b64": "cHl0aG9uIC1tIHBvcnRmb2xpb19vcHRpbWlzZXIucnVuIFAxIC0tcHJvZmlsZSBsb2NhbCAtLW1heC1yb3VuZHMgMg=="
|
|
},
|
|
{
|
|
"id": "sdk-import",
|
|
"label": "import av Claude Agent SDK",
|
|
"pattern_b64": "XlxzKihmcm9tfGltcG9ydClccysoY2xhdWRlX2FnZW50X3Nka3xjbGF1ZGVfY29kZV9zZGspXGI=",
|
|
"known_positive_b64": "aW1wb3J0IGNsYXVkZV9hZ2VudF9zZGs=",
|
|
"known_negative_b64": "aW1wb3J0IGFnZW50X2ZyYW1ld29yaw=="
|
|
},
|
|
{
|
|
"id": "maf-anthropic",
|
|
"label": "MAF sin Anthropic-provider",
|
|
"pattern_b64": "KGFnZW50X2ZyYW1ld29ya1wuYW50aHJvcGljfGFnZW50W18tXWZyYW1ld29ya1tfLV1jbGF1ZGV8QW50aHJvcGljQ2hhdENsaWVudCk=",
|
|
"known_positive_b64": "ZnJvbSBhZ2VudF9mcmFtZXdvcmsuYW50aHJvcGljIGltcG9ydCBBbnRocm9waWNDaGF0Q2xpZW50",
|
|
"known_negative_b64": "ZnJvbSBhZ2VudF9mcmFtZXdvcmsuYXp1cmUgaW1wb3J0IEF6dXJlQUlBZ2VudENsaWVudA=="
|
|
},
|
|
{
|
|
"id": "oauth",
|
|
"label": "lesing av Claude-abonnementets legitimasjon",
|
|
"pattern_b64": "KENMQVVERV9DT0RFX09BVVRIX1RPS0VOfFwuY2xhdWRlL1wuY3JlZGVudGlhbHNcLmpzb258Y2xhdWRlXC5haS9vYXV0aCk=",
|
|
"known_positive_b64": "dG9rZW4gPSBvcy5lbnZpcm9uWyJDTEFVREVfQ09ERV9PQVVUSF9UT0tFTiJd",
|
|
"known_negative_b64": "dG9rZW4gPSBvcy5lbnZpcm9uWyJBWlVSRV9PUEVOQUlfQVBJX0tFWSJd"
|
|
},
|
|
{
|
|
"id": "proxy",
|
|
"label": "proxy mot Anthropics API",
|
|
"pattern_b64": "KEFOVEhST1BJQ19CQVNFX1VSTHxBTlRIUk9QSUNfQVBJX0tFWXxhcGlcLmFudGhyb3BpY1wuY29tKQ==",
|
|
"known_positive_b64": "b3MuZW52aXJvblsiQU5USFJPUElDX0JBU0VfVVJMIl0gPSBlbmRwb2ludA==",
|
|
"known_negative_b64": "b3MuZW52aXJvblsiQVpVUkVfT1BFTkFJX0VORFBPSU5UIl0gPSBlbmRwb2ludA=="
|
|
},
|
|
{
|
|
"id": "argv-literal",
|
|
"label": "claude som programnavn i en argumentliste",
|
|
"pattern_b64": "W1xbKCxdXHMqWyInXSg/OlteIidcc10qLyk/Y2xhdWRlWyInXQ==",
|
|
"known_positive_b64": "Y21kID0gWyJjbGF1ZGUiLCAiLXAiLCAiYW5hbHlzZXIgcHJvc2pla3RldCJd",
|
|
"known_negative_b64": "bW9kZWxsZXIgPSBbImNsYXVkZS1vcHVzLTUiLCAiZ3B0LTUiXQ=="
|
|
},
|
|
{
|
|
"id": "kommando-streng",
|
|
"label": "claude med flagg inne i en streng",
|
|
"pattern_b64": "WyInXSg/OlteIidcc10qLyk/Y2xhdWRlXHMrLXsxLDJ9W0EtWmEtel0=",
|
|
"known_positive_b64": "c3VicHJvY2Vzcy5ydW4oc2hsZXguc3BsaXQoImNsYXVkZSAtcCBhbmFseXNlciIpKQ==",
|
|
"known_negative_b64": "c3VicHJvY2Vzcy5ydW4oc2hsZXguc3BsaXQoInB5dGhvbiAtbSBwb3J0Zm9saW9fb3B0aW1pc2VyLnJ1biBQMSIpKQ=="
|
|
},
|
|
{
|
|
"id": "binaersti",
|
|
"label": "en konstant som navngir claude-binaeren",
|
|
"pattern_b64": "PVxzKlsiJ10oPzpbXiInXHNdKi8pP2NsYXVkZVsiJ10=",
|
|
"known_positive_b64": "Q0xBVURFX0JJTiA9ICIvdXNyL2xvY2FsL2Jpbi9jbGF1ZGUi",
|
|
"known_negative_b64": "TU9ERUxMID0gImNsYXVkZS1vcHVzLTUi"
|
|
},
|
|
{
|
|
"id": "sdk-anthropic",
|
|
"label": "import av den offisielle Anthropic-SDK-en",
|
|
"pattern_b64": "XlxzKihmcm9tfGltcG9ydClccythbnRocm9waWNcYg==",
|
|
"known_positive_b64": "aW1wb3J0IGFudGhyb3BpYw==",
|
|
"known_negative_b64": "aW1wb3J0IGFudGhyb3BpY19ub3Rlcw=="
|
|
},
|
|
{
|
|
"id": "node-runner",
|
|
"label": "claude-code startet av en node- eller uv-kjoerer",
|
|
"pattern_b64": "KG5weHx1dnh8YnVueHxwbnBtXHMrZGx4KVxiWyInXHMsXSsoLXsxLDJ9XHdbXHctXSpbIidccyxdKykqWyInXT8oQGFudGhyb3BpYy1haS8pP2NsYXVkZS1jb2RlXGI=",
|
|
"known_positive_b64": "bnB4IEBhbnRocm9waWMtYWkvY2xhdWRlLWNvZGUgLXAgImFuYWx5c2VyIg==",
|
|
"known_negative_b64": "bnB4IHByZXR0aWVyIC0td3JpdGUgLg=="
|
|
},
|
|
{
|
|
"id": "dynamisk-import",
|
|
"label": "dynamisk import av en Claude-klient",
|
|
"pattern_b64": "X19pbXBvcnRfX1woXHMqWyInXShjbGF1ZGVfYWdlbnRfc2RrfGNsYXVkZV9jb2RlX3Nka3xhbnRocm9waWMpWyInXQ==",
|
|
"known_positive_b64": "X19pbXBvcnRfXygiY2xhdWRlX2FnZW50X3NkayIp",
|
|
"known_negative_b64": "X19pbXBvcnRfXygiYWdlbnRfZnJhbWV3b3JrIik="
|
|
},
|
|
{
|
|
"id": "dynamisk-import-modul",
|
|
"label": "importlib mot en Claude-klient",
|
|
"pattern_b64": "aW1wb3J0bGliXC5pbXBvcnRfbW9kdWxlXChccypbIlwnXShjbGF1ZGVfYWdlbnRfc2RrfGNsYXVkZV9jb2RlX3Nka3xhbnRocm9waWMpWyJcJ10=",
|
|
"known_positive_b64": "aW1wb3J0bGliLmltcG9ydF9tb2R1bGUoImNsYXVkZV9hZ2VudF9zZGsiKQ==",
|
|
"known_negative_b64": "aW1wb3J0bGliLmltcG9ydF9tb2R1bGUoImFnZW50X2ZyYW1ld29yayIp"
|
|
},
|
|
{
|
|
"id": "node-runner-indirekte",
|
|
"label": "claude-code startet av deno, npm exec, yarn dlx eller pnpm exec",
|
|
"pattern_b64": "KGRlbm9ccytydW5cYlteXG5dKj9ucG06fG5wbVxzK2V4ZWNcYlteXG5dKj98eWFyblxzK2RseFxiW15cbl0qP3xwbnBtXHMrZXhlY1xiW15cbl0qPykoQGFudGhyb3BpYy1haS8pP2NsYXVkZS1jb2RlXGI=",
|
|
"known_positive_b64": "ZGVubyBydW4gLUEgbnBtOkBhbnRocm9waWMtYWkvY2xhdWRlLWNvZGUgLXAgIngi",
|
|
"known_negative_b64": "bnBtIGV4ZWMgcHJldHRpZXIgLS0gLS13cml0ZSAu"
|
|
},
|
|
{
|
|
"id": "sdk-ts-import",
|
|
"label": "import av den offisielle TypeScript-SDK-en",
|
|
"pattern_b64": "KGltcG9ydHxyZXF1aXJlKVxiW15cbl0qWyJcJ11AYW50aHJvcGljLWFpLyhjbGF1ZGUtYWdlbnQtc2RrfGNsYXVkZS1jb2RlLXNka3xjbGF1ZGUtY29kZSlbIlwnXQ==",
|
|
"known_positive_b64": "aW1wb3J0IHsgcXVlcnkgfSBmcm9tICJAYW50aHJvcGljLWFpL2NsYXVkZS1hZ2VudC1zZGsiOw==",
|
|
"known_negative_b64": "aW1wb3J0IHsgeiB9IGZyb20gInpvZCI7"
|
|
}
|
|
]
|
|
},
|
|
"no_model_calls": {
|
|
"checks": {
|
|
"fullfører": {
|
|
"source": {
|
|
"module": "run.py",
|
|
"symbol": "run_project"
|
|
},
|
|
"probe": [
|
|
"tests/test_b_toolbox_probes.py::test_the_whole_run_completes_with_the_chat_client_raising"
|
|
]
|
|
},
|
|
"rundekatalog": {
|
|
"source": {
|
|
"module": "evals/round_builder.py",
|
|
"symbol": "build_round"
|
|
},
|
|
"probe": [
|
|
"tests/test_b_toolbox_probes.py::test_the_toolbox_outbox_binds_to_a_scratch_round_directory"
|
|
]
|
|
},
|
|
"gate-form-ok": {
|
|
"source": {
|
|
"module": "evals/v1_gate.py",
|
|
"symbol": "FORM_OK"
|
|
},
|
|
"probe": [
|
|
"tests/test_b_toolbox_probes.py::test_v1_gate_reads_that_round_as_form_ok_not_proven"
|
|
]
|
|
}
|
|
}
|
|
},
|
|
"foundry": {
|
|
"profile": {
|
|
"module": "backends.py",
|
|
"scope": "Profile",
|
|
"members": [
|
|
"AZURE",
|
|
"LOCAL"
|
|
]
|
|
},
|
|
"factory": {
|
|
"module": "run.py",
|
|
"symbol": "_default_factory"
|
|
},
|
|
"seam": {
|
|
"module": "run.py",
|
|
"scope": "run_project",
|
|
"parameter": "client_factory"
|
|
},
|
|
"evidence": {
|
|
"samme-skjema": [
|
|
"tests/test_b_toolbox_probes.py::test_both_modes_write_the_same_artefact_family"
|
|
]
|
|
}
|
|
},
|
|
"runbook": {
|
|
"artefacts": [
|
|
"kjørebok",
|
|
"attestering"
|
|
],
|
|
"path": "docs/kjoerebok-verktoeykassen.md",
|
|
"sections": [
|
|
"Forutsetninger",
|
|
"Kommandoene",
|
|
"En hel analyse, steg for steg",
|
|
"Naar noe feiler",
|
|
"Hva gaten ikke beviser"
|
|
],
|
|
"attestation": "v1-rounds/kjoerebok-attestering.txt",
|
|
"keys": [
|
|
"kjørebok",
|
|
"sjekksum",
|
|
"kjørt",
|
|
"dato"
|
|
]
|
|
}
|
|
}
|