You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Task ID: E2 Title: Squash onto clean-pr + Push + PR #136 Refresh + @jahow Tag Source: Phase 8 delivery sequence — final upstream handoff Severity: N/A (delivery only — no source change) Category: Delivery / Upstream PR / Maintainer Handoff Ownership: Ours (clean-pr branch on OS4CSAPI/ogc-client; PR #136 on camptocamp/ogc-client) Phase 8 phase: E — Verification & Delivery
Goal
Apply the phase-8.patch artifact (produced by Task E1) onto clean-pr as one squashed commit, push to refresh PR #136, verify CI green on the PR, update the PR description with a comprehensive Phase 8 section, and tag @jahow for final review with an explicit time-frame ask. After E2:
The mechanical-apply path is: git apply phase-8.patch (NOT git cherry-pick, NOT git merge, NOT git rebase). Patch-apply preserves the source-only scope fence E1 established and gives a clean single-commit result with no merge-history pollution.
If git apply fails (whitespace conflict, contextual drift), the recovery path is: return to phase-8 on the planning repo, regenerate the patch fresh from the current phase-7..phase-8 diff, and re-apply. Do not edit clean-pr source files manually to make a poisoned patch apply.
The PR description update is mandatory, not optional. The Phase 8 section gives @jahow a single-pane summary so the review burden is bounded.
The @jahow tag is the explicit handoff signal — without it, the maintainer has no notification that Phase 8 is review-ready.
Phase 8's planning branch contains 8+ granular commits (A1–D1) plus the full docs/, app/, planning-MD churn. Upstream camptocamp/ogc-client cannot accept that history — PR #136 needs one clean squashed commit covering only src/ and fixtures/ changes. The two-repo workflow established in Phase 7 (P8-implementation-guide §11) handles this: OS4CSAPI/ogc-client is the upstream-shaped delivery branch (clean-pr), and phase-8.patch is the bridge.
Additionally, PR #136's existing description covers Phases 6 and 7 only. Without a Phase 8 section, @jahow has no scoped summary of what changed, what's in scope, what's deliberately deferred, and what's been closed wontfix. The maintainer would have to reverse-engineer all of that from the diff, which is precisely the friction the Phase 8 contribution-goal document was designed to eliminate.
Affected branches/repos:
Source: OS4CSAPI/ogc-client-CSAPI_2phase-8 HEAD + phase-8.patch artifact (produced by E1)
Target: OS4CSAPI/ogc-clientclean-pr branch
PR: camptocamp/ogc-client#136 (refreshed by push to OS4CSAPI/ogc-client:clean-pr)
Files to Modify
File / Resource
Action
Est. Lines
Purpose
OS4CSAPI/ogc-client working tree (on clean-pr)
Apply patch
~950 LOC
Mechanical git apply phase-8.patch — no manual source edits
Cross-reference P8-implementation-guide §11 steps 4–8 for the canonical command sequence and squashed-commit-message template. If you find yourself editing OS4CSAPI/ogc-client source files manually, stop — that's a regression, not E2's job.
Implementation Approach
Execute the canonical 9-step sequence verbatim from P8-implementation-guide §11 steps 4–8. Repository handoff is from OS4CSAPI/ogc-client-CSAPI_2 to OS4CSAPI/ogc-client; PR target is camptocamp/ogc-client#136.
Step 1 — Switch to the delivery repo (clone if needed):
# If not already cloned locally:# git clone https://github.com/OS4CSAPI/ogc-client.git c:\Users\sbolling\Documents\ogc-client
cd c:\Users\sbolling\Documents\ogc-client
git fetch origin
git status # working tree must be clean
Step 2 — Checkout clean-pr and ensure it is up-to-date:
git checkout clean-pr
git pull origin clean-pr
git log -1--oneline # confirm Phase 7's last squashed commit is HEAD
Step 3 — Apply the patch from E1:
# Adjust path as needed; phase-8.patch was produced by Task E1 in the planning repo
git apply c:\Users\sbolling\Documents\ogc-client-CSAPI_2\phase-8.patch
If git apply reports any error: do NOT manually edit files to force-fit the patch. Return to E1, regenerate the patch from current phase-7..phase-8 diff, retry. If the patch still fails, surface the question — there is a stale-baseline or context-drift problem to root-cause.
Step 4 — Stage all and inspect:
git add -A
git status # expected: only src/ogc-api/csapi/**, src/ogc-api/endpoint.ts, src/ogc-api/index.ts, fixtures/csapi/** changes
git diff --cached --shortstat # sanity-check LOC ~950
git push origin clean-pr
# This refreshes the PR at camptocamp/ogc-client#136 (clean-pr is the head branch)
Step 7 — Verify CI on PR #136: open camptocamp#136, wait for GitHub Actions to complete, confirm all upstream-defined gates exit green. If any gate fails on the PR but was green locally in E1, root-cause the divergence (CI environment, Node version, OS) before tagging @jahow.
Step 8 — Update PR #136 description: add a "## Phase 8" section at the bottom (or replace if a Phase 8 stub exists). Use this structure:
## Phase 8**Acceptance criteria met (8 + 2 = 10):**- A1: URL-builder framing documented (Finding 017)
- A2: CSAPICollectionRef decoupling (Finding 022)
- A3: ReadonlySet<CSAPIResourceType> tightening (Finding 023)
- A4: Pagination JSDoc (#167)
- A5: No `@deprecated` introductions (locked-decision invariant)
- A6: `endpoint.root` / `getCollectionDocument` private (Finding 024)
- A7: `endpoint.csapi(id)` discoverable entry point (Finding 018)
- A8: No `isCollectionInfo` runtime cast (eliminated by D1)
- B1: `DataStream` → `Datastream` rename, 13 methods (Finding 019)
- B2: Validators throw `EndpointError`; factory wrapping closed in D1 (Finding 021)
**Resolved findings:** 017, 018, 019, 021, 022, 023, 024, #166, #167.
**Wontfix (out of scope):**#168, #169.
**Deferred to a future phase:** 020, 025, 026, #170, #171.
Net: ~400 source LOC + ~550 test LOC. No `app/`, `docs/`, or `src-node/` changes flow upstream.
Step 9 — Tag @jahow for final review with explicit time-frame ask. Use a PR comment (not just an "@" in the description), so it generates a notification:
@jahow — Phase 8 is ready for your final review. Could you take a look in the next ~2 weeks if your schedule allows? All five CI gates are green, the PR description's Phase 8 section summarizes scope. Happy to address any feedback either as fixup commits on clean-pr or as a Phase 9 follow-up, your call.
(Adjust the time-frame to whatever the user has agreed with @jahow.)
Scope — What NOT to Touch
❌ Do NOT modify any source file inside this task. E2 is mechanical apply + commit + push + description + tag. No manual source edits.
❌ Do NOT use git cherry-pick, git merge, or git rebase to bridge phase-8 → clean-pr. The locked path is git apply phase-8.patch.
❌ Do NOT amend or rewrite Phase 7's existing squashed commit on clean-pr. Phase 8 adds one new commit on top.
❌ Do NOT amend the Phase 8 squashed commit after the push without first informing the user. Force-pushes to clean-pr invalidate any review @jahow has started.
❌ Do NOT push to phase-8 from this task. E2 operates only on the OS4CSAPI/ogc-client repo (clean-pr branch).
❌ Do NOT add docs/, app/, src-node/, governance files, or planning files to clean-pr. The patch's scope fence (set in E1) already excludes them; verify in Step 4 that none have leaked in.
❌ Do NOT skip the PR description update. The Phase 8 section is a mandatory acceptance criterion.
❌ Do NOT skip the @jahow tag. The handoff signal is mandatory.
❌ Do NOT close any of the deferred or wontfix issues from this task. They stay in their current state (deferred remains deferred; wontfix remains closed wontfix).
❌ Do NOT add @deprecated tags anywhere in Phase 8 (locked decision; PR unmerged ⇒ no consumers).
❌ Do NOT absorb consumer-side ergonomic helpers (Phase 8 hard scope fence).
Acceptance Criteria
OS4CSAPI/ogc-clientclean-pr branch checked out and up-to-date with origin
git apply phase-8.patch succeeded with zero conflicts (no manual edits required to make it apply)
git status after apply shows only src/ogc-api/csapi/**, src/ogc-api/endpoint.ts, src/ogc-api/index.ts, fixtures/csapi/** modifications
One new commit on clean-pr titled exactly: Phase 8: API design refinements + CS-Go server-interop fixes
Squashed commit message body matches the canonical template (resolved findings list + wontfix list + deferred list + CI status line)
@jahow is tagged in a PR comment with an explicit time-frame review ask
Phase 8 issue tracker on OS4CSAPI/ogc-client-CSAPI_2 reflects E2 closed
No source changes were made to either repo from this task (working tree clean on clean-pr after the push; phase-8.patch artifact untouched on the planning repo)
Acceptance Gate (verification command)
The Phase 8 roadmap defines a specific verification command for this task (P8-ROADMAP §Phase E Task E2). Paste the output of these commands on the issue before closing:
# 1. Confirm clean-pr advanced by exactly one commit
cd c:\Users\sbolling\Documents\ogc-client
git log -2--oneline origin/clean-pr
# Expected line 1: <new sha> Phase 8: API design refinements + CS-Go server-interop fixes# Expected line 2: <Phase 7 sha> Phase 7: ... (the prior squashed commit)# 2. Confirm the new commit's diff is source-only
git show --stat HEAD
# Expected: only src/ogc-api/csapi/**, src/ogc-api/endpoint.ts, src/ogc-api/index.ts, fixtures/csapi/** files# 3. Confirm the new commit's diff has no docs/app/src-node leaks
git show --name-only HEAD |Select-String-Pattern '^(docs|app|src-node|tools|\.github)/'# Expected: no output (zero matches)# 4. PR #136 verification (manual / browser)# - Open https://github.com/camptocamp/ogc-client/pull/136# - Confirm the new commit appears in the commits tab# - Confirm CI is green# - Confirm "## Phase 8" section is present in the description# - Confirm @jahow is tagged in a comment with time-frame ask
Expected output:
git log -2 --oneline shows exactly one new commit (Phase 8) on top of the prior Phase 7 squash
git show --stat HEAD is scoped to the four allowed prefixes only
The forbidden-path Select-String returns zero matches
Phase 8 close-out: once E2's acceptance gate is met, Phase 8 is complete. Subsequent maintainer feedback from @jahow becomes either fixup commits on clean-pr (small) or a future Phase 9 (substantial). Either path is decided by the user, not pre-committed in this issue.
Blocked by:Task E1 — phase-8.patch must exist as a verified artifact and CI on phase-8 must be fully green before E2 starts. The single artifact handoff is the patch file. Blocks: Nothing inside Phase 8 (E2 is the final task). Future maintainer-feedback handling and any Phase 9 plans depend on E2 closing successfully. Related: Phase 7's delivery pattern (P8-implementation-guide §11); upstream PR #136 (camptocamp/ogc-client#136).
Roadmap dependency row: P8-ROADMAP §Phase E Task E2: "Effort: Small (~1 hour, mostly description writing). Risk: Low (mechanical apply; if patch fails to apply cleanly, return to phase-8 and rebase or regenerate the patch). Dependencies: Task E1. Acceptance gate: PR #136 shows one new commit; CI green; PR description has Phase 8 section; @jahow tagged."
Phase 8 Task
Task ID: E2
Title: Squash onto
clean-pr+ Push + PR #136 Refresh + @jahow TagSource: Phase 8 delivery sequence — final upstream handoff
Severity: N/A (delivery only — no source change)
Category: Delivery / Upstream PR / Maintainer Handoff
Ownership: Ours (
clean-prbranch onOS4CSAPI/ogc-client; PR #136 oncamptocamp/ogc-client)Phase 8 phase: E — Verification & Delivery
Goal
Apply the
phase-8.patchartifact (produced by Task E1) ontoclean-pras one squashed commit, push to refresh PR #136, verify CI green on the PR, update the PR description with a comprehensive Phase 8 section, and tag @jahow for final review with an explicit time-frame ask. After E2:SystemTypeUrisname collision between model.ts and constants.ts #136 (camptocamp/ogc-client) carries one new squashed commit titled "Phase 8: API design refinements + CS-Go server-interop fixes"SystemTypeUrisname collision between model.ts and constants.ts #136 is green (GitHub Actions, all upstream-defined gates)SystemTypeUrisname collision between model.ts and constants.ts #136 is in maintainer's handsAcceptance criterion: Phase 8 is complete and PR #136 is ready for @jahow's final review.
Locked Decision
Decision: Delivery is two-repo, single-squash:
OS4CSAPI/ogc-client-CSAPI_2) keeps full per-task granular history onphase-8OS4CSAPI/ogc-client) carriesclean-prwith one new squashed commit (the only commit Phase 8 contributes upstream)The mechanical-apply path is:
git apply phase-8.patch(NOTgit cherry-pick, NOTgit merge, NOTgit rebase). Patch-apply preserves the source-only scope fence E1 established and gives a clean single-commit result with no merge-history pollution.If
git applyfails (whitespace conflict, contextual drift), the recovery path is: return tophase-8on the planning repo, regenerate the patch fresh from the currentphase-7..phase-8diff, and re-apply. Do not editclean-prsource files manually to make a poisoned patch apply.The PR description update is mandatory, not optional. The Phase 8 section gives @jahow a single-pane summary so the review burden is bounded.
The @jahow tag is the explicit handoff signal — without it, the maintainer has no notification that Phase 8 is review-ready.
Locked in:
Problem Statement
Phase 8's planning branch contains 8+ granular commits (A1–D1) plus the full
docs/,app/, planning-MD churn. Upstreamcamptocamp/ogc-clientcannot accept that history — PR #136 needs one clean squashed commit covering onlysrc/andfixtures/changes. The two-repo workflow established in Phase 7 (P8-implementation-guide §11) handles this:OS4CSAPI/ogc-clientis the upstream-shaped delivery branch (clean-pr), andphase-8.patchis the bridge.Additionally, PR #136's existing description covers Phases 6 and 7 only. Without a Phase 8 section, @jahow has no scoped summary of what changed, what's in scope, what's deliberately deferred, and what's been closed wontfix. The maintainer would have to reverse-engineer all of that from the diff, which is precisely the friction the Phase 8 contribution-goal document was designed to eliminate.
Affected branches/repos:
OS4CSAPI/ogc-client-CSAPI_2phase-8HEAD +phase-8.patchartifact (produced by E1)OS4CSAPI/ogc-clientclean-prbranchcamptocamp/ogc-client#136(refreshed by push toOS4CSAPI/ogc-client:clean-pr)Files to Modify
OS4CSAPI/ogc-clientworking tree (onclean-pr)git apply phase-8.patch— no manual source editsOS4CSAPI/ogc-clientclean-prbranchcamptocamp/ogc-client)Implementation Approach
Execute the canonical 9-step sequence verbatim from P8-implementation-guide §11 steps 4–8. Repository handoff is from
OS4CSAPI/ogc-client-CSAPI_2toOS4CSAPI/ogc-client; PR target iscamptocamp/ogc-client#136.Step 1 — Switch to the delivery repo (clone if needed):
Step 2 — Checkout
clean-prand ensure it is up-to-date:Step 3 — Apply the patch from E1:
If
git applyreports any error: do NOT manually edit files to force-fit the patch. Return to E1, regenerate the patch from currentphase-7..phase-8diff, retry. If the patch still fails, surface the question — there is a stale-baseline or context-drift problem to root-cause.Step 4 — Stage all and inspect:
Step 5 — Commit with the canonical squashed commit message (template from P8-implementation-guide §11):
Step 6 — Push to refresh PR #136:
Step 7 — Verify CI on PR #136: open camptocamp#136, wait for GitHub Actions to complete, confirm all upstream-defined gates exit green. If any gate fails on the PR but was green locally in E1, root-cause the divergence (CI environment, Node version, OS) before tagging @jahow.
Step 8 — Update PR #136 description: add a "## Phase 8" section at the bottom (or replace if a Phase 8 stub exists). Use this structure:
Step 9 — Tag @jahow for final review with explicit time-frame ask. Use a PR comment (not just an "@" in the description), so it generates a notification:
(Adjust the time-frame to whatever the user has agreed with @jahow.)
Scope — What NOT to Touch
git cherry-pick,git merge, orgit rebaseto bridgephase-8→clean-pr. The locked path isgit apply phase-8.patch.clean-pr. Phase 8 adds one new commit on top.clean-prinvalidate any review @jahow has started.phase-8from this task. E2 operates only on theOS4CSAPI/ogc-clientrepo (clean-prbranch).docs/,app/,src-node/, governance files, or planning files toclean-pr. The patch's scope fence (set in E1) already excludes them; verify in Step 4 that none have leaked in.@deprecatedtags anywhere in Phase 8 (locked decision; PR unmerged ⇒ no consumers).Acceptance Criteria
OS4CSAPI/ogc-clientclean-prbranch checked out and up-to-date with origingit apply phase-8.patchsucceeded with zero conflicts (no manual edits required to make it apply)git statusafter apply shows onlysrc/ogc-api/csapi/**,src/ogc-api/endpoint.ts,src/ogc-api/index.ts,fixtures/csapi/**modificationsclean-prtitled exactly:Phase 8: API design refinements + CS-Go server-interop fixesgit push origin clean-prsucceeded; PR D-1: ResolveSystemTypeUrisname collision between model.ts and constants.ts #136 (camptocamp/ogc-client) is refreshedSystemTypeUrisname collision between model.ts and constants.ts #136 GitHub Actions CI is green on all upstream-defined gatesSystemTypeUrisname collision between model.ts and constants.ts #136 description has a "## Phase 8" section with: A1–A8 + B1–B2 acceptance recap, resolved-findings list, wontfix list (Closed (wontfix): library is spec-correct; server-side root cause tracked at connected-systems-go#11; institutional knowledge preserved in references.md #168, Closed (wontfix): heuristic coordinate extraction not adopted; architecturally correct path tracked at #171 #169), deferred list (020, 025, 026, Future-enhancement (deferred): async-iterator helpers for paginated CSAPI list methods — out-of-scope until upstream broadens scope #170, Deferred enhancement: SWE Common–aware result-vector extraction (out-of-scope until upstream broadens scope) #171), net-LOC lineOS4CSAPI/ogc-client-CSAPI_2reflects E2 closedclean-prafter the push;phase-8.patchartifact untouched on the planning repo)Acceptance Gate (verification command)
The Phase 8 roadmap defines a specific verification command for this task (P8-ROADMAP §Phase E Task E2). Paste the output of these commands on the issue before closing:
Expected output:
git log -2 --onelineshows exactly one new commit (Phase 8) on top of the prior Phase 7 squashgit show --stat HEADis scoped to the four allowed prefixes onlySelect-Stringreturns zero matchesSystemTypeUrisname collision between model.ts and constants.ts #136 page shows: green CI, Phase 8 description section, @jahow review-tag commentDependencies
Blocked by: Task E1 —
phase-8.patchmust exist as a verified artifact and CI onphase-8must be fully green before E2 starts. The single artifact handoff is the patch file.Blocks: Nothing inside Phase 8 (E2 is the final task). Future maintainer-feedback handling and any Phase 9 plans depend on E2 closing successfully.
Related: Phase 7's delivery pattern (P8-implementation-guide §11); upstream PR #136 (
camptocamp/ogc-client#136).Roadmap dependency row: P8-ROADMAP §Phase E Task E2: "Effort: Small (~1 hour, mostly description writing). Risk: Low (mechanical apply; if patch fails to apply cleanly, return to
phase-8and rebase or regenerate the patch). Dependencies: Task E1. Acceptance gate: PR #136 shows one new commit; CI green; PR description has Phase 8 section; @jahow tagged."References
camptocamp/ogc-client)OS4CSAPI/ogc-clientclean-prbranchphase-8.patch(artifact from E1)clean-pr