Skip to content

chore: adopt wellmanifest new-project 0.20.25 - #139

Merged
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/099-adopt-0-20-25
Sep 12, 2026
Merged

chore: adopt wellmanifest new-project 0.20.25#139
ifuri-validator-agent[bot] merged 1 commit into
mainfrom
ticket/099-adopt-0-20-25

Conversation

@tom-sapletta-com

Copy link
Copy Markdown
Contributor

Summary

  • adopt immutable wellmanifest/new-project 0.20.25 at d54878a105a20d84dd554f205bc177dcacc8730a
  • regenerate managed governance payload and align pyproject pin
  • record ticket-099 validation evidence

Validation

  • goal governance adopt --source-revision d54878a105a20d84dd554f205bc177dcacc8730a --check
  • ./project/governance-check.sh --base origin/main --head HEAD --actor agent
  • ./scripts/install-agent-hosts.sh --check
  • python -m pytest -q tests (743 passed, 2 skipped)

Ticket: ticket-099

@ifuri-validator-agent ifuri-validator-agent Bot left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Validator approval after policy checks for exact head 3c111ffd0c731625a0d2151cb7fdd2c0ac9be9dd.

Ticket: ticket-099
Correlation ID: local-semcod-goal-pr-139-ticket-099
Model: openrouter/z-ai/glm-5.3-flash
Package advisory authority: ADVISORY (promotion FORBIDDEN)
Package digest: 4f618bdc3e03daae7660ac7cb71d629cc8f34bcb322725a778487e224b535753
Package evidence digest: 5fef5a5c5615434282581ca6ca67b91a07a0bbfd38ed6711887e9a6ba262bc04
Package files: 35; high-risk samples: .githooks/pre-commit, .governance/branch_lifecycle_check.py, .governance/change_lease_check.py
Reviewed diff chunks: 22
Advisory LLM verdict: APPROVE
Advisory summary: Reviewed all 22 diff chunk(s). This chunk of a governance standard-pack adoption (new-project 0.20.25) makes four coherent changes: (1) ticket identifiers widened from exactly three digits to three-or-more, consistently in the pre-commit branch regex and the approval-evidence schema pattern; (2) SQLite ticket-storage support in .githooks/pre-commit with a fail-closed 'unknown ticket storage mode' branch and an early return so SQLite transitions skip the Git carrier-commit check; (3) agent_host_check.py gains a tomllib/tomli fallback that degrades to tomllib=None on interpreters without either reader, with targeted skips for the Python ecosystem check so 3.11+ jobs still enforce the declaration; (4) two behavior-preserving refactors: reconcile_criterion_disposition extracted from reconcile in branch_intent_reconciliation.py (disposition rules for implemented/partial/superseded/missing/unknown are unchanged) and parse_snapshot_pulls extracted from parse_snapshot in branch_lifecycle_check.py (PR number validation, dedup, and field checks are unchanged). All required checks pass per test_results_data (test 3.12, test 3.13, governance/enforce, governance/remote lifecycle), so approval is permitted. | Chunk 2 of 22: (1) relaxes the change-evaluation ticket pattern from exactly 3 digits to 3+ digits, consistent with the ticket-099 adoption; (2) refactors change_lease_check.py by extracting validate_publication_lease_fields, transition_identity_error, transition_phase_error, transition_receipt, and replacement_receipt_error — extracted logic is behavior-preserving relative to the removed inline code; (3) refactors check_required_checks.py by extracting bound_check_pairs and introducing an own_identity helper (regex-based remote-URL parsing plus os/subprocess usage, whose body falls into the next chunk). All protected required checks (test 3.12, test 3.13, governance / remote lifecycle, governance / enforce) report PASS, and the reported test run shows 743 passed, 2 skipped with no failures. | Chunk 3 of 22 refactors .governance/check_required_checks.py: extracts source_for_check and print_check_success helpers and adds a new check_instance_identity gate that rejects required-checks instances declaring another repository (including the unadapted template identity), preserving prior exit codes (1 for identity errors, 2 for missing source). generate_required_checks.py mechanically extracts inspect_declaration; governance_check.py extracts delivery_classes_valid/delivery_profiles_valid helpers with unchanged logic. The decision-record schema relaxes the ticket pattern from ^ticket-[0-9]{3}$ to ^ticket-[0-9]{3,}$, consistent with ticket-099. All four protected required checks pass. | Chunk 4 refactors delivery/intent validation into reusable helpers (standard_adoption_header_error, validate_intent_value, parse_ticket_state_text, adoption_path_list_valid) and adds external ticket-record loading (sqlite/snapshot support via ticket_input.py). Refactors preserve original validation semantics: the standardAdoption takeover check now correctly uses value['fromRevision'] post-header-validation, and regex list validation was extracted without behavior change. All protected required checks pass (test 3.12/3.13, governance/remote lifecycle, governance/enforce), and the PR reports 743 passed / 2 skipped tests. No security issues in the visible code. | Chunk 5 of a governance tooling adoption (wellmanifest 0.20.25). Changes are behavior-preserving refactors of .governance/governance_check.py: extraction of dependency_is_terminal, unowned_scope_files, and decomposition of validate_domain_contract_graph into focused helpers (validate_domain_source, validate_domain_operation_header, validate_domain_models, validate_domain_commands, validate_domain_projections, validate_domain_queries, validate_domain_events, validate_domain_errors, validate_domain_error_status). Validation logic and error messages appear unchanged; composition in validate_domain_contract_graph preserves original ordering and data flow (models/commands/projections/event_index threaded correctly). All required checks pass (test 3.12, test 3.13, governance/enforce, governance/remote lifecycle) and the reported test run shows 743 passed, 2 skipped. | This chunk refactors existing governance checks (check_ticket_content split into virtual/file variants; check_delivery_base decomposed into observe/check helpers) with no behavioral regressions visible in the moved code. It adds support for database-backed virtual tickets, widens the ticket identifier regex to ticket-[0-9]{3,}, and extends the package manifest's allowlisted extendable mappings to include the required-checks template source with a documented backward-compatibility rationale. New verify_managed_base logic for managed-strategy takeover/restoration digests is coherent. All protected required checks (test 3.12/3.13, governance/enforce, governance/remote lifecycle) pass. | Chunk 7 of a standard-pack adoption (wellmanifest/new-project 0.20.25). Changes are largely behavior-preserving refactors: managed-base verification extracted into verify_managed_base, adoption-transition checks extracted into verify_adoption_transitions, and ticket-record scoping extracted into change_scoped_records. New functionality: CLI flags for external ticket snapshot validation (--ticket-database/--ticket-snapshot/--ticket-snapshot-sha256) with CI/local mode distinction, and published_adoption_validation_base to bound implicit adoption validation in fresh clones using origin remote refs. Error handling on load_external_ticket_records routes exceptions to a GOV-INTENT-002 report entry and returns None rather than raising, which changes behavior from fail-loud to fail-reported — appears intentional per the help text. All required protected checks pass (test 3.12/3.13, governance enforce, remote lifecycle); the extra onedev/local-verify pass is informational. | Chunk 8 of a standard-upgrade PR (wellmanifest/new-project 0.20.16 → 0.20.25). Changes are consistent: ticket-ID regexes relaxed from ^ticket-[0-9]{3}$ to ^ticket-[0-9]{3,}$ in intent.schema.json and both manifests, matching the new ticket-099; manifest.lock.json hashes updated for all corresponding managed files including the new ticket-activity-override.schema.json. All protected required checks (test 3.12/3.13, governance/enforce, governance/remote-lifecycle) pass, plus onedev/local-verify. | This chunk (9 of 22) of the wellmanifest/new-project 0.20.25 adoption contains manifest digest refreshes for updated managed files, package-manifest entries for new managed components (ticket_input.py, ticket_storage.py, ticket-activity-override schema), a required-checks source path change to the template file, a remediation-intent ticket regex widened from exactly-3 to 3+ digits, and new logic in precommit_standard_update.py that distinguishes staleness (newer published standard) from drift (managed files no longer matching the pinned lock). The staleness-only bypass is fail-closed: it requires the stable DIAGNOSTIC marker in Goal's output AND staged_managed_drift() to return an empty tuple, while None (unreadable evidence) or any drift keeps the commit refused. The git cat-file --batch parsing also fails closed on malformed output. All protected required checks (test 3.12, test 3.13, governance/remote lifecycle, governance/enforce) and onedev/local-verify pass. | This chunk of the remediation_intent.py changes is primarily a behavior-preserving refactor: evidence, applicability, and diagnostic-transition validation blocks were extracted into helper functions (_validate_finding_evidence, _validate_finding_applicability, _validate_finding_transition) and called from _validate_findings with identical logic and error codes. New helpers for action verification coverage, path scope checks, risk rules, and dependency cycle detection are consistent with existing validation patterns. The TICKET_ID regex loosening to ticket-[0-9]{3,} is a minor compatible widening. All protected required checks (test 3.12/3.13, governance / remote lifecycle, governance / enforce) and the local-verify check pass; PR cites 743 passed tests and governance validation runs. | Chunk 11 is a behavior-preserving refactor of the governance intent validator: large inline validation logic in _validate_actions is extracted into _validate_action_verifications, _validate_action_paths, _validate_action_risk, and _validate_action_dependencies, and the criteria/guidance/t2c checks are split into _validate_planning_guidance, _validate_todo2code_contract, and _validate_finding_criteria. The extracted logic matches the removed inline code (verification coverage, path scope/forbidden checks, DESTRUCTIVE/STATE_RISK risk rules, dependency graph with unknown-dep and cycle errors, and transitive P0/P1 RELEASE dependency enforcement). One duplicate empty line after _validate_planning_guidance is cosmetic. Required checks (test 3.12/3.13, governance/enforce, governance/remote lifecycle) all PASS with no failed checks reported. | This chunk primarily refactors existing governance validation logic in remediation_intent.py: the finding affectedPaths validation is extracted into _validate_finding_paths and unresolved-path detection into _validate_unresolved_paths, both preserving prior semantics (including status-dependent error/warning routing and 'unresolved:agent' sentinel handling). New functionality adds acceptance-criteria validation (non-empty array, exact fields, ID pattern, dedup, cross-references to findings/verifications, and verification coverage of findings) plus calls to _validate_finding_criteria, _validate_planning_guidance, and _validate_todo2code_contract. Cross-reference coverage checks are deterministic and add stricter consistency enforcement. No security concerns; no secrets, workflow changes, or privilege escalation in this chunk. All protected required checks pass (test 3.12/3.13, governance enforce, remote lifecycle), so approval is consistent with branch policy. | Chunk 13 is a behavior-preserving refactor of .governance/remediation_intent.py: monolithic render_llm and analyze_todo2code functions split into focused helpers (_render_findings, _projected_plan_items, _analyze_plan_scope, _analyze_finding_coverage, _analyze_criterion_coverage, _analyze_diagnostics) and CLI command bodies extracted into _write_todo2code_projection/_verify_todo2code_command. The reassembled analyze_todo2code call sequence (scope → finding coverage → criterion coverage → diagnostics) matches the original inlined logic, and validation logic in _projected_plan_items is unchanged. A partial start of standard_pack_check.py catalog_findings refactor is visible at the chunk edge but assessed within its own chunk. All protected required checks (test 3.12, test 3.13, governance/enforce, governance/remote lifecycle) PASS. | Chunk 14 of a governance standard upgrade (wellmanifest 0.20.25). Main change in .governance/standard_pack_check.py is a behavior-preserving refactor: catalog_findings and adoption_findings decomposed into helper functions (catalog_ownership_findings, catalog_profile_findings, adoption_record_findings, adoption_record_index) with identical validation logic, findings IDs, and ordering. Also relaxes terminal-receipt ticket pattern from exactly 3 digits to 3+ digits and introduces a new ticket-activity-override schema with a missingPolicy enum extension. Schema tightening (path pattern, additionalProperties) is reasonable. All protected required checks (test 3.12, test 3.13, governance/remote lifecycle, governance/enforce) pass. | Chunk 15 of 22 modifies .governance/ticket_activity.py: refactors terminal receipt validation into _validate_terminal_receipt (behavior-preserving), adds an opt-in override mechanism for the missing-registry policy, and introduces git-ancestry delivery verification (delivery_landed / _unmerged_ticket_branch) for tickets whose receipt registry is absent. Default remains the conservative status-projection policy; git-ancestry is strictly opt-in via a strictly-validated override file. Refactors maintain field validation, SHA/timestamp/branch regex checks, and receiptRef uniqueness. All required protected checks (test 3.12/3.13, governance enforce, remote lifecycle) pass, as does local verification. | Chunk 16 shows refactoring and a new ticket-input module with strong defensive validation: symlink/hardlink rejection, digest binding of documents and files, strict JSON key uniqueness, path traversal rejection, SQLite read-only/query-only/trusted_schema=OFF access, bounded sizes, private DB mode enforcement, and snapshot-outside-git-checkout enforcement. The validate_receipt_lifetime extraction in ticket_allocation.py is a behavior-preserving refactor. All protected required checks (test 3.12/3.13, governance/enforce, governance/remote lifecycle) passed, plus local verify. | Chunk 17 refactors work_continuity.py by extracting checkpoint progress/effect validation into helper functions with equivalent constraints (bounded arrays, unique idempotency keys, non-overlapping criteria, nextAction must remain unfinished). New ticket_storage.py bridges to a digest-pinned Registry runtime with strict validation: SHA-256 pin format and digest match, 1MB bounded runtime files, symlink checks, subprocess timeout, ticket identity regex, single-line title enforcement, and generic error output that avoids echoing inputs or stderr. ticket_input.py snapshot decoding enforces exact key sets, binding equality, execution/merge authorization false, duplicate ticket rejection, and bounded snapshot size. All protected required checks (test 3.12, test 3.13, governance/enforce, governance/remote lifecycle) pass. | Chunk 18 of the ticket-099 standard adoption PR contains mostly mechanical refactors in .governance/work_continuity.py, workspace_lifecycle_check.py, and worktree_overlap_check.py: checkpoint validation extracted into validate_checkpoint_progress, adoption-pin validation extracted into validate_adoption_pin, workspace repository discovery extracted into discover_workspace_repositories, and the shared-default-branch contested-path logic extracted into changes_against_shared_default with the existing conservative rename-handling comment preserved. intent_state gains a sqlite/files storage-mode switch loading ticket_input.py via importlib. All protected required checks (test 3.12/3.13, governance/enforce, governance/remote lifecycle) pass. | Chunk 19 of 22 refactors worktree_overlap_check.py by extracting behavior-preserving helpers (virtual_ticket_files, ticket_status_override, scope_intent, ticket_scope_record, ticket_pair_findings, checkout_pair_findings, activity_findings) from ticket_scopes, discover_checkouts, and overlap_findings. The overlap detection logic (GOV-WORKTREE-OVERLAP-001/002), evidence payloads, and conservative rename-conflict path model are preserved. New SQLite-backed virtual ticket storage integrates cleanly with explicit AuditError propagation on invalid storage mode, missing status, or invalid intent, while file-based storage retains its tolerant intent parsing. All four protected required checks passed. | Chunk 20 contains behavior-preserving refactors: overlap_findings logic extracted into checkout_pair_findings with an added inventory_by_path lookup and activity_findings call; worktree_path_check.py extracts _legacy_v1_stem, _classify_location, and _mark_duplicate_deliveries helpers with unchanged classification logic; worktrees.lock.json bumps the wellmanifest/worktrees dependency 0.5.2→0.5.3 with updated revision and SHA; AGENTS.md documents the opt-in SQLite ticket storage mode (explicitly noting local config/DB grants no protected-CI approval); TICKETS.md index addition. All protected required checks (test 3.12/3.13, remote lifecycle, enforce) and local-verify pass, and PR reports 743 passed / 2 skipped. | Chunk covers ticket index updates, extended new-ticket.sh (new --storage/--ticket-store options plus SQLite bridge path), and the new ticket-099 README/intent for the 0.20.25 standard adoption. All protected required checks (test 3.12/3.13, governance/remote lifecycle, governance/enforce) pass. The new-ticket.sh changes are coherent: storage mode validation, digest-pinned Registry writer verification before use, and a database-aware highest-ticket counter with the legacy 3-digit regex extended to {3,}. SQLite mode intentionally exits before file-based ticket scaffolding, which matches the stated storage contract. | Chunk 22 of 22 is the tail of a wellmanifest standard adoption (0.20.16 to 0.20.25 at revision d54878a105a20d84dd554f205bc177dcacc8730a). Visible changes: pyproject.toml [tool.wellmanifest] pin updated to standard 0.20.25 / revision d54878a, matching the intent delivery.standardAdoption range and the PR outcome; intent/package-manifest registration of shared instance paths (.governance manifests, pyproject.toml, project/**) with sensible forbiddenPaths (.env, per-ticket user-*.md); and a regex relaxation in scripts/runtime.sh from /^ticket-[0-9]{3}$/ to /^ticket-[0-9]{3,}$/ to accommodate 3+ digit ticket IDs (ticket-099). The regex change is the only code-level behavioral change; it loosens validation slightly but remains anchored to a strict ticket-NNN+ shape and is consistent with the ticket naming convention used by new-ticket.sh. All required checks reported PASS (test 3.12, test 3.13, governance/enforce, governance/remote lifecycle) plus onedev/local-verify; PR reports 743 passed, 2 skipped, no failures. No behavior change beyond the ticket-ID validator, consistent with the declared non-goals.
Advisory findings: none
The LLM output above is advisory and was not used as the approval trust root.
Semantic review prerequisite: satisfied; policy 676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7.

Actual PR impact radar

Exact range: 1360d7ef6b02b233708933af83edaf9f53d8840d...3c111ffd0c731625a0d2151cb7fdd2c0ac9be9dd
Change digest: ddbd2d31a605f78829105dce526b28e33550fd98f64bba4af63a2b096ae9b639
Score: 72/100 (L), estimated 240 min, split recommended: true
Affected services/components: repository-wide/unclassified

Machine-readable radar JSONL and SVG
{"actual_change":{"additions":2686,"base_sha":"1360d7ef6b02b233708933af83edaf9f53d8840d","binary_files":0,"categories":{"code":21,"configuration":15,"docs":3},"change_digest":"ddbd2d31a605f78829105dce526b28e33550fd98f64bba4af63a2b096ae9b639","comparison":"1360d7ef6b02b233708933af83edaf9f53d8840d...3c111ffd0c731625a0d2151cb7fdd2c0ac9be9dd","deletions":1205,"file_count":39,"files":["githooks/pre-commit","governance/agent_host_check.py","governance/approval-evidence.schema.json","governance/branch_intent_reconciliation.py","governance/branch_lifecycle_check.py","governance/change-evaluation.schema.json","governance/change_lease_check.py","governance/check_required_checks.py","governance/decision-record.schema.json","governance/generate_required_checks.py","governance/governance_check.py","governance/intent.schema.json","governance/manifest.base.json","governance/manifest.json","governance/manifest.lock.json","governance/package-manifest.json","governance/precommit_standard_update.py","governance/remediation-intent.schema.json","governance/remediation_intent.py","governance/standard_pack_check.py","governance/terminal-receipt-registry.schema.json","governance/ticket-activity-override.schema.json","governance/ticket-activity.schema.json","governance/ticket_activity.py","governance/ticket_allocation.py","governance/ticket_input.py","governance/ticket_storage.py","governance/work_continuity.py","governance/workspace_lifecycle_check.py","governance/worktree_overlap_check.py","governance/worktree_path_check.py","governance/worktrees.lock.json","AGENTS.md","project/TICKETS.md","project/new-ticket.sh","project/ticket-099/README.md","project/ticket-099/intent.json","pyproject.toml","scripts/runtime.sh"],"head_sha":"3c111ffd0c731625a0d2151cb7fdd2c0ac9be9dd","service_count":0,"services":[]},"assessment_mode":"observed-pr","axes":{"coupling":5,"delivery":3,"scope":5,"uncertainty":3,"validation":2},"complexity":"L","confidence":0.9,"diagnostics":["RADAR-ACCEPTANCE-MISSING","RADAR-BUDGET-EXCEEDED"],"estimate":{"budget_minutes":30,"minutes":240,"within_budget":false},"impact":{"components":["githooks","governance","origin","project","repository-root"],"files":["AGENTS.md","githooks/pre-commit","governance/agent_host_check.py","governance/approval-evidence.schema.json","governance/branch_intent_reconciliation.py","governance/branch_lifecycle_check.py","governance/change-evaluation.schema.json","governance/change_lease_check.py","governance/check_required_checks.py","governance/decision-record.schema.json","governance/generate_required_checks.py","governance/governance_check.py","governance/intent.schema.json","governance/manifest.base.json","governance/manifest.json","governance/manifest.lock.json","governance/package-manifest.json","governance/precommit_standard_update.py","governance/remediation-intent.schema.json","governance/remediation_intent.py","governance/standard_pack_check.py","governance/terminal-receipt-registry.schema.json","governance/ticket-activity-override.schema.json","governance/ticket-activity.schema.json","governance/ticket_activity.py","governance/ticket_allocation.py","governance/ticket_input.py","governance/ticket_storage.py","governance/work_continuity.py","governance/workspace_lifecycle_check.py","governance/worktree_overlap_check.py","governance/worktree_path_check.py","governance/worktrees.lock.json","origin/main","project/TICKETS.md","project/governance-check.sh","project/new-ticket.sh","project/ticket-099/README.md","project/ticket-099/intent.json","pyproject.toml"],"public_interfaces":["governance/approval-evidence.schema.json","governance/change-evaluation.schema.json","governance/decision-record.schema.json","governance/intent.schema.json","governance/remediation-intent.schema.json","governance/terminal-receipt-registry.schema.json","governance/ticket-activity-override.schema.json","governance/ticket-activity.schema.json"],"runtime_dependencies":1},"schema":"subactor.ticket-radar/v1","score":72,"split":{"parts":[{"estimated_minutes":20,"name":"Define contract and acceptance boundary","scope":["governance/approval-evidence.schema.json","governance/change-evaluation.schema.json","governance/decision-record.schema.json","governance/intent.schema.json","governance/remediation-intent.schema.json","governance/terminal-receipt-registry.schema.json","governance/ticket-activity-override.schema.json","governance/ticket-activity.schema.json"]},{"estimated_minutes":30,"name":"Implement githooks","scope":["githooks"]},{"estimated_minutes":30,"name":"Implement governance","scope":["governance"]},{"estimated_minutes":30,"name":"Implement origin","scope":["origin"]},{"estimated_minutes":30,"name":"Implement project","scope":["project"]},{"estimated_minutes":30,"name":"Implement repository-root","scope":["repository-root"]},{"estimated_minutes":15,"name":"Validate and project to trackers","scope":["tests","planfile","github/gitlab/jira projections"]}],"reason":"estimated_minutes_exceed_budget","recommended":true},"standards":[{"id":"wellmanifest/dsl","revision":"6c60fc4e0dd1f1bb74f46a7745e28019908d1203","version":"0.1.0-dev"},{"id":"wellmanifest/ticket-lifecycle","revision":"5bf581907a87b46a13a73e6c033d3abe4d9a306f","version":"0.1.0-dev"},{"id":"wellmanifest/git-lifecycle","revision":"7d77d4b7af57e69bc75c3a0290b3a4805c5c4438","version":"0.2.0-dev"},{"id":"wellmanifest/logs","revision":"48c284ef7a069055c0bcb6b900147ce5e65f8b43","version":"0.3.0"}],"ticket_ref":"ticket-099"}
<svg xmlns="http://www.w3.org/2000/svg" width="128" height="128" viewBox="0 0 128 128" role="img"><title>ticket-099: chore: adopt wellmanifest new-project 0.20.25</title><rect width="128" height="128" rx="12" fill="#f8fafc"/><g stroke-width="1"><polygon points="64,55 72,61 69,71 59,71 56,61" fill="none" stroke="#d7dde5"/><polygon points="64,47 80,59 74,78 54,78 48,59" fill="none" stroke="#d7dde5"/><polygon points="64,38 89,56 79,85 49,85 39,56" fill="none" stroke="#d7dde5"/><polygon points="64,30 97,53 84,92 44,92 31,53" fill="none" stroke="#d7dde5"/><polygon points="64,21 105,51 89,99 39,99 23,51" fill="none" stroke="#d7dde5"/><line x1="64" y1="64" x2="64" y2="21" stroke="#aab4c0"/><line x1="64" y1="64" x2="105" y2="51" stroke="#aab4c0"/><line x1="64" y1="64" x2="89" y2="99" stroke="#aab4c0"/><line x1="64" y1="64" x2="39" y2="99" stroke="#aab4c0"/><line x1="64" y1="64" x2="23" y2="51" stroke="#aab4c0"/></g><polygon points="64,21 105,51 79,85 54,78 39,56" fill="#fb923c" fill-opacity="0.45" stroke="#c2410c" stroke-width="2"/><circle cx="64" cy="64" r="3" fill="#c2410c"/><g font-family="sans-serif" font-size="7" fill="#334155"><text x="64" y="11" text-anchor="middle">SCO</text><text x="114" y="48" text-anchor="middle">COU</text><text x="95" y="107" text-anchor="middle">UNC</text><text x="33" y="107" text-anchor="middle">VAL</text><text x="14" y="48" text-anchor="middle">DEL</text></g><text x="64" y="124" text-anchor="middle" font-family="sans-serif" font-size="8" fill="#0f172a">L · 240m</text></svg>
Merge will be attempted after this approval when explicitly authorized. ## Decision record (recomputable)
DECISION D-099-6948
TICKET ticket-099
HEAD_SHA 3c111ffd0c731625a0d2151cb7fdd2c0ac9be9dd
CORRELATION_ID local-semcod-goal-pr-139-ticket-099
ACTOR agent:ifuri-validator-agent[bot]
APPLIED_RULE P-CORE-015
INPUT advisory_package_receipt = {"binding":{"repository":"semcod/goal","pull_request":139,"base_branch":"main","base_sha":"1360d7ef6b02b233708933af83edaf9f53d8840d","head_sha":"3c111ffd0c731625a0d2151cb7fdd2c0ac9be9dd","policy_digest":"9dd446855325af22db66ceb38f9ef9991bb8d565c09850dcf3bba7d451a207b2","registry_digest":"42092d5b6c0174bc0d0546d80da79661ebac122f4494e0fac3d40def16b70412"},"package_digest":"4f618bdc3e03daae7660ac7cb71d629cc8f34bcb322725a778487e224b535753","evidence_digest":"5fef5a5c5615434282581ca6ca67b91a07a0bbfd38ed6711887e9a6ba262bc04","package_file_count":35,"samples":[{"path":".githooks/pre-commit","risk":"executable,git-hook","diff_digest":"88b272afcca4b8f16d2331a40e9964650a31ac993565fbc3c94b26ad1c38746d","sample_digest":"e963ba5dc620eafc91a566036565ecfb03530985414015e32a05f009552bf6f7"},{"path":".governance/branch_lifecycle_check.py","risk":"executable,code","diff_digest":"c35195662a9c8f33cd5a821062dcf826ca8f9f6ad31e491a9fd553d6a015d475","sample_digest":"884b9e7d10303463a3fff995781872f64ec0d5272894b0f19a5ff00f1423dee9"},{"path":".governance/change_lease_check.py","risk":"executable,code","diff_digest":"5d6272d5f6032270fa3fcfc8803fd50b64e1d64f74670ca594105e989612b490","sample_digest":"1469273cc7fbba8b68e6e1fb8526f79e9158c67e98e6f176e24e96f93b2dddb6"}],"authority":"ADVISORY","promotion":"FORBIDDEN"}
INPUT author_login = "tom-sapletta-com"
INPUT observed_checks = ["test (3.12)=PASS","test (3.13)=PASS","governance / enforce=PASS","governance / remote lifecycle=PASS","onedev/local-verify=PASS"]
INPUT required_checks = ["test (3.12)","test (3.13)","governance / remote lifecycle","governance / enforce"]
INPUT required_checks_source = "protected registry + GitHub applied rules (env/request)"
INPUT reviewer_login = "ifuri-validator-agent[bot]"
INPUT semantic_review_assessment = {"schema":"subactor.validator/semantic-review-assessment/v1","subject":{"repository":"semcod/goal","pull_request":139,"head_sha":"3c111ffd0c731625a0d2151cb7fdd2c0ac9be9dd","base_sha":"1360d7ef6b02b233708933af83edaf9f53d8840d","diff_sha256":"e531898b3cf5776a50c4f34488c8d938cfd37745e41206e62159ba26f10f41c8"},"policy":{"policy_schema":"subactor.validator/semantic-review-policy/v1","policy_version":1,"policy_sha256":"676cb4516bbfed2a000e40b9b1b6e4a430ecc761ec546aeb53d721a1905cfdd7","required":true,"critical_paths":[".governance/agent_host_check.py",".governance/approval-evidence.schema.json",".governance/branch_intent_reconciliation.py",".governance/branch_lifecycle_check.py",".governance/change-evaluation.schema.json",".governance/change_lease_check.py",".governance/check_required_checks.py",".governance/decision-record.schema.json",".governance/generate_required_checks.py",".governance/governance_check.py",".governance/intent.schema.json",".governance/manifest.base.json",".governance/manifest.json",".governance/manifest.lock.json",".governance/package-manifest.json",".governance/precommit_standard_update.py",".governance/remediation-intent.schema.json",".governance/remediation_intent.py",".governance/standard_pack_check.py",".governance/terminal-receipt-registry.schema.json",".governance/ticket-activity-override.schema.json",".governance/ticket-activity.schema.json",".governance/ticket_activity.py",".governance/ticket_allocation.py",".governance/ticket_input.py",".governance/ticket_storage.py",".governance/work_continuity.py",".governance/workspace_lifecycle_check.py",".governance/worktree_overlap_check.py",".governance/worktree_path_check.py",".governance/worktrees.lock.json"],"observed_paths":[".githooks/pre-commit",".governance/agent_host_check.py",".governance/approval-evidence.schema.json",".governance/branch_intent_reconciliation.py",".governance/branch_lifecycle_check.py",".governance/change-evaluation.schema.json",".governance/change_lease_check.py",".governance/check_required_checks.py",".governance/decision-record.schema.json",".governance/generate_required_checks.py",".governance/governance_check.py",".governance/intent.schema.json",".governance/manifest.base.json",".governance/manifest.json",".governance/manifest.lock.json",".governance/package-manifest.json",".governance/precommit_standard_update.py",".governance/remediation-intent.schema.json",".governance/remediation_intent.py",".governance/standard_pack_check.py",".governance/terminal-receipt-registry.schema.json",".governance/ticket-activity-override.schema.json",".governance/ticket-activity.schema.json",".governance/ticket_activity.py",".governance/ticket_allocation.py",".governance/ticket_input.py",".governance/ticket_storage.py",".governance/work_continuity.py",".governance/workspace_lifecycle_check.py",".governance/worktree_overlap_check.py",".governance/worktree_path_check.py",".governance/worktrees.lock.json","AGENTS.md","project/TICKETS.md","project/new-ticket.sh","project/ticket-099/README.md","project/ticket-099/intent.json","pyproject.toml","scripts/runtime.sh"]},"grounding":"full-diff-not-per-finding-proof","execution_authority":false,"status":"satisfied","reason":null,"review_sha256":"568a53ee818547fc5d3287148bf927e75ca54e97eddd1768d6e1800c66df0e39","unresolved":[]}
INPUT superseded_checks = []
INPUT ticket_radar_receipt = {"schema":"subactor.ticket-radar/v1","base_sha":"1360d7ef6b02b233708933af83edaf9f53d8840d","head_sha":"3c111ffd0c731625a0d2151cb7fdd2c0ac9be9dd","change_digest":"ddbd2d31a605f78829105dce526b28e33550fd98f64bba4af63a2b096ae9b639","score":72,"complexity":"L","estimated_minutes":240,"split_recommended":true,"services":[],"authority":"ADVISORY","promotion":"FORBIDDEN"}
VERDICT APPROVE AUTHORITY DETERMINISTIC
REJECTED REQUEST_CHANGES BECAUSE NO_UNSAFE_CHANGE_REASON_FOUND
ADVISORY llm_verdict = "APPROVE" MODEL "openrouter/z-ai/glm-5.3-flash"
ASSERT VERDICT_AUTHORITY != "ADVISORY"

@ifuri-validator-agent
ifuri-validator-agent Bot merged commit dfad90c into main Sep 12, 2026
5 checks passed
@ifuri-validator-agent
ifuri-validator-agent Bot deleted the ticket/099-adopt-0-20-25 branch September 12, 2026 12:31
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant