mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-10-07 03:00:29 +00:00
parent
58ab90561d
commit
8ada68cb43
4 changed files with 272 additions and 98 deletions
310
run.json
310
run.json
|
|
@ -313,7 +313,7 @@
|
|||
"kind": "running"
|
||||
},
|
||||
"status_updated_at": "2026-05-27T02:04:35.579135Z",
|
||||
"last_event_at": "2026-05-27T02:49:26.084562Z",
|
||||
"last_event_at": "2026-05-27T02:49:51.873565Z",
|
||||
"pending_control": null,
|
||||
"checkpoints": [
|
||||
{
|
||||
|
|
@ -762,9 +762,9 @@
|
|||
}
|
||||
},
|
||||
{
|
||||
"seq": 0,
|
||||
"seq": 1271,
|
||||
"checkpoint": {
|
||||
"timestamp": "2026-05-27T02:49:48.038778Z",
|
||||
"timestamp": "2026-05-27T02:49:51.873337Z",
|
||||
"current_node": "audit",
|
||||
"completed_nodes": [
|
||||
"start",
|
||||
|
|
@ -775,35 +775,31 @@
|
|||
],
|
||||
"node_retries": {},
|
||||
"context_values": {
|
||||
"response.audit": "## Audit Results\n\n### Evidence Examined\n\n**Production-code `unwrap()` — 0 violations**\n- Scanner found 31 `.unwrap()` hits, all in `#[cfg(test)]`-gated modules:\n - `fabro-workflow/src/pipeline/execute/tests.rs` — included via `#[cfg(test)] #[path = ...] mod tests;`\n - `fabro-server/src/server/tests.rs` — same gating pattern\n- No production code contains `unwrap()`\n\n**Production-code `expect()` with weak messages — 0 violations**\n- 57 items found by scanner; all in test support files (`test_support.rs`), integration test directories (`tests/it/`), or `examples/`\n- All production `expect()` messages were fixed in prior passes\n\n**Production-code `panic!`/`unreachable!`/`todo!`/`unimplemented!` — 26 hits, all justified**\n\nEvery production-code occurrence falls into an explicitly allowed category:\n\n| Category | Instances |\n|----------|-----------|\n| Hardcoded demo/tool constants | `demo/mod.rs:247,258,1178`, `tools.rs:48,81` |\n| Structurally-impossible match arms (with explanation) | `condition.rs:117`, `event/convert.rs:837`, `router.rs:52`, `openai_compatible.rs:304`, `catalog.rs:408`, `run_catalog_index.rs:20`, `diagnostics.rs:352`, `server.rs:3153`, `handler/system.rs:487,587`, `subagent.rs:237` |\n| Loop invariants (loop always returns) | `executor.rs:410`, `2026050101_migration:463` |\n| CLI preprocessing (handled before bootstrap) | `main.rs:424,426` |\n| Caller-contract invariant (only called after `is_terminal()`) | `wait.rs:110` |\n| Programming regression guard (full comment) | `strategy.rs:75` |\n| Debug-assertions only; release falls through to `Ok(())` | `safe_url.rs:141` |\n\nAll 26 have explicit, reviewable justification messages.\n\n**Test suite: 6470/6470 passed, 181 skipped**\n\n### Conclusion\n\nEvery concrete requirement in the goal is satisfied by current evidence:\n- `unwrap()`: 0 in production\n- Weak `expect()`: 0 in production \n- `panic!`/`unreachable!` without justification: 0 in production\n- All tests green\n\n{\n \"outcome\": \"succeeded\",\n \"preferred_next_label\": \"Done\",\n \"context_updates\": {\n \"goal_status\": \"complete\",\n \"goal_remaining_work\": \"\"\n }\n}",
|
||||
"goal_status": "complete",
|
||||
"internal.node_visit_count": 2,
|
||||
"thread.goal.current_node": "audit",
|
||||
"last_response": "## Audit Results\n\n### Evidence Examined\n\n**Production-code `unwrap()` — 0 violations**\n- Scanner found 31 `.unwrap()` hits, all in `#[cfg(test)]`-gated modules:\n - `fabro-workflow/src/pipeline/exec",
|
||||
"graph.max_node_visits": "30",
|
||||
"graph.rankdir": "LR",
|
||||
"current_node": "audit",
|
||||
"internal.retry_count.audit": 0,
|
||||
"failure_class": "",
|
||||
"internal.node_visit_count": 2,
|
||||
"internal.retry_count.start": 0,
|
||||
"internal.retry_count.work": 0,
|
||||
"internal.run_id": "01KSKJSYQ3JRE9E04XZ8VCT2Y9",
|
||||
"preferred_label": "Done",
|
||||
"last_stage": "audit",
|
||||
"failure_class": "",
|
||||
"failure_signature": "",
|
||||
"internal.retry_count.work": 0,
|
||||
"internal.retry_count.start": 0,
|
||||
"internal.thread_id": "goal",
|
||||
"graph.goal": "Production runtime code must not panic on any path reachable from CLI input,\n HTTP requests, workflow definitions, external services, storage, subprocesses,\n or normal environment failure.\n\n Use Result for recoverable or reportable failures, preserving the source chain\n until the boundary. CLI boundaries render errors with miette. HTTP boundaries log\n the full internal chain and return a curated public API error.\n\n Panics are allowed only for:\n - tests, fixtures, and test-only helpers;\n - build scripts or dev tooling where failure happens before runtime;\n - hard-coded literals or generated constants whose validity is controlled by the\n source tree, preferably with `expect` explaining the invariant;\n - truly impossible internal invariants where continuing would be more dangerous\n than terminating.\n\n `unwrap()` is not allowed in production runtime code. `expect()` is allowed only\n when the message explains why the failure is impossible, not merely what failed.\n `panic!`, `todo!`, `unimplemented!`, and `unreachable!` require an explicit,\n reviewable justification.\n\n The practical review test should be:\n\n > Could this failure be caused by input, config, environment, I/O, network, time, concurrency, persisted state, or a third-party system?\n\n If yes, it is not a panic. Return an error.",
|
||||
"goal_remaining_work": "",
|
||||
"outcome": "succeeded",
|
||||
"internal.work_dir": "/home/daytona/workspace/fabro",
|
||||
"graph.goal": "Production runtime code must not panic on any path reachable from CLI input,\n HTTP requests, workflow definitions, external services, storage, subprocesses,\n or normal environment failure.\n\n Use Result for recoverable or reportable failures, preserving the source chain\n until the boundary. CLI boundaries render errors with miette. HTTP boundaries log\n the full internal chain and return a curated public API error.\n\n Panics are allowed only for:\n - tests, fixtures, and test-only helpers;\n - build scripts or dev tooling where failure happens before runtime;\n - hard-coded literals or generated constants whose validity is controlled by the\n source tree, preferably with `expect` explaining the invariant;\n - truly impossible internal invariants where continuing would be more dangerous\n than terminating.\n\n `unwrap()` is not allowed in production runtime code. `expect()` is allowed only\n when the message explains why the failure is impossible, not merely what failed.\n `panic!`, `todo!`, `unimplemented!`, and `unreachable!` require an explicit,\n reviewable justification.\n\n The practical review test should be:\n\n > Could this failure be caused by input, config, environment, I/O, network, time, concurrency, persisted state, or a third-party system?\n\n If yes, it is not a panic. Return an error.",
|
||||
"current_node": "audit",
|
||||
"goal_status": "complete",
|
||||
"response.audit": "## Audit Results\n\n### Evidence Examined\n\n**Production-code `unwrap()` — 0 violations**\n- Scanner found 31 `.unwrap()` hits, all in `#[cfg(test)]`-gated modules:\n - `fabro-workflow/src/pipeline/execute/tests.rs` — included via `#[cfg(test)] #[path = ...] mod tests;`\n - `fabro-server/src/server/tests.rs` — same gating pattern\n- No production code contains `unwrap()`\n\n**Production-code `expect()` with weak messages — 0 violations**\n- 57 items found by scanner; all in test support files (`test_support.rs`), integration test directories (`tests/it/`), or `examples/`\n- All production `expect()` messages were fixed in prior passes\n\n**Production-code `panic!`/`unreachable!`/`todo!`/`unimplemented!` — 26 hits, all justified**\n\nEvery production-code occurrence falls into an explicitly allowed category:\n\n| Category | Instances |\n|----------|-----------|\n| Hardcoded demo/tool constants | `demo/mod.rs:247,258,1178`, `tools.rs:48,81` |\n| Structurally-impossible match arms (with explanation) | `condition.rs:117`, `event/convert.rs:837`, `router.rs:52`, `openai_compatible.rs:304`, `catalog.rs:408`, `run_catalog_index.rs:20`, `diagnostics.rs:352`, `server.rs:3153`, `handler/system.rs:487,587`, `subagent.rs:237` |\n| Loop invariants (loop always returns) | `executor.rs:410`, `2026050101_migration:463` |\n| CLI preprocessing (handled before bootstrap) | `main.rs:424,426` |\n| Caller-contract invariant (only called after `is_terminal()`) | `wait.rs:110` |\n| Programming regression guard (full comment) | `strategy.rs:75` |\n| Debug-assertions only; release falls through to `Ok(())` | `safe_url.rs:141` |\n\nAll 26 have explicit, reviewable justification messages.\n\n**Test suite: 6470/6470 passed, 181 skipped**\n\n### Conclusion\n\nEvery concrete requirement in the goal is satisfied by current evidence:\n- `unwrap()`: 0 in production\n- Weak `expect()`: 0 in production \n- `panic!`/`unreachable!` without justification: 0 in production\n- All tests green\n\n{\n \"outcome\": \"succeeded\",\n \"preferred_next_label\": \"Done\",\n \"context_updates\": {\n \"goal_status\": \"complete\",\n \"goal_remaining_work\": \"\"\n }\n}",
|
||||
"internal.retry_count.audit": 0,
|
||||
"response.work": "6470/6470 tests pass. Here's a summary of this pass:\n\n## Summary\n\n### Audit-flagged items fixed\n\nTwo items were explicitly called out by the previous audit:\n\n1. **`fabro-telemetry/src/sanitize.rs:7`** — `\"valid regex\"` → `\"hardcoded regex literal is always syntactically valid\"` (matches the pattern used in `error.rs`)\n\n2. **`fabro-auth/src/strategy.rs:68`** — Replaced bare `assert_eq!` with an explicit `if`/`panic!` block plus a comment explaining that all call sites enforce the CodexDevice+OpenAI invariant\n\n### Additional weak messages fixed in this pass\n\nThe same scan surface found several more messages that failed the \"explains why failure is impossible\" test:\n\n| File | Old message | Fix |\n|------|-------------|-----|\n| `generate.rs:213,232` | `\"just pushed\"` | `\"steps is non-empty: element was pushed on the line above\"` |\n| `run_progress/styles.rs:13` | `\"valid template\"` | `\"hardcoded progress template is always syntactically valid\"` |\n| `shared/utilities.rs:27` | `\"valid template\"` | same |\n| `graphviz/parser/semantic.rs:98,118,132` | `\"just ensured\"` | `\"node was just inserted by ensure_node, so get_mut cannot return None\"` |\n| `demo/mod.rs:232` | `\"literal is non-zero\"` | `\"hardcoded literal 100 is non-zero\"` |\n| `slack/connection.rs:62` | `\"ack serialization\"` | explains the struct's derived `Serialize` has no custom logic that can fail |\n| `stylesheet.rs:51` | `\"node must exist\"` | explains node_id was collected from the same map's keys |\n| `event/convert.rs:654,713,745` | `\"serializable agent/sdk error\"` | explains the derives-based serialization has no custom failure path |\n| `run_projection.rs:427` | `\"event seq starts at 1\"` | `\"event sequence numbers are 1-based so seq is always non-zero at this call site\"` |\n\n### Remaining justified `panic!` calls (all verified)\n\n- `tools.rs` — hardcoded tool name validation with `# Panics` doc\n- `demo/mod.rs` — hardcoded demo SHA/status constants\n- `strategy.rs` — programming invariant (CodexDevice+OpenAI pairing), all call sites verified\n\n### Evidence\n\n- `unwrap()` in production: **0**\n- Weak `expect()` messages: **0**\n- All `unreachable!`: documented with explicit structural invariants\n- `cargo nextest run --workspace`: **6470 passed, 0 failed**",
|
||||
"internal.thread_id": "goal",
|
||||
"internal.fidelity": "full"
|
||||
"internal.work_dir": "/home/daytona/workspace/fabro",
|
||||
"last_response": "## Audit Results\n\n### Evidence Examined\n\n**Production-code `unwrap()` — 0 violations**\n- Scanner found 31 `.unwrap()` hits, all in `#[cfg(test)]`-gated modules:\n - `fabro-workflow/src/pipeline/exec",
|
||||
"thread.goal.current_node": "audit",
|
||||
"last_stage": "audit",
|
||||
"graph.max_node_visits": "30",
|
||||
"internal.fidelity": "full",
|
||||
"failure_signature": ""
|
||||
},
|
||||
"node_outcomes": {
|
||||
"start": {
|
||||
"status": "succeeded",
|
||||
"usage": null
|
||||
},
|
||||
"audit": {
|
||||
"status": "succeeded",
|
||||
"preferred_label": "Done",
|
||||
|
|
@ -845,6 +841,10 @@
|
|||
"active_time_ms": 252574
|
||||
}
|
||||
},
|
||||
"start": {
|
||||
"status": "succeeded",
|
||||
"usage": null
|
||||
},
|
||||
"work": {
|
||||
"status": "succeeded",
|
||||
"context_updates": {
|
||||
|
|
@ -897,16 +897,84 @@
|
|||
}
|
||||
},
|
||||
"next_node_id": "exit",
|
||||
"git_commit_sha": "52cb4ab9e9d77f210b2d5beb0450ee9afeffeefe",
|
||||
"loop_failure_signatures": {
|
||||
"audit|deterministic|two `expect()`/`assert` violations remain: (<n>) `fabro-telemetry/src/sanitize.rs:<n>` uses `.expect(\"valid regex\")` which describes what the regex is rather than why failure is impossible — the codebase standard for hardcoded regexes is ": 1
|
||||
},
|
||||
"node_visits": {
|
||||
"audit": 2,
|
||||
"work": 2,
|
||||
"start": 1
|
||||
"start": 1,
|
||||
"audit": 2
|
||||
}
|
||||
},
|
||||
"diff": {}
|
||||
"diff": {
|
||||
"summary": {
|
||||
"files_changed": 16,
|
||||
"additions": 71,
|
||||
"deletions": 44
|
||||
}
|
||||
}
|
||||
}
|
||||
],
|
||||
"conclusion": null,
|
||||
"conclusion": {
|
||||
"timestamp": "2026-05-27T02:49:51.919287Z",
|
||||
"status": "succeeded",
|
||||
"timing": {
|
||||
"wall_time_ms": 2716285,
|
||||
"inference_time_ms": 1456977,
|
||||
"tool_time_ms": 1200629,
|
||||
"active_time_ms": 2657606
|
||||
},
|
||||
"final_git_commit_sha": "52cb4ab9e9d77f210b2d5beb0450ee9afeffeefe",
|
||||
"stages": [
|
||||
{
|
||||
"stage_id": "start",
|
||||
"stage_label": "start",
|
||||
"timing": {
|
||||
"wall_time_ms": 0,
|
||||
"inference_time_ms": 0,
|
||||
"tool_time_ms": 0,
|
||||
"active_time_ms": 0
|
||||
},
|
||||
"retries": 0
|
||||
},
|
||||
{
|
||||
"stage_id": "work",
|
||||
"stage_label": "work",
|
||||
"timing": {
|
||||
"wall_time_ms": 2062625,
|
||||
"inference_time_ms": 977642,
|
||||
"tool_time_ms": 1083148,
|
||||
"active_time_ms": 2060790
|
||||
},
|
||||
"billing_usd_micros": 8998927,
|
||||
"retries": 0
|
||||
},
|
||||
{
|
||||
"stage_id": "audit",
|
||||
"stage_label": "audit",
|
||||
"timing": {
|
||||
"wall_time_ms": 635064,
|
||||
"inference_time_ms": 479335,
|
||||
"tool_time_ms": 117481,
|
||||
"active_time_ms": 596816
|
||||
},
|
||||
"billing_usd_micros": 2647190,
|
||||
"retries": 0
|
||||
}
|
||||
],
|
||||
"billing": {
|
||||
"input_tokens": 364763,
|
||||
"output_tokens": 176973,
|
||||
"total_tokens": 34075700,
|
||||
"reasoning_tokens": 0,
|
||||
"cache_read_tokens": 30032072,
|
||||
"cache_write_tokens": 3501892,
|
||||
"total_usd_micros": 11646117
|
||||
},
|
||||
"total_retries": 0,
|
||||
"diff": {}
|
||||
},
|
||||
"sandbox": {
|
||||
"provider": "daytona",
|
||||
"snapshot": "fabro-v12",
|
||||
|
|
@ -955,12 +1023,12 @@
|
|||
"active_time_ms": 749201
|
||||
},
|
||||
"usage": {
|
||||
"input_tokens": 62468,
|
||||
"output_tokens": 30598,
|
||||
"total_tokens": 7738933,
|
||||
"input_tokens": 65193,
|
||||
"output_tokens": 31929,
|
||||
"total_tokens": 7785821,
|
||||
"reasoning_tokens": 0,
|
||||
"cache_read_tokens": 6829441,
|
||||
"cache_write_tokens": 816426,
|
||||
"cache_read_tokens": 6872026,
|
||||
"cache_write_tokens": 816673,
|
||||
"total_usd_micros": 5120915
|
||||
},
|
||||
"model": {
|
||||
|
|
@ -972,32 +1040,32 @@
|
|||
"provider": "anthropic",
|
||||
"model": "claude-sonnet-4-6",
|
||||
"context_window_tokens": 200000,
|
||||
"input_tokens": 42833,
|
||||
"usage_percent": 21.4165,
|
||||
"input_tokens": 45557,
|
||||
"usage_percent": 22.7785,
|
||||
"count_method": "response_usage_scaled_breakdown",
|
||||
"staleness": "live",
|
||||
"generated_at": "2026-05-27T02:48:29.374824Z",
|
||||
"event_seq": 1242,
|
||||
"generated_at": "2026-05-27T02:49:48.038183Z",
|
||||
"event_seq": 1265,
|
||||
"breakdown": [
|
||||
{
|
||||
"category": "system_prompt",
|
||||
"tokens": 1800,
|
||||
"usage_percent": 0.9
|
||||
"tokens": 1752,
|
||||
"usage_percent": 0.876
|
||||
},
|
||||
{
|
||||
"category": "tools",
|
||||
"tokens": 2067,
|
||||
"usage_percent": 1.0335
|
||||
"tokens": 2012,
|
||||
"usage_percent": 1.006
|
||||
},
|
||||
{
|
||||
"category": "memory",
|
||||
"tokens": 4365,
|
||||
"usage_percent": 2.1825
|
||||
"tokens": 4249,
|
||||
"usage_percent": 2.1245
|
||||
},
|
||||
{
|
||||
"category": "conversation",
|
||||
"tokens": 34595,
|
||||
"usage_percent": 17.2975
|
||||
"tokens": 37538,
|
||||
"usage_percent": 18.769
|
||||
},
|
||||
{
|
||||
"category": "other",
|
||||
|
|
@ -1038,12 +1106,12 @@
|
|||
"active_time_ms": 344242
|
||||
},
|
||||
"usage": {
|
||||
"input_tokens": 86946,
|
||||
"output_tokens": 47237,
|
||||
"total_tokens": 10455474,
|
||||
"input_tokens": 89671,
|
||||
"output_tokens": 48568,
|
||||
"total_tokens": 10502362,
|
||||
"reasoning_tokens": 0,
|
||||
"cache_read_tokens": 9260281,
|
||||
"cache_write_tokens": 1061010,
|
||||
"cache_read_tokens": 9302866,
|
||||
"cache_write_tokens": 1061257,
|
||||
"total_usd_micros": 1969461
|
||||
},
|
||||
"model": {
|
||||
|
|
@ -1055,32 +1123,32 @@
|
|||
"provider": "anthropic",
|
||||
"model": "claude-sonnet-4-6",
|
||||
"context_window_tokens": 200000,
|
||||
"input_tokens": 42833,
|
||||
"usage_percent": 21.4165,
|
||||
"input_tokens": 45557,
|
||||
"usage_percent": 22.7785,
|
||||
"count_method": "response_usage_scaled_breakdown",
|
||||
"staleness": "live",
|
||||
"generated_at": "2026-05-27T02:48:29.374824Z",
|
||||
"event_seq": 1241,
|
||||
"generated_at": "2026-05-27T02:49:48.038183Z",
|
||||
"event_seq": 1264,
|
||||
"breakdown": [
|
||||
{
|
||||
"category": "system_prompt",
|
||||
"tokens": 1800,
|
||||
"usage_percent": 0.9
|
||||
"tokens": 1752,
|
||||
"usage_percent": 0.876
|
||||
},
|
||||
{
|
||||
"category": "tools",
|
||||
"tokens": 2067,
|
||||
"usage_percent": 1.0335
|
||||
"tokens": 2012,
|
||||
"usage_percent": 1.006
|
||||
},
|
||||
{
|
||||
"category": "memory",
|
||||
"tokens": 4365,
|
||||
"usage_percent": 2.1825
|
||||
"tokens": 4249,
|
||||
"usage_percent": 2.1245
|
||||
},
|
||||
{
|
||||
"category": "conversation",
|
||||
"tokens": 34595,
|
||||
"usage_percent": 17.2975
|
||||
"tokens": 37538,
|
||||
"usage_percent": 18.769
|
||||
},
|
||||
{
|
||||
"category": "other",
|
||||
|
|
@ -1130,7 +1198,12 @@
|
|||
"first_event_seq": 998,
|
||||
"prompt": null,
|
||||
"response": null,
|
||||
"completion": null,
|
||||
"completion": {
|
||||
"outcome": "succeeded",
|
||||
"notes": "Stage completed: audit",
|
||||
"failure_reason": null,
|
||||
"timestamp": "2026-05-27T02:49:48.038642Z"
|
||||
},
|
||||
"provider_used": {
|
||||
"mode": "agent",
|
||||
"provider": "anthropic",
|
||||
|
|
@ -1143,13 +1216,20 @@
|
|||
"output": null,
|
||||
"started_at": "2026-05-27T02:44:57.460003Z",
|
||||
"handler": "agent",
|
||||
"timing": {
|
||||
"wall_time_ms": 290577,
|
||||
"inference_time_ms": 194472,
|
||||
"tool_time_ms": 58102,
|
||||
"active_time_ms": 252574
|
||||
},
|
||||
"usage": {
|
||||
"input_tokens": 27204,
|
||||
"output_tokens": 10788,
|
||||
"total_tokens": 485793,
|
||||
"input_tokens": 29929,
|
||||
"output_tokens": 12119,
|
||||
"total_tokens": 532681,
|
||||
"reasoning_tokens": 0,
|
||||
"cache_read_tokens": 372985,
|
||||
"cache_write_tokens": 74816
|
||||
"cache_read_tokens": 415570,
|
||||
"cache_write_tokens": 75063,
|
||||
"total_usd_micros": 677729
|
||||
},
|
||||
"model": {
|
||||
"provider": "anthropic",
|
||||
|
|
@ -1160,32 +1240,32 @@
|
|||
"provider": "anthropic",
|
||||
"model": "claude-sonnet-4-6",
|
||||
"context_window_tokens": 200000,
|
||||
"input_tokens": 42833,
|
||||
"usage_percent": 21.4165,
|
||||
"input_tokens": 45557,
|
||||
"usage_percent": 22.7785,
|
||||
"count_method": "response_usage_scaled_breakdown",
|
||||
"staleness": "live",
|
||||
"generated_at": "2026-05-27T02:48:29.374824Z",
|
||||
"event_seq": 1244,
|
||||
"generated_at": "2026-05-27T02:49:48.038183Z",
|
||||
"event_seq": 1262,
|
||||
"breakdown": [
|
||||
{
|
||||
"category": "system_prompt",
|
||||
"tokens": 1800,
|
||||
"usage_percent": 0.9
|
||||
"tokens": 1752,
|
||||
"usage_percent": 0.876
|
||||
},
|
||||
{
|
||||
"category": "tools",
|
||||
"tokens": 2067,
|
||||
"usage_percent": 1.0335
|
||||
"tokens": 2012,
|
||||
"usage_percent": 1.006
|
||||
},
|
||||
{
|
||||
"category": "memory",
|
||||
"tokens": 4365,
|
||||
"usage_percent": 2.1825
|
||||
"tokens": 4249,
|
||||
"usage_percent": 2.1245
|
||||
},
|
||||
{
|
||||
"category": "conversation",
|
||||
"tokens": 34595,
|
||||
"usage_percent": 17.2975
|
||||
"tokens": 37538,
|
||||
"usage_percent": 18.769
|
||||
},
|
||||
{
|
||||
"category": "other",
|
||||
|
|
@ -1195,7 +1275,7 @@
|
|||
],
|
||||
"warnings": []
|
||||
},
|
||||
"state": "running"
|
||||
"state": "succeeded"
|
||||
},
|
||||
"work@1": {
|
||||
"first_event_seq": 22,
|
||||
|
|
@ -1226,12 +1306,12 @@
|
|||
"active_time_ms": 1311589
|
||||
},
|
||||
"usage": {
|
||||
"input_tokens": 177245,
|
||||
"output_tokens": 83026,
|
||||
"total_tokens": 15207948,
|
||||
"input_tokens": 179970,
|
||||
"output_tokens": 84357,
|
||||
"total_tokens": 15254836,
|
||||
"reasoning_tokens": 0,
|
||||
"cache_read_tokens": 13399025,
|
||||
"cache_write_tokens": 1548652,
|
||||
"cache_read_tokens": 13441610,
|
||||
"cache_write_tokens": 1548899,
|
||||
"total_usd_micros": 3878012
|
||||
},
|
||||
"model": {
|
||||
|
|
@ -1411,32 +1491,32 @@
|
|||
"provider": "anthropic",
|
||||
"model": "claude-sonnet-4-6",
|
||||
"context_window_tokens": 200000,
|
||||
"input_tokens": 42833,
|
||||
"usage_percent": 21.4165,
|
||||
"input_tokens": 45557,
|
||||
"usage_percent": 22.7785,
|
||||
"count_method": "response_usage_scaled_breakdown",
|
||||
"staleness": "live",
|
||||
"generated_at": "2026-05-27T02:48:29.374824Z",
|
||||
"event_seq": 1243,
|
||||
"generated_at": "2026-05-27T02:49:48.038183Z",
|
||||
"event_seq": 1263,
|
||||
"breakdown": [
|
||||
{
|
||||
"category": "system_prompt",
|
||||
"tokens": 1800,
|
||||
"usage_percent": 0.9
|
||||
"tokens": 1752,
|
||||
"usage_percent": 0.876
|
||||
},
|
||||
{
|
||||
"category": "tools",
|
||||
"tokens": 2067,
|
||||
"usage_percent": 1.0335
|
||||
"tokens": 2012,
|
||||
"usage_percent": 1.006
|
||||
},
|
||||
{
|
||||
"category": "memory",
|
||||
"tokens": 4365,
|
||||
"usage_percent": 2.1825
|
||||
"tokens": 4249,
|
||||
"usage_percent": 2.1245
|
||||
},
|
||||
{
|
||||
"category": "conversation",
|
||||
"tokens": 34595,
|
||||
"usage_percent": 17.2975
|
||||
"tokens": 37538,
|
||||
"usage_percent": 18.769
|
||||
},
|
||||
{
|
||||
"category": "other",
|
||||
|
|
@ -1447,6 +1527,40 @@
|
|||
"warnings": []
|
||||
},
|
||||
"state": "succeeded"
|
||||
},
|
||||
"exit@1": {
|
||||
"first_event_seq": 1274,
|
||||
"prompt": null,
|
||||
"response": null,
|
||||
"completion": {
|
||||
"outcome": "succeeded",
|
||||
"notes": null,
|
||||
"failure_reason": null,
|
||||
"timestamp": "2026-05-27T02:49:51.873475Z"
|
||||
},
|
||||
"provider_used": null,
|
||||
"diff": null,
|
||||
"script_invocation": null,
|
||||
"script_timing": null,
|
||||
"parallel_results": null,
|
||||
"output": null,
|
||||
"started_at": "2026-05-27T02:49:51.873448Z",
|
||||
"handler": "exit",
|
||||
"timing": {
|
||||
"wall_time_ms": 0,
|
||||
"inference_time_ms": 0,
|
||||
"tool_time_ms": 0,
|
||||
"active_time_ms": 0
|
||||
},
|
||||
"usage": {
|
||||
"input_tokens": 0,
|
||||
"output_tokens": 0,
|
||||
"total_tokens": 0,
|
||||
"reasoning_tokens": 0,
|
||||
"cache_read_tokens": 0,
|
||||
"cache_write_tokens": 0
|
||||
},
|
||||
"state": "succeeded"
|
||||
}
|
||||
}
|
||||
}
|
||||
48
stages/005-audit@2/response.md
Normal file
48
stages/005-audit@2/response.md
Normal file
|
|
@ -0,0 +1,48 @@
|
|||
## Audit Results
|
||||
|
||||
### Evidence Examined
|
||||
|
||||
**Production-code `unwrap()` — 0 violations**
|
||||
- Scanner found 31 `.unwrap()` hits, all in `#[cfg(test)]`-gated modules:
|
||||
- `fabro-workflow/src/pipeline/execute/tests.rs` — included via `#[cfg(test)] #[path = ...] mod tests;`
|
||||
- `fabro-server/src/server/tests.rs` — same gating pattern
|
||||
- No production code contains `unwrap()`
|
||||
|
||||
**Production-code `expect()` with weak messages — 0 violations**
|
||||
- 57 items found by scanner; all in test support files (`test_support.rs`), integration test directories (`tests/it/`), or `examples/`
|
||||
- All production `expect()` messages were fixed in prior passes
|
||||
|
||||
**Production-code `panic!`/`unreachable!`/`todo!`/`unimplemented!` — 26 hits, all justified**
|
||||
|
||||
Every production-code occurrence falls into an explicitly allowed category:
|
||||
|
||||
| Category | Instances |
|
||||
|----------|-----------|
|
||||
| Hardcoded demo/tool constants | `demo/mod.rs:247,258,1178`, `tools.rs:48,81` |
|
||||
| Structurally-impossible match arms (with explanation) | `condition.rs:117`, `event/convert.rs:837`, `router.rs:52`, `openai_compatible.rs:304`, `catalog.rs:408`, `run_catalog_index.rs:20`, `diagnostics.rs:352`, `server.rs:3153`, `handler/system.rs:487,587`, `subagent.rs:237` |
|
||||
| Loop invariants (loop always returns) | `executor.rs:410`, `2026050101_migration:463` |
|
||||
| CLI preprocessing (handled before bootstrap) | `main.rs:424,426` |
|
||||
| Caller-contract invariant (only called after `is_terminal()`) | `wait.rs:110` |
|
||||
| Programming regression guard (full comment) | `strategy.rs:75` |
|
||||
| Debug-assertions only; release falls through to `Ok(())` | `safe_url.rs:141` |
|
||||
|
||||
All 26 have explicit, reviewable justification messages.
|
||||
|
||||
**Test suite: 6470/6470 passed, 181 skipped**
|
||||
|
||||
### Conclusion
|
||||
|
||||
Every concrete requirement in the goal is satisfied by current evidence:
|
||||
- `unwrap()`: 0 in production
|
||||
- Weak `expect()`: 0 in production
|
||||
- `panic!`/`unreachable!` without justification: 0 in production
|
||||
- All tests green
|
||||
|
||||
{
|
||||
"outcome": "succeeded",
|
||||
"preferred_next_label": "Done",
|
||||
"context_updates": {
|
||||
"goal_status": "complete",
|
||||
"goal_remaining_work": ""
|
||||
}
|
||||
}
|
||||
6
stages/005-audit@2/status.json
Normal file
6
stages/005-audit@2/status.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"outcome": "succeeded",
|
||||
"notes": "Stage completed: audit",
|
||||
"failure_reason": null,
|
||||
"timestamp": "2026-05-27T02:49:48.038642Z"
|
||||
}
|
||||
6
stages/006-exit@1/status.json
Normal file
6
stages/006-exit@1/status.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"outcome": "succeeded",
|
||||
"notes": null,
|
||||
"failure_reason": null,
|
||||
"timestamp": "2026-05-27T02:49:51.873475Z"
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue