The link_checker and the daily 5xx error log produce a steady stream of
broken-link and crash specs (see the dozens of _broken_links_in_ and
*_502_spec.md files under docs/planning/specs/). Cluster recurring
failures by stack trace / route / link target, and emit code_proposal
artifacts (kind registered at scidex/atlas/artifact_registry.py:100) that
describe a concrete fix: target files, proposed change, estimated LoC. The
proposal becomes a first-class artifact — humans and agents can discuss it
before any code is written, and the eventual PR cites it as parent.
python3 -m scidex.forge.code_proposal_generator --window-days 3--dry-run, registers code_proposal artifacts with requiredfeature_summary, target_files, proposed_changes, plusest_loc.
artifact_links link_type='derives_from' (sources may be error_loglink_check_result artifact rows).
metadata.severity='small' and the existing Senate auto-merge bot picks_quality_to_priority.
target_files array.
scidex/forge/code_proposal_generator.py: sourcelink_check_results and error_logs tables; bucket by route orquest_engine.scidex.atlas.artifact_registry — code_proposal kind ready.link_checker and error-log tables.scidex/forge/code_proposal_generator.py.artifacts table (types link_check_result/error_log), link_check_results table (graceful fallback when absent), and spec files under docs/planning/specs/ (skips status: completed).scidex.core.llm.complete with structured "diagnose-then-prescribe" template; falls back to deterministic stubs when LLM unavailable.code_proposal artifacts via artifact_registry.register_artifact; required metadata fields: feature_summary, target_files, proposed_changes; optional est_loc.code_proposal artifacts with matching sorted target_files before registering; also catches ArtifactValidationError (title uniqueness) as a safe dedup fallback.small uses quality_score=0.35 → Senate _quality_to_priority maps to priority 64; auto-merge bot picks it up.artifact_links with link_type='derives_from' created for each source artifact ID.--dry-run and --mock flags fully functional.--mock run 1 → 10 registered; run 2 → skipped_dedup=10.