{ "decision_id": "route-20260611-122846-cf37f769", "timestamp": "2026-06-11T12:28:46Z", "request_type": "feature-modification", "request_summary": "Extend the existing router capability with repo profile support", "repo_stage": "seed", "action": "review", "decision_basis": "policy_guardrail", "routing_confidence": 0.25, "routing_confidence_level": "low", "decision_confidence": 0.95, "decision_confidence_level": "high", "confidence": 0.25, "confidence_level": "low", "overlap_score": 0.0, "primary_capability": "scripts", "primary_capability_stage": "candidate", "secondary_capabilities": [], "candidate_capabilities": [ { "id": "scripts", "name": "Scripts Capability", "status": "candidate", "stage": "candidate", "score": 0.25, "signals": { "intent_match": 0.0, "path_proximity": 1.0, "dependency_proximity": 0.0, "public_entry_available": 1.0, "extension_point_available": 0.0, "owner_coverage": 1.0, "raw_score": 0.45, "penalty": 0.2, "candidate_score": 0.25, "positive_signals": { "profile_backed": false, "path_proximity": 1.0, "dependency_proximity": 0.0, "has_public_entries": true, "has_extension_points": false, "owner_modules_count": 1, "matching_intent": false, "repo_stage": "seed" }, "negative_signals": { "capability_stage": "candidate", "provisional_stage": false, "heuristic_public_entry": true, "owner_unclear": false, "generated_only": true, "profile_missing": true, "multi_module_span": false }, "risk_signals": { "keyword_hit": false, "high_risk_capability": false, "repo_stage": "seed", "request_requires_review": false, "duplicate_signal": false } } } ], "candidate_modules": [ { "path": "scripts", "id": "module-scripts", "layer": "domain-service", "domain": "scripts" } ], "required_reads": [ "bootstrap_router.py", "scripts/bootstrap_router.py", "scripts/check_bundle_governance.py" ], "required_checks": [ "check-reuse", "check-deps", "check-public-api", "check-index-freshness" ], "forbidden_paths": [], "review_required": true, "coordination_required": false, "composite_route_required": false, "recommended_next_action": "request_human_review", "recommended_next_steps": [ "Read bootstrap_router.py", "Read scripts/bootstrap_router.py", "Read scripts/check_bundle_governance.py", "Add or refine a repository profile before trusting automatic routing", "Confirm the real public entry before enabling stronger guardrails", "Record the final decision with sync_feedback.py after human review", "Treat this route as advisory and require manual confirmation before editing", "Keep repository-local routing data provisional until boundaries stabilize" ], "why_not_actions": { "reuse": [ "request asks for behavior change, not just reuse", "seed-stage repositories do not trust existing boundaries enough for auto-reuse" ], "extend": [ "early-stage repositories restrict automatic extension", "capability stage is not stable enough for trusted extension" ], "extract": [ "early-stage repositories avoid auto-extraction", "request does not provide strong extraction or duplicate signals", "not enough repeated changed surfaces to justify extraction" ], "new": [] }, "block_reason": { "code": "early_repo_policy_guardrail", "severity": "P1", "summary": "Early repository policy blocks automatic routing." }, "missing_evidence": [ { "type": "capability_mapping", "target": "scripts", "why_it_matters": "The candidate is generated or heuristic rather than profile-backed." }, { "type": "public_entry", "target": "scripts", "why_it_matters": "Reuse or extension is unsafe without a confirmed public entry." } ], "analysis_directions": [ "Inspect the path-to-capability map and capability catalog before making any code changes.", "Classify the changed surface as core capability, facade, adapter, UI transport, test, or governance metadata.", "Confirm whether the candidate boundary is provisional scaffolding or a stable long-term capability.", "Review contracts and forbidden patterns for scripts before proposing implementation work.", "Trace imports and callers for the changed paths to verify whether this is reuse, extension, extraction, or a new boundary." ], "safe_next_steps": [ "Read project-change-router/references/path-to-capability-map.yaml for the changed paths.", "Read project-change-router/references/capability-catalog.yaml for candidate capabilities.", "Read bootstrap_router.py", "Read scripts/bootstrap_router.py", "Read scripts/check_bundle_governance.py", "Run python scripts/check_bundle_governance.py --repo --format json before editing.", "Run python scripts/validate_router_bundle.py --repo --format json if the bundle may be stale." ], "suggested_questions": [ "Is this phase limited to routing/governance scaffolding, or is product behavior implementation allowed?" ], "profile_repair_hints": [ { "kind": "capability_profile", "suggestion": "Promote scripts from generated evidence into the repository profile after human confirmation.", "confidence": "medium" }, { "kind": "public_entry", "suggestion": "Confirm and record public_entries for scripts before allowing automatic reuse or extension.", "confidence": "high" }, { "kind": "evaluation_case", "suggestion": "After the human decision, add a curated evaluation case for this routing scenario.", "confidence": "high" } ], "override_requirements": [ { "scope": "current_task", "required_text": "I authorize overriding this router stop only for the current task after recording the reason.", "must_record_reason": true, "expires_after": "current_task" }, { "scope": "paths", "allowed_paths": [ "scripts/router_core.py" ], "must_record_reason": true, "expires_after": "current_task" }, { "scope": "phase", "required_text": "I authorize this phase-specific router stop override and do not extend it to later phases.", "must_record_reason": true, "expires_after": "current_phase" } ], "allowed_write_paths": [], "forbidden_write_paths": [ "**" ], "must_read_before_edit": [ "bootstrap_router.py", "scripts" ], "post_change_closeout": [ { "step": "validate_bundle", "command": "python scripts/validate_router_bundle.py --repo --format json", "when": "after any routed change" }, { "step": "governance_audit", "command": "python scripts/check_bundle_governance.py --repo --format json", "when": "after capability, ownership, public entry, lifecycle, or path boundary changes" }, { "step": "route_evaluation", "command": "python scripts/run_evaluation.py --repo --format json", "when": "after route-affecting changes or before committing router metadata" }, { "step": "record_feedback", "command": "python scripts/sync_feedback.py --repo --feedback-file --format json", "when": "after human review or override" }, { "step": "capability_summary", "command": "Report whether owner_modules, public_entries, contracts, lifecycle, or evaluation cases changed.", "when": "before closing work on scripts" }, { "step": "gitignore_inclusion_check", "command": "Check whether generated or report directories should be ignored before commit.", "when": "after creating files" } ], "composite_route": { "required": false, "primary": "scripts", "secondary": [], "participants": [ { "capability": "scripts", "role": "primary", "stage": "candidate", "score": 0.25 } ], "coordination_policy": "single_route_or_not_required" }, "capability_lifecycle_action": { "intent": "none", "review_required": false, "required_metadata": [] }, "evaluation_regression_hints": [ { "kind": "route_regression_case", "suggested_id": "early-repo-policy-guardrail-extend-the-existing-router-capability-with-repo", "expected_action": "review", "expected_capabilities": [ "scripts" ], "changed_paths": [ "scripts/router_core.py" ], "reason": "Capture this route outcome after human confirmation so future agents do not repeat the same ambiguity." } ], "confidence_reasons": [ "strong path proximity to owner module", "public entry evidence exists", "public entry is heuristic only", "no explicit profile mapping supports this route" ], "veto_reasons": [ "repo_stage=seed blocks auto-route into existing boundaries" ], "positive_signals": { "profile_backed": false, "path_proximity": 1.0, "dependency_proximity": 0.0, "has_public_entries": true, "has_extension_points": false, "owner_modules_count": 1, "matching_intent": false, "repo_stage": "seed" }, "negative_signals": { "capability_stage": "candidate", "provisional_stage": false, "heuristic_public_entry": true, "owner_unclear": false, "generated_only": true, "profile_missing": true, "multi_module_span": false }, "risk_signals": { "keyword_hit": false, "high_risk_capability": false, "repo_stage": "seed", "request_requires_review": false, "duplicate_signal": false }, "reasoning": [ "seed-stage repository does not auto-route into existing capability boundaries" ], "authorization_context": { "source_commit": null, "structure_digest": "0000000000000000000000000000000000000000000000000000000000000000", "routing_truth_digest": "0000000000000000000000000000000000000000000000000000000000000000", "freshness_classification": "unknown", "runtime_identity_digest": "f6c40637285745c88209d816e03973c1164f23e4479da36fa044dd5aa05e127c" }, "route_fingerprint": "597bff8ced862f38805d4a3416404f8fbd953dcac855003e9d5191fc94adb922", "source_of_truths": { "capability_catalog": { "generated_by": "bootstrap_router", "generated_at": "2026-06-11T12:05:29Z", "source_commit": "f4b7c90b77828d5cad306acf7ec8d84962926744" }, "module_map": { "generated_by": "bootstrap_router", "generated_at": "2026-06-11T12:05:29Z", "source_commit": "f4b7c90b77828d5cad306acf7ec8d84962926744" }, "exception_registry": { "generated_by": "bootstrap_router", "generated_at": "2026-06-11T12:05:30Z", "source_commit": "f4b7c90b77828d5cad306acf7ec8d84962926744" } }, "changed_paths": [], "runtime_identity": { "skill_version": "0.4.0", "skill_git_commit": null, "installed_payload_digest": "a6d415b7b61b426b3b9b76d4f280e43303fecb02836c98f13800ea54c0ca5f73", "installed_payload_source": "example_fixture", "bundle_schema_compatibility": [ 1 ], "report_schema_version": 3, "reuse_engine_api_version": 2, "architecture_governance_api_version": 2, "typed_finding_schema_version": 1, "gate_policy_version": 1, "change_flow_api_version": 1, "authorization_api_version": 1, "parser_versions": { "python": 1, "typescript": 1, "java": 1 }, "identity_digest": "f6c40637285745c88209d816e03973c1164f23e4479da36fa044dd5aa05e127c" }, "typed_findings": [ { "schema_version": 1, "finding_id": "5e4ebf9953523ea2a8c67f68e4d36ec5e9c84bf74896e7d49169a91f67226aca", "type": "owner_unknown", "severity": "P0", "invariant_class": "always_global", "origin": "ownership", "delta_state": "unknown", "task_relevance": "relevant", "evidence_status": "incomplete", "policy_rule_id": "GATE-OWNER-001", "paths": [], "capabilities": [ "scripts" ], "relevance_trace": [ "capability:scripts -> finding:owner_unknown" ], "evidence_digest": "fdf1301e178316ccc6dfb114b292d0451b6f19f856f280b1c43f7e27e3be039d", "evidence": { "example": "resolve-entry.review-guidance", "block_reason": { "code": "early_repo_policy_guardrail", "severity": "P1", "summary": "Early repository policy blocks automatic routing." } }, "message": "Early repository policy blocks automatic routing." } ], "execution_gate": { "state": "blocked", "blocking": true, "conditional": false, "authoritative": true, "gate_policy_version": 1, "policy_rule_ids": [ "GATE-UNKNOWN-001", "GATE-HARD-001", "GATE-RELEVANT-001" ], "decisive_finding_ids": [ "5e4ebf9953523ea2a8c67f68e4d36ec5e9c84bf74896e7d49169a91f67226aca" ], "unknown_evidence": [ "5e4ebf9953523ea2a8c67f68e4d36ec5e9c84bf74896e7d49169a91f67226aca" ], "proposed_allowed_write_paths": [], "proposed_forbidden_write_paths": [], "allowed_write_paths": [], "forbidden_write_paths": [ "**" ], "required_commands": [ "python scripts/check_reuse.py --repo --format json", "python scripts/check_deps.py --repo --format json", "python scripts/check_public_api.py --repo --format json", "python scripts/check_index_freshness.py --repo --format json" ], "reason": "blocking or incomplete route evidence remains" }, "gate_shadow": { "legacy_state": "blocked", "new_state": "blocked", "classification": "equivalent", "cutover_eligible": true, "new_decisive_finding_ids": [ "5e4ebf9953523ea2a8c67f68e4d36ec5e9c84bf74896e7d49169a91f67226aca" ], "legacy_action": "review", "legacy_block_reason": { "code": "early_repo_policy_guardrail", "severity": "P1", "summary": "Early repository policy blocks automatic routing." } }, "must_read_targets": [ { "path": "bootstrap_router.py", "symbol": "$entry", "content_digest": "d4749b6bec6fac1253dd67daeb3693afaf20128f7cb93aa50a17ef06e1621725", "line_hint": 1, "reason": "routed required read", "resolution_status": "resolved" } ], "inventory_targets": [ { "path": "scripts", "reason": "inventory routed directory before selecting a file" } ], "unresolved_read_targets": [], "authorization_request": { "state": "requested", "task_id": "route-20260611-122846-cf37f769", "route_fingerprint": "597bff8ced862f38805d4a3416404f8fbd953dcac855003e9d5191fc94adb922", "pre_change_snapshot": "e2871e9368974761fa4ed25ee8e97135060baba65d7af21c0b952c456b693343", "paths": [], "owner": null, "canonical_root": null, "route": "review", "mutation_envelope": { "allowed_write_paths": [], "forbidden_write_paths": [] }, "request_fingerprint": "45cfa603216483ddffff5b92fcac4fd4e2573ffd927fc36d2020014af1e4a9d7" } }