Files
2026-02-24 12:10:13 +01:00

79 lines
4.5 KiB
Plaintext

{
"batch": "Cross-cutting Sweep",
"batch_index": 1,
"assessments": {
"error_consistency": 74.0
},
"dimension_notes": {
"error_consistency": {
"evidence": [
"CLI command handlers frequently return upstream errors without operation context (e.g., cmd/get.go:47, cmd/scrape.go:91/126, cmd/push.go:52, cmd/ask.go:130), while nearby code in the same command set does wrap with contextual messages (e.g., cmd/push.go:81/91/97, cmd/scrape.go:132/146/204/210).",
"Server transport paths mix wrapped and raw propagation: write/encode paths use wrapTransportError and contextual fmt.Errorf (internal/server/server.go:223/229/267/273), but Start returns raw listener/scanner errors directly (internal/server/server.go:171/234).",
"Python CLI surfaces process-fatal errors inconsistently across sibling commands: direct sys.exit after print (cmd/devour_enhanced.py:600/607/616, cmd/devour_enhanced_v2.py:601/608/617), raise SystemExit in another command flow (desloppify/.../app/commands/next.py:137), and validation-time sys.exit in resolve flow (desloppify/.../app/commands/resolve/selection.py:84/87)."
],
"impact_scope": "subsystem",
"fix_scope": "multi_file_refactor",
"confidence": "high"
}
},
"findings": [
{
"dimension": "error_consistency",
"identifier": "cli_raw_error_passthrough_inconsistent_context",
"summary": "Sibling CLI commands mix raw error passthrough and contextual wrapping.",
"related_files": [
"cmd/get.go",
"cmd/scrape.go",
"cmd/push.go",
"cmd/ask.go"
],
"evidence": [
"runGet returns constructDocURL error directly (cmd/get.go:47).",
"runScrape returns load/scrape errors directly (cmd/scrape.go:91, cmd/scrape.go:126).",
"runPush returns loadAppConfig error directly (cmd/push.go:52), but wraps later failures with operation labels (cmd/push.go:81, cmd/push.go:91, cmd/push.go:97).",
"runAsk similarly passes config load error directly (cmd/ask.go:130)."
],
"suggestion": "Standardize command-boundary wrapping: every external call failure should be wrapped with command+operation context (for example, \"load app config for get command: %w\") before returning.",
"confidence": "high",
"impact_scope": "subsystem",
"fix_scope": "multi_file_refactor"
},
{
"dimension": "error_consistency",
"identifier": "transport_error_contract_mixed_wrapped_and_raw",
"summary": "Server transport code alternates between wrapped errors and raw returns.",
"related_files": [
"internal/server/server.go",
"cmd/serve.go"
],
"evidence": [
"RPC setup/handler paths in cmd/serve consistently wrap with operation context (e.g., cmd/serve.go:69, cmd/serve.go:96, cmd/serve.go:107).",
"internal server code has contextual wrappers for encode paths (internal/server/server.go:223, 229, 267, 273), but returns raw runtime errors in Start (internal/server/server.go:171, 234)."
],
"suggestion": "Define a transport-level error policy (wrapped with transport+operation context vs typed sentinel mapping) and apply it to listener/scanner failure returns in Start for parity with existing wrapped encode paths.",
"confidence": "high",
"impact_scope": "module",
"fix_scope": "multi_file_refactor"
},
{
"dimension": "error_consistency",
"identifier": "python_cli_exit_strategy_fragmented",
"summary": "Python command flows use inconsistent fatal-error signaling patterns.",
"related_files": [
"cmd/devour_enhanced.py",
"cmd/devour_enhanced_v2.py",
"desloppify/desloppify/desloppify/app/commands/next.py",
"desloppify/desloppify/desloppify/app/commands/resolve/selection.py"
],
"evidence": [
"Enhanced scripts print then call sys.exit(1) in multiple branches (cmd/devour_enhanced.py:600/607/616; cmd/devour_enhanced_v2.py:601/608/617).",
"Another command raises SystemExit directly on output failure (desloppify/.../next.py:137).",
"Resolve validation path also exits process directly via sys.exit(1) (desloppify/.../resolve/selection.py:84/87)."
],
"suggestion": "Adopt one CLI failure contract for Python commands (for example, raise a command exception and let one top-level runner map to exit code and formatted output) instead of mixing local sys.exit, print+exit, and raise SystemExit.",
"confidence": "medium",
"impact_scope": "subsystem",
"fix_scope": "architectural_change"
}
]
}