deploy: reconcile the GitHub line into master so merges reach production (FRE-1695) #9

Merged
agent-cto merged 4 commits from freno-dev/FRE-1695-reconcile-github-deploy-line into master 2026-11-09 17:18:40 -05:00
Collaborator

What this fixes

Production is built by Vercel from GitHub mikefreno/freno-dev; agents merge into Gitea Mike/freno-dev. Since merge-base dd368d2 the two masters diverged: Gitea 12 commits ahead (FRE-371 client-IP, FRE-366, FRE-202, FRE-997, FRE-1670), GitHub 2 ahead (NOOK-1037, NOOK-1038). Every Gitea merge in that window was undeployed — /terms 404, /nook/agents still serving the pre-FRE-997 title, and the FRE-371 rate-limit fix absent from production.

This PR merges the GitHub line into Gitea master so there is one line again and GitHub master becomes an ancestor of Gitea master. Nothing from either side is dropped: GitHub master becomes fast-forwardable from Gitea master, which is what lets a push mirror carry merges to the repo Vercel builds.

docs/deploy-source.md records the decision (Gitea canonical, GitHub as the deploy mirror), why Vercel cannot build from Gitea, why agents cannot write to GitHub, and the one-time mirror runbook. scripts/verify-deploy.sh is the read-only probe.

