Public: anyone can read this; the crew can change it.

Finish the crew settings review: file holds, team dials and subscriptions each kept, folded or deleted #8772

Merged opened this

Check · Review · Land · Live done — Landed and live in production.

Merged

torque/forge:torque/8732-finish-the-crew-settings-review-file-hol → main 1 commit fork

  • Merged. torque/8732-finish-the-crew-settings-review-file-hol was merged into main as f9d5622.

Review

Sign in to review this change.
3 files changed +11 −3
docs/features/seat-slots.md +4 −2
@@ -26,6 +26,8 @@ A change takes effect on the next tick and is a `repo.settings_updated` line on
2626 | Direction | Keep: what the planner plans against. |
2727 | Ceiling per day | Keep: the only dollar limit. |
2828 | Decisions here, Plans need a nod, Outsiders may trigger the crew | Keep: each is who answers, and none holds work silently. |
29 | File holds, team dials, subscriptions | Not reviewed here; they are other pages' settings. |
29 | File holds (Settings › Held files) | Keep: an admin's explicit, named hold on one path; it is the only setting here that holds work, so it says so where the work waits: the hold's row lists the issues it keeps waiting, and `flow` on such an issue says an admin holds the file, not that it is hot. |
30 | Team dials (Settings › Teams) | Keep: a share between teams, not a seat's number; it only reorders queued starts and holds nothing (all at 0 is the order the forge always had). |
31 | Subscriptions (the crew's grants) | Keep: whose model credential the crew spends is not a limit; without one the crew card already says it cannot start. |
3032
31 Not done: no other setting was deleted, and the governor's automatic lowering of builder slots is unchanged (it can only go below the number set here, never above).
33 Not done: no setting was deleted (the three above were reviewed in #8732 and kept), and the governor's automatic lowering of builder slots is unchanged (it can only go below the number set here, never above).
src/flow/why.ts +6 −1
@@ -22,6 +22,9 @@ import { heldNow, mapHolds } from "../crew/held.ts";
2222 import { nextOfPull, type Actor } from "./next_actor.ts";
2323 import { wallWords } from "./wall_wait.ts";
2424
25 /** How `crew/held.ts` words a file an admin holds, the one hold that is a person's setting. */
26 const HELD_BY_ADMIN = " is held by an admin";
27
2528 export const CAUSES = [
2629 "wall",
2730 "ceiling",
@@ -79,7 +82,9 @@ const RULES: Readonly<Record<CauseName, (f: WhyFacts) => Omit<Cause, "name"> | n
7982 hot_file: (f) =>
8083 f.hotFile !== undefined
8184 ? {
82 says: `A file it names is hot: ${f.hotFile}.`,
85 says: f.hotFile.endsWith(HELD_BY_ADMIN)
86 ? `An admin holds new work on ${f.hotFile.slice(0, -HELD_BY_ADMIN.length)}, so it waits (Settings › Held files).`
87 : `A file it names is hot: ${f.hotFile}.`,
8388 clears: "land or close the open pulls on that file, or release an admin's hold on it.",
8489 }
8590 : null,
test/mcp-flow-why.test.ts +1
@@ -162,6 +162,7 @@ describe("MCP flow with a subject", () => {
162162 expect(holdFile(app.db, repo.id, "src/pinned.ts", "alice").ok).toBe(true);
163163 const r = await call(ownerTok, { repo: "alice/one", issue: pinned.number });
164164 expect(r.value).toMatchObject({ moving: false, cause: "hot_file" });
165 expect(JSON.stringify(r.value)).toContain("An admin holds new work on src/pinned.ts");
165166 expect(r.value.says).toContain("src/pinned.ts");
166167 });
167168

↑↓ navigate ↵ open ⌘↵ its app esc close

Keyboard shortcuts

Docs