Files
2026-08-24 11:09:03 +00:00

101 lines
3.5 KiB
Markdown

---
id: "01-restore-sync-context"
title: "Restore GitHub PR sync context"
status: done
wave: 1
depends_on: []
plan: "plan.md"
spec: "../../specs/integrations/requirements/pr-outcome-attribution.md"
---
# Task 01: Restore GitHub PR Sync Context
## Intent
Restore the missing task and pull-request context in the final sync helper.
Preserve the existing persistence, reconciliation, and publication order.
## Acceptance
- `apps/backend/internal/github` compiles without undefined identifiers.
- `SyncTaskPR` persists the task PR before comparison-target reconciliation.
- The comparison observer receives the same task ID and PR identity as the sync.
- Existing stale-writer event behavior remains unchanged.
## Red Test First
Add `TestSyncTaskPR_PersistsBeforeComparisonTargetReconciliation` in
`service_comparison_target_sync_test.go`. The current package must fail to
compile because the helper does not receive `taskID` or `status.PR`.
## Implementation
- Extend `persistAndPublishTaskPRSync` with `taskID string` and `pr *PR`.
- Pass `taskID` and `status.PR` from `SyncTaskPR`.
- Pass `tp.TaskID` and `status.PR` from unwatched lifecycle reconciliation.
- Use those parameters for `reconcileComparisonTargetFromSync`.
- Update direct helper calls in existing tests.
- Do not change storage, reconciliation, or event behavior.
## Files Likely Touched
- `apps/backend/internal/github/service_pr_watch.go`
- `apps/backend/internal/github/service_pr_unwatched.go`
- `apps/backend/internal/github/service_comparison_target_sync_test.go`
- `apps/backend/internal/github/service_pr_outcome_sync_test.go`
- `docs/plans/github-pr-sync-context-regression/plan.md`
- `docs/plans/github-pr-sync-context-regression/task-01-restore-sync-context.md`
## Dependencies
None.
## Parallelism
`sequential`. The source and tests share one helper contract.
## Inputs
- `docs/specs/integrations/requirements/pr-outcome-attribution.md`, section `Sync writer`
- `docs/specs/platform/requirements/workspace-git-status.md`, section
`Repository-qualified comparison targets`
- `docs/decisions/2026-08-19-repository-qualified-comparison-targets.md`
## Verification
Run these commands from the repository root:
```bash
cd apps/backend && \
GOCACHE=/tmp/kandev-go-build-cache go test ./internal/github -run 'TestSyncTaskPR_PersistsBeforeComparisonTargetReconciliation|TestPersistAndPublishTaskPRSync_PublishesReReadValueNotStaleInMemoryOne' && \
GOCACHE=/tmp/kandev-go-build-cache make build
```
Then run this command from the repository root:
```bash
git diff --check
```
## Output Contract
Report the changed files, exact command results, blockers, and remaining risks.
Update this task and `plan.md` in the same conversation.
## Results
- RED: `GOCACHE=/tmp/kandev-go-build-cache go test ./internal/github -run
TestSyncTaskPR_PersistsBeforeComparisonTargetReconciliation` failed with the
expected undefined `taskID` and `status` compiler errors.
- GREEN: `GOCACHE=/tmp/kandev-go-build-cache go test ./internal/github -run
TestSyncTaskPR_PersistsBeforeComparisonTargetReconciliation` passed.
- Targeted regression command passed:
`GOCACHE=/tmp/kandev-go-build-cache go test ./internal/github -run
"TestSyncTaskPR_PersistsBeforeComparisonTargetReconciliation|TestPersistAndPublishTaskPRSync_PublishesReReadValueNotStaleInMemoryOne"`.
- Backend build passed:
`GOCACHE=/tmp/kandev-go-build-cache make build`.
- `gofmt -w` completed for all changed Go files.
- `git diff --check` passed.
- Build output was written to ignored files under `apps/backend/bin`.
- No temporary source files or E2E assets were created.