← Corpus / augment-it / plan
Pickup notes — 2026-07-13: deploy hardening, doc audits, credential hygiene
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.
- Path
- plans/pickups/Pickup-2026-07-13.md
- Authors
- Michael Staton
- Augmented with
- Claude Code on Claude Sonnet 5
- Tags
- Augment-It · Pickup · humain-vc · Build-Order · Deployment · Railway · Credential-Hygiene · Mon Jul 13 2026 00:00:00 GMT+0000 (Coordinated Universal Time)
Pickup notes — 2026-07-13
TL;DR
- Steps 1–10 of [[../Build-Order-Humain-VC-Unlock-Flow]] are DONE and
the user has confirmed the deployed instance works end-to-end at
https://augment.didi.sh(Railway, custom*.didi.shdomains). No prior pickup doc exists for this arc — the last one incontext-v/reminders/isPickup-2026-06-03, over a month before any of the Railway deploy work happened. - This session was entirely bug-fixing + doc/credential hygiene, no new features. Four real fixes, all found by using the live app or by re-reading docs against the actual filesystem, not by anyone requesting new work.
- Only Steps 11 and 12 remain open on the build-order plan. Step 11
(corpus backup to R2) needs one decision before it can be scoped:
shared
lossless-corebucket vs. a dedicated augment-it bucket — see “Open decisions” below. - No changelog entry has been written for any of this session’s
work. Last changelog is
2026-07-09_01_.... Pergit-conventions, this is worth doing before the next unrelated commit lands. - Working tree is clean on
rebuild/turbo-rsbuild, pushed throughfe6a203. Only dirty paths are submodule pointer bumps (clients/humain-vc,clients/reach-edu) that are deliberately left alone — per standing convention, the user tidies parent gitlinks manually after committing inside a child submodule, not the agent.
What shipped this session (chronological)
- README app-structure audit (
f8e4ab1). The “App structure” ASCII tree was missing 6 apps (affiliation-rating-resolver,person-db-resolver,person-enrichment,record-db-resolver,records-surface,strategy-curator) and 2 services (record-surrealdb-resolver,decile-mcp), and several listed ports were stale from before a port renumbering (record-collectorwas documented:3001, actually:3002;shellwas documented:3000, actually:3100). Pulled every port fresh from each app’srsbuild.config.tsrather than trusting the old doc. Also added narrative coverage for SurrealDB Cloud, didi.sh identity, the Flows registry (replacing the old singleROTATION), live multi-operator sync, and actor attribution. - GitHub Pages deploy was silently broken since 2026-07-08
(
9ef8244). Root cause: that day’s “pin pnpm version” commit addedpackageManager: pnpm@10.15.0to rootpackage.json(for Railway’s Docker builds), which collided with.github/workflows/pages.yml’s hardcodedpnpm/action-setup@v4version: 9— “Multiple versions of pnpm specified.” Six pushes in a row never actually redeployed the splash; GitHub Pages was quietly serving a 2026-07-08 build the whole time. Fixed by dropping the hardcoded version soaction-setupreadspackageManagerinstead. Verified live: workflow ran green,https://lossless-group.github.io/augment-it/is serving current content. Also resyncedsplash/pnpm-lock.yamlto whatsplash/package.jsonalready declared (it had drifted to oldastro 6.3.1/astro-pagefind 1.8.6). Also added a new feature-highlight card, “Build the corpus together, live” — the one shipped capability (NATS multi-operator sync) with no marketing coverage yet. JINA_API_KEY/JINA_AI_API_KEYnaming mismatch fixed (7891b15).docker-compose.ymlandservices/content-ingest/src/jina.tshave always readJINA_API_KEY;.env.example(and every local.envcopied from it) definedJINA_AI_API_KEY. Degraded gracefully to Jina’s free/no-auth tier, so nothing looked broken, butcontent-ingest— including the deployed humain-vc instance — has been running on free-tier rate limits since day one.scripts/jina-fetch-urls.mjsalready had a comment documenting this exact mismatch as a deliberate workaround; standardized onJINA_API_KEYeverywhere instead of routing around it. User setJINA_API_KEYon Railway’scontent-ingestservice directly; it auto-redeployed toSUCCESS.- R2/JuiceFS credentials documented in
.env.example(fe6a203). DiscoveredR2_ACCESS_KEY_ID,R2_SECRET_ACCESS_KEY,CLOUDFLARE_R2_API_ENDPOINT,CLOUDFLARE_ACCOUNT_ID, andJUICEFS_LOSSLESS_TOKENalready sitting in local.env, undocumented in.env.example— leftover from [[../../explorations/JuiceFS-Pinned-Path-Off-Local-Substrate]] (a 2026-06-18 exploration that ended deferred, never adopted into any live flow). That exploration’s own text says to remove the.envcopy and keep~/.secretsas the only canonical location — that cleanup never happened. User’s call: keep the redundancy deliberately (a solo dev’s~/.secretsconvention isn’t discoverable to a future contributor working insideaugment-it/, and agent harnesses like Claude Code only get automatic filesystem access within a project’s own working tree, not a laptop-wide dotfile outside it). Added a comment block in both.envand.env.exampledocumenting the redundancy and flagging the rotation-drift risk explicitly (same failure shape as item 3 above — two copies of a secret silently diverge when one gets rotated and the other doesn’t). - Two stale task-list entries corrected. Tasks #9 (“Domains: shell +
workspace-service on
*.didi.sh…”) and #10 (“Deploy all services and verify end-to-end”) were still showingpending/in_progressdespite being done and user-confirmed working — markedcompleted.
Build-order plan status
| Step | What | Status |
|---|---|---|
| 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) |
| 9 | Deploy augment-it, single-tenant | ✅ DONE 2026-07-09 (Railway, not DigitalOcean — see plan for the pivot rationale) |
| 10 | DNS + cookie day | ✅ DONE 2026-07-09 (*.didi.sh custom domains on Railway) |
| 11 | Corpus sync / backup | ⚑ NEEDS REVISITING — see “Open decisions” below |
| 12 | Dress rehearsal (acceptance run) | ⏳ Not started — needs Aneil + Linea, two laptops/browsers, real sign-ins |
Full detail, gotchas, and the DO→Railway pivot story: [[../Build-Order-Humain-VC-Unlock-Flow]].
Open decisions (need a human call before proceeding)
- Step 11 bucket scoping. Corpus backup mechanism needs to be
rclone (or similar S3-capable tool) syncing the Railway Volume to
R2 — Syncthing was considered and ruled out for the backup leg
specifically (it only syncs between two Syncthing daemons, no
native S3/R2 support). Still open: does the backup destination reuse
the existing tree-wide
lossless-corebucket (simplest, but re-opens the per-client-isolation question that [[../../explorations/JuiceFS-Pinned-Path-Off-Local-Substrate]] deliberately left unresolved), or does augment-it get its own dedicated bucket + scoped API token? This blocks writing the actual rclone job. - Syncthing for laptop↔hosted live sync (separate from the R2
backup leg) — still an open “do we actually want this” question.
Current single-writer policy is “sync deliberately, never
concurrently,” which fits a one-shot pull/push better than a
continuous P2P daemon. Running Syncthing on Railway would also
require it as a second process inside the
content-ingestcontainer itself, since Railway volumes are single-service-only — a separate Syncthing service can’t mount the same volume. - DigitalOcean droplet (167.172.42.247) decommission — unused since the Railway migration, not yet decided.
- Changelog entry for this session — not yet written, not yet explicitly requested by the user.
What to start with next session
Ranked by what unblocks the most:
- Resolve the Step 11 bucket-scoping decision (open decision #1 above) — a 2-minute conversation that unblocks writing the actual rclone-to-R2 job.
- Step 12 dress rehearsal — needs Aneil’s membership seeded on prod
(this may already be done; verify), then two people signed in
simultaneously on
augment.didi.shrunning real email sign-in, thesis creation, cross-screen liveness check, didi triage, and an attribution spot-check (frontmatter shows who did what). This is the actual acceptance test for the whole build-order arc. - Write the missing changelog entry for this session’s four fixes
— quick, and keeps the splash’s “Recent” section (which reads
straight from
changelog/) from going stale.
Branch + git state
- Current branch:
rebuild/turbo-rsbuild - Last pushed commit:
fe6a203(doc(.env.example): document R2/JuiceFS creds + why they're duplicated on purpose) - Working tree: clean except submodule pointer bumps in
clients/humain-vcandclients/reach-edu— leave those alone, the user tidies parent gitlinks deliberately. - Origin: in sync through
fe6a203.
Critical files / where things live
- Active plan:
context-v/plans/Build-Order-Humain-VC-Unlock-Flow.md— Steps 1–10 marked done in place, Step 11 flaggedNEEDS REVISITING. - Deployment reference:
DEPLOYMENT.md(repo root) — live URLs, 8-service Railway table, env vars, redeploy commands, gotchas, “Known gaps” (now just corpus sync — the Jina entry was removed this session). - JuiceFS/R2 background:
context-v/explorations/JuiceFS-Pinned-Path-Off-Local-Substrate.md— read before touching Step 11’s bucket question. - Splash deploy workflow:
.github/workflows/pages.yml. - Feature cards (splash marketing):
splash/src/content/feature-highlights/*.md— hand-curated, not auto-generated from anything. - Credential files:
.env(local, untracked, has the R2/JuiceFS redundancy comment now) and.env.example(tracked, same comment, placeholder values).
Verify state on next session
git fetch --all --prune
git status # should be clean except clients/* submodule pointers
git log --oneline -5 # HEAD should be fe6a203
railway status --json | head -5 # confirm still linked to the right Railway project
curl -s https://augment.didi.sh/ # confirm the humain-vc instance is still live
gh run list --workflow=pages.yml --limit 1 # confirm splash deploy is still green
Related
- [[../Build-Order-Humain-VC-Unlock-Flow]] — the active plan this pickup reports against
- [[../../explorations/JuiceFS-Pinned-Path-Off-Local-Substrate]] — background for Step 11’s bucket-scoping decision
DEPLOYMENT.md(repo root) — the deployment reference this session kept current- [[../../reminders/Pickup-2026-06-03]] — the last pickup doc before this one (over a month prior; predates the entire Railway deploy arc)