Use Effect fn for workbench random ids

This commit is contained in:
elpresidank 2026-06-04 07:39:08 -05:00
parent 157dd38df5
commit 069d901737
2 changed files with 30 additions and 11 deletions

View file

@ -2214,6 +2214,26 @@ Notes:
- `cd ts && bun run lint` - `cd ts && bun run lint`
- `git diff --check` - `git diff --check`
### 2026-06-04: Workbench Random ID Effect.fn Helper Slice
- Status: migrated and package-verified.
- Completed:
- `ts/packages/workbench/src/atoms/workbench.ts` now defines the reusable
random id helper with named `Effect.fn` instead of a function returning
`Effect.gen`.
- Existing notification, upload, chat request, and message id call sites are
unchanged and still yield the helper directly.
- The remaining workbench `Effect.gen` scan hit is the local
`submitUploadDocument` one-shot effect value inside an existing
`Effect.fn` command, not a reusable helper factory.
- Verification:
- `cd ts/packages/workbench && bun run build`
- `cd ts && bun run check:tsgo`
- `cd ts && bun run build`
- `cd ts && bun run test`
- `cd ts && bun run lint`
- `git diff --check`
## Subagent Findings To Preserve ## Subagent Findings To Preserve
- MCP/workbench: - MCP/workbench:
@ -2394,10 +2414,11 @@ Notes:
- Fresh strict signal sweep after the 2026-06-04 helper and collection - Fresh strict signal sweep after the 2026-06-04 helper and collection
slices found no production normal `Error`, raw `try`/`catch`, native slices found no production normal `Error`, raw `try`/`catch`, native
`switch`, or Effect-focused type assertions under `ts/packages`. `switch`, or Effect-focused type assertions under `ts/packages`.
- Remaining real helper-normalization targets from the fresh sweep are one - Remaining real helper-normalization targets from the fresh sweep are
workbench atom helper plus separately scoped inline callback/program separately scoped inline callback/program factories in messaging
factories in messaging compatibility facades, gateway/librarian helpers, compatibility facades, gateway/librarian helpers, and CLI command actions.
and CLI command actions. The workbench random id helper is complete; the remaining workbench
`Effect.gen` match is a local one-shot command effect value.
- Remaining real long-lived native collection targets include base processor - Remaining real long-lived native collection targets include base processor
registries, Librarian service / collection manager state, prompt template registries, Librarian service / collection manager state, prompt template
cache, and a workbench module cache. Local traversal sets and test fakes cache, and a workbench module cache. Local traversal sets and test fakes

View file

@ -488,13 +488,11 @@ export function resultError<A, E>(result: AsyncResult.AsyncResult<A, E>): string
return resultErrorMessage(result); return resultErrorMessage(result);
} }
function randomId(prefix: string): Effect.Effect<string> { const randomId = Effect.fn("trustgraph.workbench.randomId")(function*(prefix: string) {
return Effect.gen(function*() { const left = yield* Random.nextIntBetween(0, 36 ** 6, { halfOpen: true });
const left = yield* Random.nextIntBetween(0, 36 ** 6, { halfOpen: true }); const right = yield* Random.nextIntBetween(0, 36 ** 6, { halfOpen: true });
const right = yield* Random.nextIntBetween(0, 36 ** 6, { halfOpen: true }); return `${prefix}-${left.toString(36).padStart(6, "0")}${right.toString(36).padStart(6, "0")}`;
return `${prefix}-${left.toString(36).padStart(6, "0")}${right.toString(36).padStart(6, "0")}`; });
});
}
function metadataFrom(metadata: StreamingMetadata | undefined): ChatMessage["metadata"] | undefined { function metadataFrom(metadata: StreamingMetadata | undefined): ChatMessage["metadata"] | undefined {
if (metadata === undefined) return undefined; if (metadata === undefined) return undefined;