mirror of
https://github.com/Dvorinka/Devour.git
synced 2026-06-03 20:13:03 +00:00
79 lines
4.5 KiB
Plaintext
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"
|
|
}
|
|
]
|
|
} |