feat: control-plane DB substrate for atomic assign/lease (Closes #613) #619
Merged
sysadmin
merged 4 commits from 2026-07-10 01:44:19 -05:00
feat/issue-613-allocator-db-substrate into master
Labels
Clear labels
allocator
anti-stomp
architecture
bug
chore
codex
concurrency
contamination
control-plane
dashboard
database
design
documentation
enhancement
gitea
glitchtip
important
incident
incident-bridge
integration
jenkins
labels
leases
mcp
mcp-health
mcp-menu
multi-project
mutating
nice-to-have
observability
portability
preflight
protected-branch
queue
read-only
reconnect
recovery
refactor
release
reliability
resumable-review
reviewer
roadmap
safety
security
self-hosted
sentry
stale-runtime
status:blocked
status:in-progress
status:pr-open
status:ready
terminal-lock
testing
tracker
type:bug
type:feature
type:feature
type:guardrail
visibility
workflow
workflow-hardening
workflow-hardening
Controller-owned work allocator
Prevent concurrent LLM session stomping
Architecture / structural design
OpenAI Codex client / workflow session surface
Concurrent session safety
Workflow or session contamination incident
MCP control-plane coordination and allocation authority
MCP operational dashboard/queue view
Internal coordination storage (SQLite/Postgres)
Design / investigation, no implementation
Docs / runbooks
New feature or improvement
Gitea MCP workflow
GlitchTip integration
Operational or process incident requiring durable audit trail
Sentry-to-Gitea incident bridging
Integration testing
Jenkins integration
Label taxonomy management
Lease adopt/release/expire lifecycle
MCP server / tooling
MCP namespace and runtime health
MCP menu surface
Work spanning multiple monitoring projects or Gitea repos
Mutating action; requires gating
Observability, metrics, traces, error reporting
Cross-platform / portability
Shared preflight gates before mutation
Protected branch / stable-branch policy concern
Work queue visibility and allocation
Read-only, no mutation
MCP client reconnect/reload recovery path
Recovery paths for stale/foreign leases
Code refactor / restructure
Release / versioning
Reliability / failure handling
Persist and resume prepared review verdicts across sessions
Reviewer workflow tooling
Roadmap / umbrella issue
Safety rails and fail-closed mutation guards
Security / trust boundary
Self-hosted infrastructure integration
Sentry error monitoring integration
Stale backend daemon / runtime-vs-master parity failures
Issue is blocked
Issue is being worked on
Issue has an open pull request
Issue is ready for work
Terminal review lock (#332) path
Tests / test coverage
Issue tracker hygiene / meta
Bug or defect
Feature or enhancement
Feature or enhancement
Safety gate or guardrail
Workflow state visibility for LLMs/operators
Cross-tool workflow
LLM workflow coordination hardening
LLM workflow coordination hardening
No labels
Milestone
No items
No Milestone
Projects
Clear projects
No projects
Notifications
Due Date
No due date set.
Dependencies
No dependencies set.
Reference: Scaled-Tech-Consulting/Gitea-Tools#619
Reference in New Issue
Block a user
Blocking a user prevents them from interacting with repositories, such as opening or commenting on pull requests or issues. Learn more about blocking a user.
Summary
Implements #613 — the control-plane DB substrate required by the allocator/control-plane/observability ADR (merged in PR #614 at
08c3488).Architecture: DB coordinates · Gitea records · Sentry/GlitchTip observe · bridge is the only path from observations → Gitea work.
Changes
control_plane_db.pyincident_linkstests/test_control_plane_db.pydocs/architecture/control-plane-db-substrate.mdHard rules enforced
issue/pronly (never raw Sentry/GlitchTip incidents)BEGIN IMMEDIATEtransactionwait(not a duplicate lease)no_safe_workrequire_valid_assignmentgates mutations by live lease + allowed actionsDependency chain (unchanged)
incident_links+ normal Gitea issues for assignable work.Validation
Closes #613
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-613-allocator-db-substrate
phase: claimed
candidate_head:
036b78e31etarget_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:31:14Z
expires_at: 2026-07-10T04:31:14Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-613-allocator-db-substrate
phase: validating
candidate_head:
036b78e31etarget_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:31:25Z
expires_at: 2026-07-10T04:31:25Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-613-allocator-db-substrate
phase: validated_blockers_found
candidate_head:
036b78e31etarget_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:33:19Z
expires_at: 2026-07-10T04:33:19Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-613-allocator-db-substrate
phase: review_decision
candidate_head:
036b78e31etarget_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:34:00Z
expires_at: 2026-07-10T04:34:00Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-613-allocator-db-substrate
phase: claimed
candidate_head:
036b78e31etarget_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:34:58Z
expires_at: 2026-07-10T04:34:58Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-feat-issue-613-allocator-db-substrate
phase: review_decision
candidate_head:
036b78e31etarget_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:35:08Z
expires_at: 2026-07-10T04:35:08Z
blocker: none
Canonical PR State
STATE: open; changes requested at pinned head
WHO_IS_NEXT: author
NEXT_ACTION: Fix the stale/terminal mutation gate, canonical incident_links uniqueness, regression coverage, and PR-range whitespace failure; push a new head for fresh review
NEXT_PROMPT:
WHAT_HAPPENED: Reviewer validated pinned head
036b78e31eand reproduced two substrate safety defectsWHY: The current gate authorizes stale/merged work and nullable incident scope permits duplicate canonical links
ISSUE: #613
HEAD_SHA:
036b78e31eREVIEW_STATUS: REQUEST_CHANGES prepared; formal submission pending this dry-run
MERGE_READY: false
BLOCKERS: stale/terminal mutation authorization; duplicate incident_links rows with NULL scope; PR-range trailing whitespace
VALIDATION: test_control_plane_db 12 passed; test_issue_lock_store 12 passed; targeted diagnostics reproduced both safety blockers; git diff --check prgs/master...HEAD failed at docs lines 3-4
LAST_UPDATED_BY: sysadmin (prgs-reviewer)
REQUEST_CHANGES at pinned head
036b78e31ea5d036452b3a52e0e086b01e0c763f.Blocking findings:
Mutation gate accepts stale or terminal work (
control_plane_db.py:737-782).require_valid_assignmentchecks only assignment/lease/action state. It never rejectswork_items.state in {merged, closed}and never comparesassignments.expected_head_shawithwork_items.current_head_sha. A diagnostic at this head assigned PR headold, updated the work item to headnew, then to statemerged; both calls torequire_valid_assignment(..., action="review")still succeeded. This lets #600 build on a substrate that authorizes stale-head or post-merge mutations. Fail closed on terminal state and head mismatch, and add regression tests.incident_linksdoes not preserve one canonical row when optional scope fields are NULL (control_plane_db.py:123-143, 870-930). SQLite UNIQUE constraints treat NULL values as distinct, so the declared conflict target does not fire whenprovider_base_url,provider_org, orprovider_projectis omitted. Two upserts for the same provider/issue produced[(1, "123", 1), (2, "123", 2)]. Normalize these key columns or use an expression index/conflict strategy that makes NULL scope canonical, and test repeated minimal upserts.PR-range diff check fails:
git diff --check prgs/master...HEADreports trailing whitespace indocs/architecture/control-plane-db-substrate.md:3-4. The baregit diff --checkon a clean detached checkout does not inspect committed PR changes.Validation:
pytest tests/test_control_plane_db.py -q— 12 passedpytest tests/test_issue_lock_store.py -q— 12 passedControlPlaneDBinstances — oneassigned, threewaitDependency note: #600 and #612 remain downstream until #613 is merged. This review does not treat either downstream issue as complete.
CTH: Reviewer Handoff
Status: request_changes_at_current_head
Next owner: author
Current blocker: stale/terminal mutation authorization and non-canonical incident_links upsert
Decision: REQUEST_CHANGES at head
036b78e31eProof: requested tests passed; targeted diagnostics reproduced both safety defects; PR-range diff check failed
Next action: fix the mutation gate and incident link uniqueness, add regression tests, remove trailing whitespace, then push a new head for fresh review
Ready-to-paste prompt: Address PR #619 review findings for issue #613, push fixes, and request a fresh reviewer run. Do not claim #600 or #612 complete.
[THREAD STATE LEDGER] PR #619 / Issue #613 — REQUEST_CHANGES prepared at pinned head
What is true now:
036b78e31eWhat changed:
What is blocked:
Who/what acts next:
Canonical Issue State
STATE: open; author fix commit pushed on PR #619 after REQUEST_CHANGES; awaiting re-review
WHO_IS_NEXT: reviewer
NEXT_ACTION: Re-review PR #619 at head
783ea88a01NEXT_PROMPT:
WHAT_HAPPENED: Author pushed fix commit
783ea88addressing REQUEST_CHANGES that was posted against reviewed head036b78e.WHY: Reviewer required fail-closed stale/terminal assignment gates, canonical incident_links upserts, and PR-range whitespace cleanup.
RELATED_PRS: #619; ADR via #614; issue #613; downstream #600 #612
BLOCKERS: no blocker
VALIDATION: pytest tests/test_control_plane_db.py -q → 15 passed; pytest tests/test_issue_lock_store.py -q → 12 passed; git diff --check prgs/master...HEAD → clean (exit 0)
LAST_UPDATED_BY: jcwalker3 (prgs-author)
[THREAD STATE LEDGER] PR #619 / Issue #613 — author fix commit pushed after REQUEST_CHANGES
What is true now:
783ea88a01036b78e31eWhat changed:
What is blocked:
Who/what acts next:
783ea88a01and verify the three prior blockers are resolved783ea88repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-783ea88
phase: claimed
candidate_head:
783ea88a01target_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:44:30Z
expires_at: 2026-07-10T04:44:30Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-783ea88
phase: validating
candidate_head:
783ea88a01target_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:44:36Z
expires_at: 2026-07-10T04:44:36Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-783ea88
phase: validated_blockers_found
candidate_head:
783ea88a01target_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:45:51Z
expires_at: 2026-07-10T04:45:51Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-783ea88
phase: review_decision
candidate_head:
783ea88a01target_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:46:35Z
expires_at: 2026-07-10T04:46:35Z
blocker: none
Canonical Issue State
STATE: open; author fix commit pushed on PR #619 for remaining code blockers from handoff at 783ea88; awaiting re-review
WHO_IS_NEXT: reviewer
NEXT_ACTION: Re-review PR #619 at head
16cd871fbdNEXT_PROMPT:
WHAT_HAPPENED: Author pushed
16cd871fixing two remaining blockers identified on head783ea88(formal RC post may be blocked by #332).WHY: Migration order and PR head-pin gaps were valid code defects independent of review-tooling status.
RELATED_PRS: #619; #613; #600 and #612 remain downstream
BLOCKERS: no blocker
VALIDATION: pytest tests/test_control_plane_db.py -q → 18 passed; pytest tests/test_issue_lock_store.py -q → 12 passed; git diff --check prgs/master...HEAD → clean
LAST_UPDATED_BY: jcwalker3 (prgs-author)
[THREAD STATE LEDGER] PR #619 / Issue #613 — author fix for remaining blockers after handoff at
783ea88What is true now:
16cd871fbd783ea88a01What changed:
What is blocked:
Who/what acts next:
16cd871fbdand verify both remaining blockers16cd871Canonical Issue State
STATE:
blocked
WHO_IS_NEXT:
reviewer
NEXT_ACTION:
implement and merge issue #620 so formal re-review can post on a new head after prior REQUEST_CHANGES without manual lock deletion
NEXT_PROMPT:
WHAT_HAPPENED:
Author controller filed durable issue #620 for the #332 open-PR new-head re-review deadlock observed on this PR.
WHY:
gitea_mark_final_review_decisiontreated prior REQUEST_CHANGES on the old head as terminal consumption for the same open PR, so formal review could not be posted at the new head; #594 only cleans locks after merge/close.RELATED_PRS:
#619 (this PR, evidence); depends on product fix in #620
BLOCKERS:
product blocker: durable review-decision lock keys by PR/run without head boundary; unblock after #620 lands so current head differs from locked old-head decision and fresh formal review is allowed
VALIDATION:
lock assessment has_lock=true is_moot=false cleanup_allowed=false PR open; error text terminal review mutation already consumed in this run (request_changes on PR #619); old formal RC head 036b78e31ea5d036452b3a52e0e086b01e0c763f; new head
783ea88a01LAST_UPDATED_BY:
jcwalker3 (prgs-author)
Cross-link
Durable defect: #620 — Allow fresh formal re-review on new PR head after prior REQUEST_CHANGES
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-16cd871
phase: claimed
candidate_head:
16cd871fbdtarget_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:58:03Z
expires_at: 2026-07-10T04:58:03Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-16cd871
phase: validating
candidate_head:
16cd871fbdtarget_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T02:58:10Z
expires_at: 2026-07-10T04:58:10Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-16cd871
phase: review_decision
candidate_head:
16cd871fbdtarget_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T03:00:16Z
expires_at: 2026-07-10T05:00:16Z
blocker: none
Canonical Issue State
STATE:
ready for review
WHO_IS_NEXT:
reviewer
NEXT_ACTION:
re-review PR #619 at head
2429d9d2e8for the incident_links migration metadata fail-closed fix and prior #613 substrate acceptance criteriaNEXT_PROMPT:
WHAT_HAPPENED:
Author pushed fix for remaining re-review blocker: silent discard of conflicting observation metadata during legacy incident_links migration.
WHY:
Migration previously compared only Gitea targets before deleting all but the lowest link_id; same-target rows with fingerprint-A vs B / event_count 1 vs 99 / status open vs resolved could collapse with silent data loss.
RELATED_PRS:
#619 (this PR, #613 substrate); #620 tracks separate #332 new-head formal review lock defect (not fixed here)
BLOCKERS:
none for re-review of this code fix; formal Gitea review posting may still be blocked by #620 tooling until that lands — local verdict still required
VALIDATION:
pytest tests/test_control_plane_db.py -q → 19 passed; pytest tests/test_issue_lock_store.py -q → 12 passed; git diff --check prgs/master...HEAD clean; previous head 16cd871fbd214529248e33c6dfc2d53884f67867; new head
2429d9d2e8LAST_UPDATED_BY:
jcwalker3 (prgs-author)
Author mutation ledger
2429d9dprgs/feat/issue-613-allocator-db-substrate16cd871→2429d9dFiles:
control_plane_db.py,tests/test_control_plane_db.py,docs/architecture/control-plane-db-substrate.md#600 and #612 remain downstream of #613; not complete.
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-a874e27fc740
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-16cd871
phase: released
candidate_head:
16cd871fbdtarget_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T04:54:45Z
expires_at: 2026-07-10T06:54:45Z
blocker: manual-release
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-ab2ea1a15166
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-2429d9d
phase: claimed
candidate_head:
2429d9d2e8target_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T04:55:02Z
expires_at: 2026-07-10T06:55:02Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-ab2ea1a15166
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-2429d9d
phase: validating
candidate_head:
2429d9d2e8target_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T04:55:09Z
expires_at: 2026-07-10T06:55:09Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-ab2ea1a15166
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-2429d9d
phase: validated
candidate_head:
2429d9d2e8target_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T04:55:37Z
expires_at: 2026-07-10T06:55:37Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-ab2ea1a15166
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-2429d9d
phase: review_decision
candidate_head:
2429d9d2e8target_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T04:56:53Z
expires_at: 2026-07-10T06:56:53Z
blocker: none
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 27644-ab2ea1a15166
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-2429d9d
phase: released
candidate_head:
2429d9d2e8target_branch: master
target_branch_sha:
08c3488d7clast_activity: 2026-07-10T06:26:36Z
expires_at: 2026-07-10T08:26:36Z
blocker: manual-release
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-reviewer
session_id: 12774-12f944a63b21
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/review-pr619-2429d9d
phase: claimed
candidate_head:
2429d9d2e8target_branch: master
target_branch_sha:
d8b2b8f1a7last_activity: 2026-07-10T06:26:50Z
expires_at: 2026-07-10T08:26:50Z
blocker: none
Review verdict: APPROVE
PR #619 implements the #613 control-plane DB substrate. Fresh from-scratch review under promoted master
d8b2b8f1a7a0497ded8c671a9a7cd6ace36e5719(#620/#621). No prior #619 validation, lease, or decision reused.Verification (all 11 criteria PASS)
incident_linksmigration fails closed on same provider key + same Gitea target but conflicting observation metadata —_incident_link_observation_identity/obs_identitiesguard (control_plane_db.py:456-468); testtest_migrate_conflicting_observation_metadata_fails_closed.link_id—control_plane_db.py:469-474; testtest_migrate_duplicate_null_scope_incident_links.control_plane_db.py:443-455; testtest_migrate_conflicting_duplicate_incident_links_fails_closed.incident_linksupsert canonical (NULL-safe scope via_norm_scope, COALESCE preserve) —control_plane_db.py:1058-1137; testtest_incident_links_minimal_upsert_is_canonical.UNIQUE(provider,base_url,org,project,issue_id)(control_plane_db.py:147).expected_head_sha—control_plane_db.py:618-622and967-974; testtest_pr_assignment_requires_expected_head_sha.control_plane_db.py:976-980; testtest_require_valid_assignment_rejects_stale_head.merged/closedwork rejected (assign + mutation) —control_plane_db.py:672-676and939-943; teststest_merged_work_never_assigned,test_require_valid_assignment_rejects_terminal_state.WORK_KINDS={issue,pr}raisesInvalidWorkKindError; testtest_incident_links_not_work_items.git diff --check prgs/master...HEADclean.Validation run (head
2429d9d2, worktree branches/review-pr619-2429d9d)Files reviewed:
control_plane_db.py,tests/test_control_plane_db.py,docs/architecture/control-plane-db-substrate.md.Downstream note: #600 and #612 remain downstream and are not complete until #613 is merged.
[THREAD STATE LEDGER]
d8b2b8f1a7(in parity, not stale)2429d9d2, targetd8b2b8f(fresh; prior lease released, comment 9303)2429d9d2e8MERGE PR 619(reviewer does not merge)Canonical PR State
STATE: reviewed-approved
WHO_IS_NEXT: MERGER
NEXT_ACTION: Await explicit operator command
MERGE PR 619, then merge PR #619 at head2429d9d2e8into masterd8b2b8f1a7after confirming the live head is unchanged.NEXT_PROMPT:
WHAT_HAPPENED: Fresh from-scratch reviewer review of PR #619 under promoted master; all 11 criteria verified; required test suites and whitespace check passed; APPROVE submitted head-scoped to
2429d9d2.WHY: #613 control-plane DB substrate is correct — fail-closed migration, head-pin + stale-head + terminal-state gates, non-assignable observation links, canonical NULL-safe incident upsert — with green validation.
ISSUE: #613
HEAD_SHA:
2429d9d2e8REVIEW_STATUS: APPROVED
MERGE_READY: yes-pending-operator-command
BLOCKERS: none
VALIDATION: pytest test_control_plane_db.py 19 passed; pytest test_issue_lock_store.py 12 passed; git diff --check prgs/master...HEAD clean
LAST_UPDATED_BY: sysadmin / prgs-reviewer
adopted_at: 2026-07-10T06:43:55Z
adopted_by_identity: sysadmin
adopted_by_profile: prgs-merger
adopted_from_session_id: 12774-12f944a63b21
adopted_from_profile: prgs-reviewer
adopted_from_reviewer_identity: sysadmin
adopted_from_comment_id: 9305
adoption_reason: merger-handoff-approved-head
repo: Scaled-Tech-Consulting/Gitea-Tools
pr: #619
issue: #613
reviewer_identity: sysadmin
profile: prgs-merger
session_id: 12801-af76937517c8
worktree: /Users/jasonwalker/Development/Gitea-Tools/branches/merge-control
phase: adopted
candidate_head:
2429d9d2e8target_branch: master
target_branch_sha:
d8b2b8f1a7last_activity: 2026-07-10T06:43:55Z
expires_at: 2026-07-10T08:43:55Z
blocker: none