- docs/branches/README.md: index of upstream review branches - docs/branches/upstream-knoe-db-20260523.md: full analysis of 403-file diff (no shared history; conflict risk by area; recommended actions) - docs/plans/junie/upstream-knoe-db-20260523-integration.md: 6-task Junie brief ordered by conflict risk (pg-knoe-auth → k3d manifests → briefs → authority OIDC fixes → knoe/core installer → etc/ init scripts) - docs/plans/junie/README.md: integration brief added to active table
8.0 KiB
Junie brief: integrate upstream knoe-db/20260523
Tracked at: docs/branches/upstream-knoe-db-20260523.md
Branch: upstream/knoe-db/20260523
Priority: Medium — work through sections in order, lowest-risk first.
Why
On 2026-05-23 we fetched the upstream git@git.knoe.dev:knoe-dev/knoe-db.git main branch into a review branch (upstream/knoe-db/20260523). The upstream has 684 commits and 403 differing files relative to our main. There is no shared history — a bulk merge is not safe. This brief tracks the structured cherry-pick/copy work to land the valuable upstream changes without clobbering our local customisations.
Full analysis: docs/branches/upstream-knoe-db-20260523.md
What changes (ordered by risk, lowest first)
Task 1 — Copy pg-knoe-auth/ wholesale (additive, no conflict)
The upstream has a PostgreSQL C extension (pg-knoe-auth/) for JWT-based DB-level auth. We have no local version of this directory.
git checkout upstream/knoe-db/20260523 -- pg-knoe-auth/
git add pg-knoe-auth/
git commit -m "feat(pg-knoe-auth): import upstream PostgreSQL JWT auth extension"
Note: Upstream is decoupling this from the installer (270aba3, f40cb32) — the extension code is stable but installer wiring is being removed. Import the code; do not wire it into the installer yet.
Definition of done:
pg-knoe-auth/directory present inmainwithsrc/,test/,README.mdmake teststill passes (Python tests unaffected)
Task 2 — Copy k3d cluster manifests (additive, no conflict)
Two new k3d-specific manifests exist upstream that we don't have:
git checkout upstream/knoe-db/20260523 -- k8s/knoe/knoe-db-k3d.yaml
git checkout upstream/knoe-db/20260523 -- k8s/knoe/garage-statefulset-k3d.yaml
Also review the updated k8s/knoe/knoe-db.yaml:
git diff main..upstream/knoe-db/20260523 -- k8s/knoe/knoe-db.yaml
Apply any production CNPG manifest improvements that don't conflict with our GKE-specific settings (storage class, SA name, backup config).
Definition of done:
k8s/knoe/knoe-db-k3d.yamlpresentk8s/knoe/garage-statefulset-k3d.yamlpresentk8s/knoe/knoe-db.yamlreviewed; any safe upstream improvements applied
Task 3 — Review and adopt upstream Junie briefs
Read the following upstream-only briefs and decide which to adopt:
git show upstream/knoe-db/20260523:docs/plans/junie/knoeledge-naming-standards.md
git show upstream/knoe-db/20260523:docs/plans/junie/knoeledge-tenant-onboarding.md
git show upstream/knoe-db/20260523:docs/plans/junie/per-user-supabase-workspace.md
git show upstream/knoe-db/20260523:docs/plans/junie/knoe-auth-device-flow.md
git show upstream/knoe-db/20260523:docs/plans/junie/deploy-pipeline-restore.md
git show upstream/knoe-db/20260523:docs/plans/junie/db-secret-username-drift-fix.md
git show upstream/knoe-db/20260523:docs/plans/junie/init-user-schemas-heredoc-fix.md
For each brief that is relevant to our environment: copy it into docs/plans/junie/ and add it to the active table in docs/plans/junie/README.md.
Definition of done:
- Each upstream brief read and evaluated
- Relevant briefs copied to
docs/plans/junie/ docs/plans/junie/README.mdactive table updated
Task 4 — Cherry-pick authority/ OIDC fixes (medium risk)
The upstream has a series of bug fixes to the knoe-auth Java OIDC service. These are the upstream commits to cherry-pick (inspect each before applying):
| Commit | Subject |
|---|---|
b588412 |
fix(knoe-auth): replace hardcoded @prole.org with configured emailDomain |
1ad7049 |
fix(knoe-auth): remove @RequestMapping("/auth") from LoginController |
5d43721 |
fix(knoe-auth): use absolute issuer URL for login redirect in /authorize |
202c16b |
fix(knoe-auth): robust next-URL handling — skip null nonce, encode scope spaces |
7147758 |
fix(knoe-auth): KNOE_AUTH_ENABLED=true + robust safeNext() URL parsing |
ce78730 |
fix(auth): URL-encode next param in login page hrefs |
878254e |
fix(auth): strip leading/trailing whitespace from Google client_id/secret |
ee3f16f |
fix(auth): encode Google authorization URL to prevent URI.create() crash |
e5522d4 |
fix(oidc): real access JWT + Bearer userinfo + groups claim |
b8a4028 |
fix(oidc): add email_verified=true to id_token claims |
ce78730 |
fix(oidc): accept allowedClientIds in token endpoint + fix audience |
Since there is no shared history, cherry-pick will not work directly. Instead, copy the changed files:
git diff main..upstream/knoe-db/20260523 -- authority/ > /tmp/authority.patch
# Review the patch, then apply selectively
Or copy individual files:
git checkout upstream/knoe-db/20260523 -- authority/src/main/java/dev/knoe/auth/web/LoginController.java
# etc.
Definition of done:
- All OIDC fix commits reviewed
- Safe fixes applied to
authority/ authority/Java tests pass (mvn testinauthority/)
Task 5 — Diff knoe/core/ installer modules (high risk — do not bulk-copy)
The upstream has significant changes to the installer core. Do not overwrite our files. Instead, diff each module and apply upstream improvements that don't conflict with our local changes:
# Key files to diff:
git diff main..upstream/knoe-db/20260523 -- knoe/core/env.py
git diff main..upstream/knoe-db/20260523 -- knoe/core/actions.py
git diff main..upstream/knoe-db/20260523 -- knoe/core/milestones.py
git diff main..upstream/knoe-db/20260523 -- knoe/core/ops/monitoring.py
git diff main..upstream/knoe-db/20260523 -- knoe/core/ops/garage_store.py
Protect these local changes:
knoe/core/env.py— ourgke_kubecontext prefix detection (da0fd2c)knoe/knoe_conf.py— ournormalize_environment()patchknoe/ui/screens/cfg.py— our_validate_cfg_valuesfix (ef20c8a)
For each file: read the upstream diff, identify upstream improvements (k3d support, pg_knoe_auth pruning, etc.), and apply them manually without overwriting our local additions.
Definition of done:
knoe/core/env.pyreviewed; upstream improvements applied without losinggke_detectionknoe/core/actions.pyreviewed; k3d additions and pg_knoe_auth pruning evaluatedknoe/core/milestones.pyreviewed; k3d milestones evaluatedmake testpasses after all changes
Task 6 — Review etc/ init scripts (medium risk)
Compare upstream etc/ scripts with our mock_val/ equivalents:
git diff main..upstream/knoe-db/20260523 -- etc/init_knoe_auth.sh
git diff main..upstream/knoe-db/20260523 -- etc/init_knoe_users.sh
git diff main..upstream/knoe-db/20260523 -- etc/init_cnpg_gke.sh
git diff main..upstream/knoe-db/20260523 -- etc/init_user_schemas_gke.sh
etc/init_user_schemas_gke.sh is upstream-only (new) — copy it in if it applies to our GKE setup.
Definition of done:
- Each
etc/script diffed against ourmock_val/equivalent etc/init_user_schemas_gke.shevaluated and copied if applicable- No regressions in existing init scripts
Out of scope
conf/*.cfg— never overwrite with upstream versions; our env-specific values must be preserved.infrastructure/inventory/— contains our host-specific values; review manually before touching.- Bulk
git merge --allow-unrelated-histories— explicitly forbidden; too much conflict surface.
Commit shape
Each task above should be a separate commit:
feat(pg-knoe-auth): import upstream PostgreSQL JWT auth extension
feat(k8s): add k3d cluster manifests from upstream (knoe-db-k3d, garage-k3d)
docs(plans): adopt upstream Junie briefs — device-flow, tenant-onboarding, etc.
fix(authority): apply upstream OIDC fixes from knoe-db/20260523
feat(core): apply upstream k3d installer improvements from knoe-db/20260523
feat(etc): apply upstream init script improvements from knoe-db/20260523
When all tasks are done, update docs/branches/README.md status to ✅ Done.