diff --git a/11-Features.md b/11-Features.md index 820f2f9..3823c5a 100644 --- a/11-Features.md +++ b/11-Features.md @@ -1470,6 +1470,35 @@ callers were ever affected. --- +## Which inherited credentials a member may keep + +**What.** A member's pane runs a login shell, which re-sources the operator's secret store and +exports about thirty names. Exactly one of them is blocked: `GITEA_ACCESS_TOKEN`, see *Members cannot +use the operator's admin forge token* above. This entry records the **decision** about the two that +matter most among the rest, so that "we chose to allow it" never again looks the same as "we never +noticed". + +| Credential | A member may hold it | Why | +|---|---|---| +| `AI_GATEWAY_TOKEN` | **yes** | It is the key a member is *meant* to use. Paid-backend members reach their model through `llm.ltms.dev`, and that token is the single front-door key. Blocking it would stop those members working at all. | +| `CONTEXT7_TOKEN` | **yes** | It backs the `context7` documentation MCP, a read-only docs lookup that members are meant to have. The worst case is documentation reads on the operator's quota. | +| `GITEA_ACCESS_TOKEN` | **no** | Admin scope on the forge. Blocked — see the entry above. Members push with the repo-scoped `WORKER_GITEA_TOKEN` instead. | + +**On.** Nothing to turn on. The two allowed tokens flow through by default; the blocked one is +overwritten at every launch. + +**Why this is written down at all.** `BRIDGED_MEMBER` already exists, so splitting either of these +per-role is now a one-line guard in the secret store. The option is cheap and available — which is +exactly why the decision has to be explicit rather than implied by nobody having done it. The +original leak (CB-592) was found by accident. The same accident should not have to happen twice. + +**Gotcha.** This decision covers **two names out of about thirty**. The rest have not been reviewed +one by one; `CB-596` tracks enumerating them, and it needs the operator because the probe that would +list them is refused by the command classifier. So read this table as *"these two were decided"*, not +as *"everything else was checked and cleared"*. + +--- + ## Backfill status This page was started after the fact, so it is **not yet complete**. Entries above are written from @@ -1491,5 +1520,8 @@ earns an entry: CB-594); the Linux unit has not been checked for the same login-shell secret defect, and the gateways it targets are CB-308 work - multi-profile routing and `kind:` adapter selection (CB-305, CB-401/402) -- the reply push loop and its nudge budget (CB-307 step 2, CB-590) — note the budget is now **per - source**, a reply budget and a ticket budget, not one shared counter +- the reply push loop and its nudge budget (CB-307 step 2, CB-590, CB-598) — the budget is now + tracked **per pending item**, not per lead and not per source. A newly-arrived item keeps its + source eligible even when an older, still-undrained item has used up its own budget. The practical + consequence to write up: the cap bounds nudges *about one item*, so a lead with a steady arrival of + new work keeps being nudged — which is correct, but is not what the knob's name suggests