EPIC B: CI + Test Reliability (Week 1-2) — Phase 1: Metadata #37
Labels
No labels
blocked:gate-fetch
blocked:gate-implement
blocked:needs-attention
blocked:needs-decision
blocked:needs-human
blocked:needs-local-checkout
blocked:no-changes
bug
feature-request
in-progress
needs-decompose
needs-triage
ops-task
quickfix
security/high
security/low
security/medium
triage-approved
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
Mark/nodedesk#37
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
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?
Phase 1: Metadata
Decomposed from nodedesk#2
⏸ Needs Decision
Blocking factors:
Scope: medium Risk: low Spec: aligned Type: enhancement
Summary: Phase 1 of CI + Test Reliability epic establishing the foundational CI pipeline metadata (Forgejo Actions workflow, test categorization, reporting config) for a project that has zero existing CI infrastructure.
Suggestion: Create .forgejo/workflows/ci.yml with lint → build → test:e2e stages. Wire up vitest as a test:unit script in package.json. Add test metadata/tagging to Playwright spec files (e.g. @fast, @smoke, @critical tags) for selective CI execution. Configure CI-only env via secrets or .env.ci template. Mock/stub S3 and Stripe for CI to keep the pipeline self-contained with just Postgres.
Rationale: No CI exists today — no workflow files, no action config, nothing in .forgejo/ or .github/. The 11 e2e tests can only run locally with Docker. Phase 1 (Metadata) logically means laying the CI foundation: workflow YAML, test tags for organized runs, and reporter config. Medium scope because it touches multiple config files (workflow YAML, vitest config, playwright config, env templates, potentially a CI docker-compose override) but no application logic changes. Low risk since it's purely additive infrastructure — broken CI doesn't break the app. Aligned with project spec (build/lint/test scripts already exist, just need automation). Enhancement type — infrastructure quality-of-life, not a feature or bug fix.
Action: Review each blocking factor above. Remove
blocked:needs-decisionlabel to route back to triage.GSD VERIFY phase found no changes after implementation.
Worker output: ]11;?\API call failed after 3 retries: HTTP 404: 404 page not found
Reopened by kanban QA (task t_4321e76a, 2026-08-04): false-positive closure from the 2026-08-04T04:34:51Z–04:34:58Z reconciliation sweep.
Verification:
origin/ci/quality-gates-matrix:311567aci(#37): add test metadata and reporting configb8b8a4etest(#37): ci smoke runs on its own port and owns Next lifecycle69ab45ddocs(testing): test suite reliability audit — inventory, flakiness history, P0/P1/P2 gaps (#37)origin/main(verified viagit merge-base --is-ancestor). All three live on the open, unmerged PR #45 (head=ci/quality-gates-matrix, base=main, created 2026-07-31, last updated 2026-08-04T09:02:10Z).origin/mainfor this Phase 1 placeholder.Pattern: this matches the documented failure mode "work cited via PR but not merged — same recovery: reopen, post evidence, block." The closure reasoning implicitly relies on a PR being merged; the PR is open.
Action requested: review whether to merge PR #45 (which transitively delivers the #37 commits) or re-scope the #37 closure against the actual main HEAD. Closing this issue on the basis of unmerged PR work is the same false-positive class as Mark/nodedesk#38 (reopened 2026-08-04T09:01:13Z).
Reopened by kanban QA (task t_3277dadc, 2026-08-04T15:26Z): second false-positive closure by reconciliation sweep at 2026-08-04T14:30:25Z.
This is the SAME false-positive class as the 2026-08-04T04:34:58Z closure that QA card t_4321e76a already reopened at 10:52:53Z (comment id 50067). The next reconciliation sweep re-closed the issue without the commits ever reaching origin/main.
Verification (2026-08-04T15:25Z, fresh):
3e553e5. Three #37 commits (311567a,b8b8a4e,69ab45d) confirmed NOT in main's history (git merge-base --is-ancestor returns false for all three). They live on origin/ci/quality-gates-matrix.Recovery: reopened Mark/nodedesk#37. The proper resolution is either (a) merge PR #45 (which transitively delivers the #37 commits), then re-close #37 against the actual merged state; or (b) re-scope the #37 Phase 1 placeholder against origin/main HEAD and acknowledge the work is still un-implemented.
The followup fixup kanban task t_acd2414c ("EPIC B Phase 1 fixup: merge CI + audit + coverage + quarantine to main (#37)") is blocked because all worker attempts have crashed; that is the right place for the implementation to land.
Reopened by kanban QA (t_20cfb982, third false-positive closure by reconciliation sweep):
Verification (2026-08-04):
ci/quality-gates-matrixcontains the three #37 commits:311567aci(#37): add test metadata and reporting configb8b8a4etest(#37): ci smoke runs on its own port and owns Next lifecycle69ab45ddocs(testing): test suite reliability audit3e553e5).Reopening to prevent the sweep from re-closing.
Verification complete (kanban fixup card t_acd2414c, 2026-08-10). All Phase 1 acceptance criteria are now met on main.
Deliverables merged:
18a1c16: matrix CI workflow (lint/typecheck/unit/integration/coverage/build), vitest unit test step with junit artifact upload, @vitest/coverage-v8 + lcov/cobertura reporting with threshold gate (ci(#50)296f812), per-job timeouts (ci(#47)6040525).69ab45d, #37): test inventory, flakiness history, P0/P1/P2 gap analysis.aff9b9e, #49); worklog-timer.spec.ts quarantined (b299743, #53); attachments.spec.ts quarantined then fixed by wiring NoteAttachments (9cc0c75, #51); settings.spec.ts quarantined then root-caused and un-quarantined (646635e/52c51df, #52).Status: issue closed 2026-08-07T15:28:32Z.