[K5 correction] Create exact-head PRs through Forgejo AGit #25
No reviewers
Labels
No labels
bug
duplicate
enhancement
help wanted
invalid
question
wontfix
No milestone
No project
No assignees
2 participants
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Creatidy/creatidy-kernel!25
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "issue-24-agit-pr"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Implements #24 as a separate correction after foundation PR #22 was integrated into
develop; probe PR #23 remains DO NOT MERGE evidence only.refs/for/<base>using a fresh durable Operation topic push option; no ordinary mutable source branch for the PR effect.Exact final HEAD
723fcfa9f5748c5629a486960ee17ea2c116daf8:make checkpassed (490 tests; lock/format/lint/basedpyright/imports/secrets/diff),make package-checkpassed; Forgejo CI run #2003 succeeded. A fresh verified independent full-PR review at this HEAD returned substantiveAPPROVEand zero blockers: #25 (comment) . Forgejo persistedCOMMENTbecause the sharedkiloaccount authored the PR; no formal platform approval is claimed. Delivery ledger and 1/10 remediation count: #24 (comment) . No second live AGit probe was run, as prohibited by #24. READY_FOR_OWNER_MERGE; do not auto-merge or close #24 until owner integration.PR Review: [K5 correction] Create exact-head PRs through Forgejo AGit (#25)
Repository: Creatidy/creatidy-kernel
Branch: issue-24-agit-pr -> develop
Frozen head:
9663fe754bLinked issue: #24
Summary
The exact-SHA AGit creation shape, authoritative repository/base/head read-back, base-tip provenance, no-blind-retry guard, and adapter boundary are substantially present. Two issue acceptance requirements remain unsatisfied at this frozen head: producer-shaped nonzero AGit rejections are not classified, and later head movement is surfaced as an exception rather than stale evidence.
Intent / Acceptance Evidence
refs/for/<base>; no ordinary branchforgejo_transport.py:399-460constructs the exact-SHA refspecforgejo_transport.py:473-488,forgejo.py:373-391core/forge.py:111-116and read-back receiptforgejo.py:303-304,357-375ForgeConflict; see blocker 2make check(486 tests) andmake package-checkArchitecture / Information Flow
The change keeps AGit-specific transport details in adapters and does not introduce a core dependency on Forgejo. Exact candidate and repository/base authority are read back before acknowledgement. The blockers concern domain-status normalization at the adapter boundary, not dependency direction.
Blocking Issues
Nonzero AGit porcelain rejection evidence is discarded. In
src/creatidy_kernel/adapters/forgejo_transport.py:467-472, any nonzerogit push --porcelainresult is classified only fromstderr, then returnsUNKNOWNbefore parsingstdout. Git reports proc-receive failures through porcelain status lines such as[remote rejected] (...); same-topic/non-fast-forward updates, unsupported AGit, and some permission failures can therefore collapse intoUNKNOWNrather than the distinct rejected/collision/unsupported outcomes required by issue #24.tests/test_forge_transports.py:317-329uses stderr-only fixtures and does not cover producer-shaped nonzero porcelain.A later moved PR head is not returned as stale evidence.
src/creatidy_kernel/adapters/forgejo.py:379-388(and the fake equivalent) raisesForgeConflictwhen authoritative read-back finds a changed head.tests/test_forge.py:315-339explicitly expects that exception. Issue #24 requires later head movement to make recorded exact-head evidence stale, andEffectStatus.STALEexists for that domain distinction. Return a stale receipt for a previously accepted PR whose current head differs; retain fail-closed behavior during initial acknowledgement.Non-blocking Suggestions
None.
Questions for the Author
None.
Security / Privacy Notes
Fail-closed handling is preserved, but collapsing known domain rejection evidence into
UNKNOWNweakens the operation journal's ability to distinguish safe terminal refusal from ambiguous delivery.Test / Documentation Gaps
tests/test_forge.py:404-410verifies random topic uniqueness only. It does not exercise durable topic-to-Operation binding or rejection of reuse after a completed/closed topic, so the shared conformance suite does not fully demonstrate the documented never-reused topic responsibility.Follow-Up Candidates
None. These gaps are required by issue #24 and belong in this PR.
Overall Recommendation
REQUEST_CHANGES
Blocking findings: 2. Re-review must bind to the remediated exact head.
Forgejo persistence note: the configured
kiloidentity authored this PR, so Forgejo rejected formalREQUEST_CHANGESwithreject your own pull is not allowed. This review is therefore persisted asCOMMENT; that state is not a formal approval or change-request review, while the substantive recommendation remains REQUEST_CHANGES.PR Review: [K5 correction] Create exact-head PRs through Forgejo AGit (#25)
Repository: Creatidy/creatidy-kernel
Branch: issue-24-agit-pr -> develop
Frozen head:
723fcfa9f5Linked issue: #24
Summary
The whole correction PR satisfies issue #24 at this exact head. It replaces snapshot-branch PR creation with an exact full-SHA AGit push, validates a new-PR domain receipt, authoritatively reads back repository/base/head identity, preserves base-tip provenance, fails closed on uncertainty, and exposes later head movement as stale evidence. The two blockers from the stale
9663fe7review are remediated.Intent / Acceptance Evidence
refs/for/<base>; no ordinary mutable source branchforgejo_transport.py:380-460; transport fixture asserts the full-SHA refspec and absence ofHEAD/force optionsforgejo_transport.py:464-500;forgejo.py:343-395; shared repository-identity and mismatch testscore/forge.py:111-116; moved-base conformance retains the observed baseforgejo.py:303-304,360-378; recovery requires a durable PR reference; tests retain the reference after temporary read-back lossforgejo_transport.py:467-499; producer-shaped nonzero porcelain tests cover each reasonforgejo.py:389-390and fake equivalent returnSTALEwith the durable PR referenceforge_refs.py:22-24,124-125; shared tests cover random topics, same-topic update refusal, and completed-topic reuse refusalmake check(490 tests) andmake package-check; Forgejo run #2003 succeeded at this SHAArchitecture / Information Flow
AGit payload and porcelain parsing remain at the adapter edge. Core retains provider-neutral
Effect,Receipt, andEffectStatusvalues. Acceptance requires both transport-domain creation evidence and authoritative HTTP read-back, so neither a zero Git exit nor an uploaded object alone grants acknowledgement.Blocking Issues
None.
Non-blocking Suggestions
None.
Questions for the Author
None.
Security / Privacy Notes
The controlled Git environment, bounded output/timeout, exact object validation, disabled ambient Git configuration/hooks/credential helpers, and fail-closed parsing remain intact. No secrets, private payloads, merge authority, or deployment authority are introduced.
Test / Documentation Gaps
No blocking gap. A second live AGit probe was intentionally not run because issue #24 explicitly prohibits it; the README accurately describes the coverage as synthetic adapter conformance rather than a live integration claim.
Follow-Up Candidates
None.
Overall Recommendation
APPROVE
Blocking findings: none. This recommendation applies only to frozen HEAD
723fcfa9f5748c5629a486960ee17ea2c116daf8.Forgejo persistence note: the configured
kiloidentity authored this PR, so Forgejo rejected formalAPPROVEDwithapprove your own pull is not allowed. This review is therefore persisted asCOMMENT; that state is not a formal approval, while the substantive recommendation remains APPROVE.