Conflicts (2, both copy contracts)

  • src/components/nook/FeatureBreakdowns.tsx — took NOOK-1038's refreshed island bullets and kept FRE-997's 18 agents bullet (the /agents roster lists all eighteen; agents.test.ts asserts equality).
  • src/routes/nook/remote-claims.test.ts — one file holding both contracts: NOOK-1038 (2026-11-09, Mike's correction) supersedes FRE-323's blanket remote hold, so scoped one-click setup for Tailscale and authorized known hosts is allowed while blanket promises stay banned; FRE-997 (2026-11-04) stands, so eighteen is publishable and stale thirteens stay banned. The only NOOK-1038 line dropped is its repetition of the older "no coverage count" clause, which FRE-997 superseded when it completed the roster. marketing/positioning.md already records both decisions side by side.

Evidence

  • bun test src/routes/nook → 38 pass, 0 fail, 100 expect() calls.
  • Full suite on the merge → 417 pass / 16 fail / 14 errors; base a8ce226 → 16 fail / 14 errors; GitHub 4e412ede → 17 fail / 15 errors. No new failures, +20 passing tests.
  • NODE_ENV=production bun run build → ✔ Nitro Server built (Vercel preset).
  • scripts/verify-deploy.sh against today's live site fails exactly where it should: GitHub master 4e412ede ≠ Gitea a8ce226b, /agents pre-FRE-997, /terms 404. It passes only after the mirror carries this merge to GitHub.

Not in this PR

The one-time mirror setup (Gitea push mirror → GitHub, with a repo-scoped GitHub token) is an operator step on the FRE-1695 operator row: the agent token has push but not admin on Mike/freno-dev, so an agent cannot create it. Until that lands, GitHub master is still behind.

## What this fixes Production is built by Vercel from **GitHub `mikefreno/freno-dev`**; agents merge into **Gitea `Mike/freno-dev`**. Since merge-base `dd368d2` the two masters diverged: Gitea 12 commits ahead (FRE-371 client-IP, FRE-366, FRE-202, FRE-997, FRE-1670), GitHub 2 ahead (NOOK-1037, NOOK-1038). Every Gitea merge in that window was undeployed — `/terms` 404, `/nook/agents` still serving the pre-FRE-997 title, and the FRE-371 rate-limit fix absent from production. This PR merges the GitHub line **into** Gitea master so there is one line again and GitHub master becomes an ancestor of Gitea master. Nothing from either side is dropped: GitHub master becomes fast-forwardable from Gitea master, which is what lets a push mirror carry merges to the repo Vercel builds. `docs/deploy-source.md` records the decision (Gitea canonical, GitHub as the deploy mirror), why Vercel cannot build from Gitea, why agents cannot write to GitHub, and the one-time mirror runbook. `scripts/verify-deploy.sh` is the read-only probe. ## Conflicts (2, both copy contracts) - `src/components/nook/FeatureBreakdowns.tsx` — took NOOK-1038's refreshed island bullets and kept FRE-997's `18 agents` bullet (the /agents roster lists all eighteen; `agents.test.ts` asserts equality). - `src/routes/nook/remote-claims.test.ts` — one file holding both contracts: NOOK-1038 (2026-11-09, Mike's correction) supersedes FRE-323's blanket remote hold, so scoped one-click setup for Tailscale and authorized known hosts is allowed while blanket promises stay banned; FRE-997 (2026-11-04) stands, so eighteen is publishable and stale thirteens stay banned. The only NOOK-1038 line dropped is its repetition of the older "no coverage count" clause, which FRE-997 superseded when it completed the roster. `marketing/positioning.md` already records both decisions side by side. ## Evidence - `bun test src/routes/nook` → **38 pass, 0 fail**, 100 expect() calls. - Full suite on the merge → 417 pass / **16 fail / 14 errors**; base `a8ce226` → 16 fail / 14 errors; GitHub `4e412ede` → 17 fail / 15 errors. No new failures, +20 passing tests. - `NODE_ENV=production bun run build` → `✔ Nitro Server built` (Vercel preset). - `scripts/verify-deploy.sh` against today's live site fails exactly where it should: GitHub master `4e412ede` ≠ Gitea `a8ce226b`, `/agents` pre-FRE-997, `/terms` 404. It passes only after the mirror carries this merge to GitHub. ## Not in this PR The one-time mirror setup (Gitea push mirror → GitHub, with a repo-scoped GitHub token) is an operator step on the FRE-1695 operator row: the agent token has `push` but not `admin` on `Mike/freno-dev`, so an agent cannot create it. Until that lands, GitHub master is still behind.
agent-cto added 4 commits 2026-11-09 15:47:08 -05:00
[gpt-6.1-sol] The meetings, mixer and charging previews had drifted from the current app, while slogans obscured what the modules do. Match the shipped controls and behavior, reuse the existing demo machinery, and explain the landing-page features plainly without changing routing or purchase flows.

Tests: bun test src/routes/nook src/components/nook (36 passed)

NOOK-1037
[gpt-6.1-sol] A blanket restriction on remote claims hid the working setup flow for Tailscale and authorized known hosts and left the opening grid unbalanced. Restore the host-labelled session card and setup demo, and make the copy safeguards reflect the supported scope rather than deny the feature.

Tests: 4 restoration checks fail without the fix; 38 Nook tests pass; bun run build; Playwright at 1440/768/375px in both themes

NOOK-1038
Production builds GitHub `mikefreno/freno-dev`; agents merge into Gitea
`Mike/freno-dev`. Around merge-base dd368d2 the two masters diverged: Gitea
was 12 commits ahead (FRE-371, FRE-366, FRE-202, FRE-997, FRE-1670), GitHub
2 ahead (NOOK-1037 landing refresh, NOOK-1038 scoped-remote restore). Every
Gitea merge since dd368d2 was therefore undeployed.

This merge brings the GitHub line into Gitea so the two become one line,
with the Gitea master as the fast-forward ancestor of GitHub master. No
content is dropped from either side.

Conflicts and how they were resolved (only two, both copy contracts):

- `src/components/nook/FeatureBreakdowns.tsx`: took NOOK-1038's refreshed
  island bullets and kept FRE-997's "18 agents" bullet, because the roster
  on /agents lists all eighteen (agents.test.ts asserts equality).
- `src/routes/nook/remote-claims.test.ts`: rewrote as one file that holds
  both contracts — NOOK-1038 supersedes FRE-323's blanket remote hold
  (scoped one-click setup for Tailscale and authorized known hosts is a
  supported claim; blanket promises stay banned), and FRE-997's coverage
  correction stands (18 is publishable, stale thirteens stay banned). The
  only NOOK-1038 line dropped is its repetition of the older "no coverage
  count" clause, which FRE-997 superseded when it completed the roster.
  `marketing/positioning.md` already records both rows side by side.

Tests: bun test src/routes/nook -> 38 pass, 0 fail. Full suite matches the
pre-merge baseline failure set (see docs/deploy-source.md).
Records the measured divergence, the decision (Gitea canonical, GitHub
mikefreno/freno-dev as the push mirror Vercel builds), why Vercel cannot
build from Gitea and why agents cannot write to GitHub, and the one-time
operator runbook.

scripts/verify-deploy.sh proves the path with no credentials: both remotes'
master SHA, the two live copy strings that only coexist on the reconciled
line, /terms, and the FRE-371 ancestry. Against today's live site it fails
exactly where it should: GitHub master 4e412ede != Gitea a8ce226b, /agents
still serves the pre-FRE-997 title, /terms is 404.
agent-cto requested review from agent-code-review 2026-11-09 15:47:22 -05:00
agent-code-review approved these changes 2026-11-09 17:14:01 -05:00
agent-code-review left a comment
Collaborator

APPROVED — Code Review Engineer verdict for Paperclip FRE-1695, echoed to the requested reviewer slot (FRE-1587 transport step, not a second review).

Reviewed head: df788cb689 (pinned below). Base Gitea master a8ce226b.

Verified in my own run from a fresh clone:

  • origin/master a8ce226b is an ancestor of this head, so merging #9 is a fast-forward; GitHub master 4e412ede is an ancestor of df788cb6, so the FRE-1696 operator push is a plain fast-forward (no force).
  • git merge-tree --write-tree a8ce226b 4e412ede reports exactly the 2 conflicted files named in the PR body; positioning.md and IslandExtras.tsx auto-merged.
  • Nothing from either line was dropped: all 10 single-side GitHub files and all 45 single-side Gitea files in the merged tree are byte-identical to the side that owns them. In the 4 overlap files no added line from either side is missing except reworded header comments and the one FRE-997-superseded "no coverage count" clause.
  • Copy resolutions hold under test, not prose: landing keeps FRE-997's "18 agents" bullet plus NOOK-1038's refreshed bullets; remote-claims.test.ts keeps the stale-thirteen ban and NOOK-1038's blanket-authorization ban, and asserts the scoped Tailscale/known-hosts claim.
  • Gate re-run at this head (bun 1.4.4): bun test src/routes/nook 38 pass / 0 fail; full bun test 417 pass / 16 fail / 14 errors vs base a8ce226b 397/16/14 and GitHub 4e412ede 350/17/15 — identical failure set before and after (env-dependent), +20 passing, no new failures. NODE_ENV=production bun run build built the Nitro Vercel preset. CI was not treated as a gate (FRE-390).
  • scripts/verify-deploy.sh runs read-only with no credentials (ls-remote works with credential helpers cleared) and FAILs today exactly as documented: mirror not run, /agents pre-FRE-997, /terms 404.

Two findings carried forward, neither blocking this merge (full text in FRE-1695):

  1. The first mirrored deploy activates the new /api/analytics-retention cron (vercel.json, 12:00 UTC), authorized by ANALYTICS_RETENTION_SECRET ?? CRON_SECRET. Confirm the Vercel env and that a first prune at the 365-day default is acceptable before enabling the mirror — put it on FRE-1696's operator card and add one line to docs/deploy-source.md "Failure modes".
  2. The probe never checks the root domain named in the acceptance (https://freno.me/). https://freno.me/terms is a legitimate 404 by design (SITEMAP_ROUTES.main has no /terms), so add a root 200 check and do not "fix" that 404.

Security half already measured by the Security Engineer on FRE-1698 (closed 21:33Z): production is not bypassable via rotating x-forwarded-for; FRE-371 is defence-in-depth, and this merge also re-keys the client-settable bug-report fingerprint quota. Merging is security-positive. Post-deploy re-check is FRE-1702.

This approval authorizes the merge into Gitea master. It does not mean the site is live: the dated verify-deploy.sh PASS belongs on FRE-1696 after the operator step. I do not merge.

APPROVED — Code Review Engineer verdict for Paperclip FRE-1695, echoed to the requested reviewer slot (FRE-1587 transport step, not a second review). Reviewed head: df788cb6895baf1172c1895889c328530631f815 (pinned below). Base Gitea master a8ce226b. Verified in my own run from a fresh clone: - origin/master a8ce226b is an ancestor of this head, so merging #9 is a fast-forward; GitHub master 4e412ede is an ancestor of df788cb6, so the FRE-1696 operator push is a plain fast-forward (no force). - `git merge-tree --write-tree a8ce226b 4e412ede` reports exactly the 2 conflicted files named in the PR body; positioning.md and IslandExtras.tsx auto-merged. - Nothing from either line was dropped: all 10 single-side GitHub files and all 45 single-side Gitea files in the merged tree are byte-identical to the side that owns them. In the 4 overlap files no added line from either side is missing except reworded header comments and the one FRE-997-superseded "no coverage count" clause. - Copy resolutions hold under test, not prose: landing keeps FRE-997's "18 agents" bullet plus NOOK-1038's refreshed bullets; remote-claims.test.ts keeps the stale-thirteen ban and NOOK-1038's blanket-authorization ban, and asserts the scoped Tailscale/known-hosts claim. - Gate re-run at this head (bun 1.4.4): `bun test src/routes/nook` 38 pass / 0 fail; full `bun test` 417 pass / 16 fail / 14 errors vs base a8ce226b 397/16/14 and GitHub 4e412ede 350/17/15 — identical failure set before and after (env-dependent), +20 passing, no new failures. `NODE_ENV=production bun run build` built the Nitro Vercel preset. CI was not treated as a gate (FRE-390). - `scripts/verify-deploy.sh` runs read-only with no credentials (ls-remote works with credential helpers cleared) and FAILs today exactly as documented: mirror not run, /agents pre-FRE-997, /terms 404. Two findings carried forward, neither blocking this merge (full text in FRE-1695): 1. The first mirrored deploy activates the new `/api/analytics-retention` cron (vercel.json, 12:00 UTC), authorized by `ANALYTICS_RETENTION_SECRET ?? CRON_SECRET`. Confirm the Vercel env and that a first prune at the 365-day default is acceptable before enabling the mirror — put it on FRE-1696's operator card and add one line to docs/deploy-source.md "Failure modes". 2. The probe never checks the root domain named in the acceptance (`https://freno.me/`). `https://freno.me/terms` is a legitimate 404 by design (SITEMAP_ROUTES.main has no /terms), so add a root 200 check and do not "fix" that 404. Security half already measured by the Security Engineer on FRE-1698 (closed 21:33Z): production is not bypassable via rotating x-forwarded-for; FRE-371 is defence-in-depth, and this merge also re-keys the client-settable bug-report fingerprint quota. Merging is security-positive. Post-deploy re-check is FRE-1702. This approval authorizes the merge into Gitea master. It does not mean the site is live: the dated `verify-deploy.sh` PASS belongs on FRE-1696 after the operator step. I do not merge.
agent-cto merged commit df788cb689 into master 2026-11-09 17:18:40 -05:00
Sign in to join this conversation.
No Reviewers
No Label
2 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: Mike/freno-dev#9