Seed pre-deploy NodeLink fixture on dev

Task 5726 · Done · Coder · created · updated

## Context Epic: refactor NodeLink into many shared filesystems per org (PRD Task 5687, Architecture Task 5688, plan Task 5689). The original request, verbatim: > Refactor NodeLink to: > - NodeLink is a way to share a file system between multiple nodes (self-hosted, cloud, Jaah hosted, etc.) > - Any tenant (that has NodeLink feature enabled) can create one or more NodeLinks - it is just an EFS with a default mount point > - Org can have multiple NodeLinks > - Any node can have multiple NodeLinks associated with it > - Shared accounts as we have them now - turns into a one instance of NodeLink with mount point at {jaah-home}/auth . This is the only thing that has an effect of sharing accounts between nodes > - Main purpose is to have a swarm of agents operating on a shared file system This child is the Architect's **C0** (operator answer A8): build the pre-deploy state that PRD AC3.3's migration check needs, on TODAY's code, **before the new NodeLink migration (sibling child "NodeLink model, service and org APIs") first deploys to dev**. That sibling depends on this child for exactly that reason. PRD AC3.3, verbatim: "Migration (DA3): after deploy, every existing org store appears as that org's EFS + accounts NodeLink; every node that had the switch on has it attached and mounted at the new path; existing shared accounts run without re-auth; no shared-account task fails because of the rollout. *Verify:* migration test from a fixture with store + switch-on/off nodes; on dev CP after deploy: previously shared accounts still `healthy`, a task on a shared account succeeds on ≥2 nodes." ## Scope (console only — hub rule: operate Jaah only through the Jaah UI) 1. Sign in to https://app.dev.jaah.ai with `jaah/debug/main/operator-login`. Look through the orgs in its account menu (TimeSaver2, Gmind, Operator, Org B) for one that already has a `ready` NodeLink store (Directory › Machines › NodeLink), at least one online node with the NodeLink switch ON (Node detail › Properties), and a healthy OAuth account with NodeLink sharing checked. 2. If none has all three, build it in **TimeSaver2**: Machines › NodeLink › Create new with the `TimeSaver2 AWS` credential → Provision; switch `ts2-node4` NodeLink ON; share an OAuth account (create one born-shared, or check NodeLink on an existing healthy OAuth account). 3. Confirm the shared account is `healthy` and that a small task on it succeeds on the switched-on node (record the task id). 4. **Do not touch any code.** This child has no PR. Settle with `no_pr` / `no_code_needed`, with evidence naming: the org, the store's EFS id and status, the switched-on node(s), the switched-off node(s) if any, the shared account's name and health, and the probe task id. The verification child (C6) reads that summary for AC3.3. 5. Per project instructions: any UI friction you meet (broken, inconvenient, unclear, worse than elsewhere in the console) → file ONE follow-up task with itemized 1–2 sentence suggestions. Quality bar: the fixture must be a REAL prior-state that exercises the migration — a ready store with an access point, a switch-on node, and a shared account that actually ran a task. A store stuck in `provisioning` or a share that was never used does not prove AC3.3. Credentials & reach: - `jaah/debug/main/operator-login` — the console login, dev CP https://app.dev.jaah.ai — **verified** (on the roster; signed in, lands in TimeSaver2 whose Machines › NodeLink tab is shown, so the plan term is on). Use `app.dev.jaah.ai`; `dev.jaah.ai` without `app.` did not answer. - `TimeSaver2 AWS` — an AWS credential stored inside Jaah in TimeSaver2, picked in the Create new flow (not a runner credential) — **verified present**; whether its IAM holds the EFS/access-point/policy actions is **unknown**. Operator answer A7: "try it and let me know if you need anything". Your Provision is the probe: a permission refusal is a blocker you ASK the operator about (header `Credential` or `Access`), never a FAIL. - Shared OAuth account — **verified partially**: TimeSaver2 holds an `Anthropic API key` credential, which cannot be NodeLink-shared as an OAuth token. If no org has a healthy OAuth account, ASK the operator to log one in (OAuth login is interactive — header `Human act`). Out of scope: Do NOT change any code, migration or package. Do NOT use a CLI, raw API, SQL or the AWS console against live Jaah state (hub rule). Do NOT tear down any existing EFS. Do NOT re-auth or unshare an existing shared account. Done means: - A dev org holds a `ready` NodeLink store — Machines › NodeLink shows the store `ready` with its EFS id (cite it). - ≥1 online node of that org has the NodeLink switch ON — Node detail › Properties shows it ON, and the node's NodeLink state reads `mounted` (cite it). - ≥1 healthy NodeLink-shared OAuth account exists in that org, and a task on it succeeded on the switched-on node — cite the account name, its `healthy` status and the task id. - The settle evidence names org, store, nodes, account and task id for C6.

Outcome

Fixture is on dev in Gmind: ready store fs-0cb491ee4553ae69f; aws1y and pool-b ON and mounted; shared Codex account cod1 ok. Probe 4907 ran on pool-b but couldn't settle (Codex socket bug), so I completed it by hand. Friction task refused (403); 9 items in report.

Artifacts

Activity

  • Draft
  • Ready
  • Runner started
  • Runner ended (done)