Skip to content

Commit f4b6856

Browse files
committed
context-v(pickups): session pickup notes — deploy hardening, doc audits, credential hygiene
No pickup doc existed for the entire Railway deploy arc (the last one in context-v/reminders/ is Pickup-2026-06-03, over a month before any of this). Wrote one covering today's session so a fresh session can pick up cold: what shipped (README app-structure audit, the GitHub Pages pnpm-conflict fix, the JINA_API_KEY naming fix, R2/JuiceFS credential documentation), build-order plan status (only Steps 11-12 remain), and the open decisions blocking Step 11 (R2 bucket scoping, Syncthing vs rclone). Files changed: - context-v/plans/pickups/Pickup-2026-07-13.md (new)
1 parent fe6a203 commit f4b6856

1 file changed

Lines changed: 219 additions & 0 deletions

File tree

Lines changed: 219 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,219 @@
1+
---
2+
title: "Pickup notes — 2026-07-13: deploy hardening, doc audits, credential hygiene"
3+
lede: "Steps 1–10 of the humain-vc unlock flow are done and confirmed live at augment.didi.sh. This session closed out a string of production-only bugs and stale docs found by actually using the deployed app, and scoped what Step 11 (corpus backup) needs before it can start."
4+
date_created: 2026-07-13
5+
date_modified: 2026-07-13
6+
authors:
7+
- Michael Staton
8+
augmented_with:
9+
- Claude Code on Claude Sonnet 5
10+
semantic_version: 0.0.1.0
11+
status: Active
12+
tags:
13+
- Augment-It
14+
- Pickup
15+
- humain-vc
16+
- Build-Order
17+
- Deployment
18+
- Railway
19+
- Credential-Hygiene
20+
- 2026-07-13
21+
---
22+
23+
# Pickup notes — 2026-07-13
24+
25+
## TL;DR
26+
27+
1. **Steps 1–10 of [[../Build-Order-Humain-VC-Unlock-Flow]] are DONE** and
28+
the user has confirmed the deployed instance works end-to-end at
29+
`https://augment.didi.sh` (Railway, custom `*.didi.sh` domains). No
30+
prior pickup doc exists for this arc — the last one in
31+
`context-v/reminders/` is `Pickup-2026-06-03`, over a month before any
32+
of the Railway deploy work happened.
33+
2. **This session was entirely bug-fixing + doc/credential hygiene, no
34+
new features.** Four real fixes, all found by using the live app or
35+
by re-reading docs against the actual filesystem, not by anyone
36+
requesting new work.
37+
3. **Only Steps 11 and 12 remain open** on the build-order plan. Step 11
38+
(corpus backup to R2) needs one decision before it can be scoped:
39+
shared `lossless-core` bucket vs. a dedicated augment-it bucket — see
40+
"Open decisions" below.
41+
4. **No changelog entry has been written for any of this session's
42+
work.** Last changelog is `2026-07-09_01_...`. Per `git-conventions`,
43+
this is worth doing before the next unrelated commit lands.
44+
5. **Working tree is clean** on `rebuild/turbo-rsbuild`, pushed through
45+
`fe6a203`. Only dirty paths are submodule pointer bumps
46+
(`clients/humain-vc`, `clients/reach-edu`) that are deliberately left
47+
alone — per standing convention, the user tidies parent gitlinks
48+
manually after committing inside a child submodule, not the agent.
49+
50+
## What shipped this session (chronological)
51+
52+
1. **README app-structure audit** (`f8e4ab1`). The "App structure" ASCII
53+
tree was missing 6 apps (`affiliation-rating-resolver`,
54+
`person-db-resolver`, `person-enrichment`, `record-db-resolver`,
55+
`records-surface`, `strategy-curator`) and 2 services
56+
(`record-surrealdb-resolver`, `decile-mcp`), and several listed ports
57+
were stale from before a port renumbering (`record-collector` was
58+
documented `:3001`, actually `:3002`; `shell` was documented `:3000`,
59+
actually `:3100`). Pulled every port fresh from each app's
60+
`rsbuild.config.ts` rather than trusting the old doc. Also added
61+
narrative coverage for SurrealDB Cloud, didi.sh identity, the Flows
62+
registry (replacing the old single `ROTATION`), live multi-operator
63+
sync, and actor attribution.
64+
2. **GitHub Pages deploy was silently broken since 2026-07-08**
65+
(`9ef8244`). Root cause: that day's "pin pnpm version" commit added
66+
`packageManager: pnpm@10.15.0` to root `package.json` (for Railway's
67+
Docker builds), which collided with `.github/workflows/pages.yml`'s
68+
hardcoded `pnpm/action-setup@v4` `version: 9` — "Multiple versions of
69+
pnpm specified." Six pushes in a row never actually redeployed the
70+
splash; GitHub Pages was quietly serving a 2026-07-08 build the whole
71+
time. Fixed by dropping the hardcoded version so `action-setup` reads
72+
`packageManager` instead. Verified live: workflow ran green,
73+
`https://lossless-group.github.io/augment-it/` is serving current
74+
content. Also resynced `splash/pnpm-lock.yaml` to what
75+
`splash/package.json` already declared (it had drifted to old
76+
`astro 6.3.1`/`astro-pagefind 1.8.6`). Also added a new
77+
feature-highlight card, "Build the corpus together, live" — the one
78+
shipped capability (NATS multi-operator sync) with no marketing
79+
coverage yet.
80+
3. **`JINA_API_KEY` / `JINA_AI_API_KEY` naming mismatch fixed**
81+
(`7891b15`). `docker-compose.yml` and
82+
`services/content-ingest/src/jina.ts` have always read
83+
`JINA_API_KEY`; `.env.example` (and every local `.env` copied from
84+
it) defined `JINA_AI_API_KEY`. Degraded gracefully to Jina's
85+
free/no-auth tier, so nothing looked broken, but `content-ingest`
86+
— including the deployed humain-vc instance — has been running on
87+
free-tier rate limits since day one. `scripts/jina-fetch-urls.mjs`
88+
already had a comment documenting this exact mismatch as a
89+
deliberate workaround; standardized on `JINA_API_KEY` everywhere
90+
instead of routing around it. **User set `JINA_API_KEY` on Railway's
91+
`content-ingest` service directly**; it auto-redeployed to `SUCCESS`.
92+
4. **R2/JuiceFS credentials documented in `.env.example`** (`fe6a203`).
93+
Discovered `R2_ACCESS_KEY_ID`, `R2_SECRET_ACCESS_KEY`,
94+
`CLOUDFLARE_R2_API_ENDPOINT`, `CLOUDFLARE_ACCOUNT_ID`, and
95+
`JUICEFS_LOSSLESS_TOKEN` already sitting in local `.env`, undocumented
96+
in `.env.example` — leftover from
97+
[[../../explorations/JuiceFS-Pinned-Path-Off-Local-Substrate]] (a
98+
2026-06-18 exploration that ended **deferred**, never adopted into
99+
any live flow). That exploration's own text says to remove the
100+
`.env` copy and keep `~/.secrets` as the only canonical location —
101+
that cleanup never happened. User's call: keep the redundancy
102+
deliberately (a solo dev's `~/.secrets` convention isn't discoverable
103+
to a future contributor working inside `augment-it/`, and agent
104+
harnesses like Claude Code only get automatic filesystem access
105+
within a project's own working tree, not a laptop-wide dotfile
106+
outside it). Added a comment block in both `.env` and `.env.example`
107+
documenting the redundancy and flagging the rotation-drift risk
108+
explicitly (same failure shape as item 3 above — two copies of a
109+
secret silently diverge when one gets rotated and the other doesn't).
110+
5. **Two stale task-list entries corrected.** Tasks #9 ("Domains: shell +
111+
workspace-service on `*.didi.sh`...") and #10 ("Deploy all services
112+
and verify end-to-end") were still showing `pending`/`in_progress`
113+
despite being done and user-confirmed working — marked `completed`.
114+
115+
## Build-order plan status
116+
117+
| Step | What | Status |
118+
|---|---|---|
119+
| 1–8 | Real email, org/membership seeding, membership gate, actor attribution, thesis vocabulary, curator liveness, sign-in wall, didi chat v0 | ✅ DONE (2026-07-06 – 2026-07-08) |
120+
| 9 | Deploy augment-it, single-tenant | ✅ DONE 2026-07-09 (Railway, not DigitalOcean — see plan for the pivot rationale) |
121+
| 10 | DNS + cookie day | ✅ DONE 2026-07-09 (`*.didi.sh` custom domains on Railway) |
122+
| 11 | Corpus sync / backup |**NEEDS REVISITING** — see "Open decisions" below |
123+
| 12 | Dress rehearsal (acceptance run) | ⏳ Not started — needs Aneil + Linea, two laptops/browsers, real sign-ins |
124+
125+
Full detail, gotchas, and the DO→Railway pivot story: [[../Build-Order-Humain-VC-Unlock-Flow]].
126+
127+
## Open decisions (need a human call before proceeding)
128+
129+
1. **Step 11 bucket scoping.** Corpus backup mechanism needs to be
130+
rclone (or similar S3-capable tool) syncing the Railway Volume to
131+
R2 — Syncthing was considered and ruled out for the backup leg
132+
specifically (it only syncs between two Syncthing daemons, no
133+
native S3/R2 support). Still open: does the backup destination reuse
134+
the existing tree-wide `lossless-core` bucket (simplest, but
135+
re-opens the per-client-isolation question that
136+
[[../../explorations/JuiceFS-Pinned-Path-Off-Local-Substrate]]
137+
deliberately left unresolved), or does augment-it get its own
138+
dedicated bucket + scoped API token? This blocks writing the actual
139+
rclone job.
140+
2. **Syncthing for laptop↔hosted live sync** (separate from the R2
141+
backup leg) — still an open "do we actually want this" question.
142+
Current single-writer policy is "sync deliberately, never
143+
concurrently," which fits a one-shot pull/push better than a
144+
continuous P2P daemon. Running Syncthing on Railway would also
145+
require it as a second process inside the `content-ingest`
146+
container itself, since Railway volumes are single-service-only —
147+
a separate Syncthing service can't mount the same volume.
148+
3. **DigitalOcean droplet (167.172.42.247) decommission** — unused
149+
since the Railway migration, not yet decided.
150+
4. **Changelog entry for this session** — not yet written, not yet
151+
explicitly requested by the user.
152+
153+
## What to start with next session
154+
155+
Ranked by what unblocks the most:
156+
157+
1. **Resolve the Step 11 bucket-scoping decision** (open decision #1
158+
above) — a 2-minute conversation that unblocks writing the actual
159+
rclone-to-R2 job.
160+
2. **Step 12 dress rehearsal** — needs Aneil's membership seeded on prod
161+
(this may already be done; verify), then two people signed in
162+
simultaneously on `augment.didi.sh` running real email sign-in,
163+
thesis creation, cross-screen liveness check, didi triage, and an
164+
attribution spot-check (frontmatter shows who did what). This is the
165+
actual acceptance test for the whole build-order arc.
166+
3. **Write the missing changelog entry** for this session's four fixes
167+
— quick, and keeps the splash's "Recent" section (which reads
168+
straight from `changelog/`) from going stale.
169+
170+
## Branch + git state
171+
172+
- **Current branch:** `rebuild/turbo-rsbuild`
173+
- **Last pushed commit:** `fe6a203` (`doc(.env.example): document
174+
R2/JuiceFS creds + why they're duplicated on purpose`)
175+
- **Working tree:** clean except submodule pointer bumps in
176+
`clients/humain-vc` and `clients/reach-edu` — leave those alone, the
177+
user tidies parent gitlinks deliberately.
178+
- **Origin:** in sync through `fe6a203`.
179+
180+
## Critical files / where things live
181+
182+
- **Active plan:** `context-v/plans/Build-Order-Humain-VC-Unlock-Flow.md`
183+
— Steps 1–10 marked done in place, Step 11 flagged `NEEDS REVISITING`.
184+
- **Deployment reference:** `DEPLOYMENT.md` (repo root) — live URLs,
185+
8-service Railway table, env vars, redeploy commands, gotchas, "Known
186+
gaps" (now just corpus sync — the Jina entry was removed this
187+
session).
188+
- **JuiceFS/R2 background:**
189+
`context-v/explorations/JuiceFS-Pinned-Path-Off-Local-Substrate.md`
190+
read before touching Step 11's bucket question.
191+
- **Splash deploy workflow:** `.github/workflows/pages.yml`.
192+
- **Feature cards (splash marketing):**
193+
`splash/src/content/feature-highlights/*.md` — hand-curated, not
194+
auto-generated from anything.
195+
- **Credential files:** `.env` (local, untracked, has the R2/JuiceFS
196+
redundancy comment now) and `.env.example` (tracked, same comment,
197+
placeholder values).
198+
199+
## Verify state on next session
200+
201+
```bash
202+
git fetch --all --prune
203+
git status # should be clean except clients/* submodule pointers
204+
git log --oneline -5 # HEAD should be fe6a203
205+
railway status --json | head -5 # confirm still linked to the right Railway project
206+
curl -s https://augment.didi.sh/ # confirm the humain-vc instance is still live
207+
gh run list --workflow=pages.yml --limit 1 # confirm splash deploy is still green
208+
```
209+
210+
## Related
211+
212+
- [[../Build-Order-Humain-VC-Unlock-Flow]] — the active plan this
213+
pickup reports against
214+
- [[../../explorations/JuiceFS-Pinned-Path-Off-Local-Substrate]]
215+
background for Step 11's bucket-scoping decision
216+
- `DEPLOYMENT.md` (repo root) — the deployment reference this session
217+
kept current
218+
- [[../../reminders/Pickup-2026-06-03]] — the last pickup doc before
219+
this one (over a month prior; predates the entire Railway deploy arc)

0 commit comments

Comments
 (0)