Skip to content

Rename to graph-builder-spec (#15) - #23

Merged
borisdev merged 3 commits into
mainfrom
rename-graph-builder-spec
Oct 7, 2026
Merged

borisdev merged 3 commits into
mainfrom
rename-graph-builder-spec

Conversation

@borisdev

@borisdev borisdev commented Oct 6, 2026

Copy link
Copy Markdown
Owner

Closes #15's naming question. Third in the stack — base is boundary-types (#22), which is based on readme-diagram-companion (#20). Merge #20 → #22 → this, and each retargets automatically.

Boris, today, choosing between the two contradictory recommendations sitting in #15:

graph-builder-spec, on the grounds that #19's corrected subtitle — "A declaration layer over Pydantic Graph Builder" — is what licenses it, and that graph-builder-spec reuses Pydantic's own noun rather than inventing one.

What moved

before after
distribution workflow-workbench graph-builder-spec
import package workflow_workbench graph_builder_spec
frontend source frontend/workflow-workbench/ frontend/graph-builder-spec/
built island static/workflow-workbench.{js,css} static/graph-builder-spec.{js,css}

182 references across 56 files, plus three directory renames and two renamed build artifacts. No alias, no shim — a missed call site is an ImportError at the import, not a silent change of behaviour, which is the same choice 0.2.0 made for NodeSpec(...) and 0.3.0 for coherence_check().

Two things deliberately NOT renamed

  • CHANGELOG entries for shipped releases. Those releases really were published as workflow-workbench; rewriting them would make history describe a name that did not exist then. The new entry says so explicitly, so a reader hitting uv lock --upgrade-package workflow-workbench further down knows why.
  • The GitHub repo itself. gh repo rename graph-builder-spec is outward-facing — it changes a public URL and every existing clone's remote — and it stays Boris's action.

⚠️ Ordering, because it is not optional

Both downstream repos track main, not a sha:

nobsmed-v2        branch = "main"   + 29 files
ai_computer_use   rev    = "main"   + 3 files

GitHub redirects the old clone URL after a rename, so the git URL survives. The old distribution name does not — so their next uv sync fails on a name that no longer exists. Their rename PRs are open alongside this one, and their uv.lock is deliberately left untouched: the new URL does not resolve until gh repo rename runs, so a hand-edited lock would be an artifact nobody has validated. uv lock after the rename, not before.

1. merge #20, #22, this PR
2. gh repo rename graph-builder-spec        <- yours
3. merge the two downstream PRs, then `uv lock` in each

Verification

  • 296 tests green locally — ⛔ no CI in this repo, so one local run
  • graph_builder_spec.reference --check: both generated tables match
  • uv lock --check clean, and uv sync --extra evals resolves under the new name
  • the quickstart command runs: uv run python3 -m examples.greeting
  • git grep workflow_workbench\|workflow-workbench returns nothing outside the CHANGELOG

Copilot AI balanced review requested due to automatic review settings October 6, 2026 23:14

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

Stale frontend names and undocumented legacy environment-variable names leave the rename incomplete.

Review effort: Balanced
Findings: None

What changed in this PR

Renames the distribution, Python package, frontend island, documentation, examples, and tests from workflow-workbench to graph-builder-spec.

Changes:

  • Renames Python imports, packaging metadata, and repository references.
  • Renames frontend source, mount point, and built assets.
  • Documents the breaking migration and updates generated-reference commands.
File Description
uv.lock Renames the Python distribution.
pyproject.toml Updates package metadata and wheel paths.
README.md Updates branding, URLs, imports, and commands.
CHANGELOG.md Documents the breaking rename.
.claude/​skills/​implement-a-workflow/​SKILL.md Updates skill guidance.
graph_builder_spec/​__init__.py Updates package exports and documentation.
graph_builder_spec/​checks.py Updates internal import.
graph_builder_spec/​cli.py Renames CLI entry-point references.
graph_builder_spec/​devserver.py Renames imports and viewer branding.
graph_builder_spec/​diagram.py Updates imports and default diagram title.
graph_builder_spec/​evals.py Updates internal imports.
graph_builder_spec/​graph_spec.py Updates internal imports.
graph_builder_spec/​parity.py Updates generator branding and commands.
graph_builder_spec/​payload.py Moves the viewer payload contract.
graph_builder_spec/​reference.py Updates reference-generator commands.
graph_builder_spec/​report.py Updates payload import and documentation.
graph_builder_spec/​serve.py Renames viewer assets and service branding.
graph_builder_spec/​spec.py Updates imports and package references.
graph_builder_spec/​static/​graph-builder-spec.css Renames the built stylesheet.
graph_builder_spec/​static/​graph-builder-spec.js Renames the built JavaScript island.
frontend/​graph-builder-spec/​package.json Renames the frontend package.
frontend/​graph-builder-spec/​package-lock.json Moves frontend dependency lock data.
frontend/​graph-builder-spec/​tsconfig.json Moves TypeScript configuration.
frontend/​graph-builder-spec/​vite.config.ts Renames build outputs and paths.
frontend/​graph-builder-spec/​src/​App.tsx Moves the island application.
frontend/​graph-builder-spec/​src/​Panel.tsx Moves the report panel.
frontend/​graph-builder-spec/​src/​contract.ts Updates the Python contract reference.
frontend/​graph-builder-spec/​src/​layout.ts Moves graph layout logic.
frontend/​graph-builder-spec/​src/​main.tsx Renames the island mount point.
frontend/​graph-builder-spec/​src/​nodes.tsx Moves node rendering.
frontend/​graph-builder-spec/​src/​panel.css Moves panel styling.
frontend/​graph-builder-spec/​src/​styles.css Moves island styling.
examples/​contestable.py Updates package imports.
examples/​counter.py Updates package imports.
examples/​greeting.py Updates package and eval imports.
examples/​local/​extraction.py Updates package imports.
examples/​parallel.py Updates package imports.
examples/​subgraph.py Updates package imports.
examples/​ladder/​stage1_bare.py Updates package imports.
examples/​ladder/​stage2_strategies.py Updates package imports.
examples/​ladder/​stage3_new_node.py Updates package imports.
examples/​ladder/​stage4_subgraph.py Updates package imports.
examples/​ladder/​stage5_battle.py Updates eval import.
examples/​ladder/​stage8_join.py Updates package imports.
examples/​ladder/​stage9_decision.py Updates package imports.
examples/​ladder/​stage10_no_basenode.py Updates package imports.
docs/​how-it-runs.md Updates repository URL.
docs/​migration-0.2.md Updates migration import example.
docs/​migration-0.3.md Updates migration import example.
docs/​parity.md Updates generated documentation branding.
docs/​probe_builder_features.py Updates package references and imports.
tests/​test_boundary_types.py Updates package imports.
tests/​test_browser.py Updates viewer imports.
tests/​test_composed_node.py Updates viewer and package imports.
tests/​test_contestable.py Updates package import.
tests/​test_contract_parity.py Updates contract paths and imports.
tests/​test_devserver.py Updates devserver imports.
tests/​test_evals.py Updates evaluation imports.
tests/​test_fan_out.py Updates package import.
tests/​test_greeting.py Updates package and eval imports.
tests/​test_island_browser.py Updates viewer import and asset path.
tests/​test_ladder.py Updates package imports.
tests/​test_parity.py Updates generator imports and paths.
tests/​test_reference.py Updates reference-generator imports and paths.
tests/​test_serve.py Updates viewer imports and source assertions.
tests/​test_step_problem.py Updates package and payload imports.
tests/​test_subgraph.py Updates package and devserver imports.
tests/​test_transform_edge.py Updates package imports.
tests/​test_vocabulary.py Updates package imports.
tests/​test_workflow_spec.py Updates package imports.

💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.

Copilot AI balanced review requested due to automatic review settings October 6, 2026 23:18
borisdev pushed a commit that referenced this pull request Oct 6, 2026
**`frontend/.../vite.config.ts` still said `name: "WorkflowWorkbenchIsland"`.**
Real, and mine: the rename script covered snake, kebab and "Workflow Workbench"
with a space — not PascalCase. **Tenth instance of this repo's pattern, and the
second I inflicted on the rename itself.** The sweep that finds it is
`git grep -in workbench`, which is the check that should have existed before the
script ran, not after the review.

⚠️ Measured before assuming it mattered: the iife `name` is referenced NOWHERE
else, and the committed bundle carries no global assignment at all
(`grep -oE "^(var|window\.|globalThis\.)" static/graph-builder-spec.js` -> none).
So this is cosmetic and needs no rebuild — there is no source/artifact drift.

**The review's other half was already fixed.** It read commit 4125ec3, which
predates 55d2451; `WORKFLOW_WORKBENCH_TOKEN` / `_STORE` are renamed and the
CHANGELOG documents them. Worth saying out loud because the review independently
found the gap I had just found — which is corroboration, not a second finding.

Also reworded four places where "workbench" meant THIS LIBRARY and now dangles
("no workbench in the file" -> "none of this library in the file"). Three
remaining uses are the common noun — "a workbench that can express everything is
just the engine with extra steps" — and stay.

296 tests green, both generated tables matching.
@borisdev

borisdev commented Oct 6, 2026

Copy link
Copy Markdown
Owner Author

Both halves of the headline checked. One was real and mine; the other was already fixed.

name: "WorkflowWorkbenchIsland" in frontend/.../vite.config.ts — real

My rename script covered snake_case, kebab-case and "Workflow Workbench" with a space. Not
PascalCase.
That is the tenth instance of this repo's recurring pattern and the second I
inflicted on the rename itself — the sweep that finds it is one command, git grep -in workbench,
and it belonged before the script ran rather than after the review.

Fixed to GraphBuilderSpecIsland. ⚠️ Measured before assuming it mattered:

grep -rn WorkflowWorkbenchIsland                       -> only the config. Nothing reads it.
grep -oE "^(var|window\.|globalThis\.)" static/*.js    -> none. The iife name is not in the bundle.

So it is cosmetic and needs no rebuild — there is no source/artifact drift to chase.

"undocumented legacy environment-variable names" — already fixed

The review ran on 4125ec3, which predates 55d2451. WORKFLOW_WORKBENCH_TOKEN and
WORKFLOW_WORKBENCH_STORE are renamed, in the CHANGELOG table, and verified to fail closed —
serve() raises SystemExit rather than binding non-localhost unauthenticated, so no alias is
needed.

Worth saying out loud rather than waving away: the review found that gap independently, minutes
after I did
, which is corroboration of the same miss, not a second finding.

Also in this push

Four places where "workbench" meant this library and now dangles — "no workbench in the file"
→ "none of this library in the file". Three remaining uses are the common noun ("a workbench
that can express everything is just the engine with extra steps"
) and stay.

296 tests green, both generated tables matching. ⚠️ The review on record predates this push.

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The frontend lockfile and Vite IIFE name still retain superseded package identifiers.

Review effort: Balanced
Findings: None

Previously missed (1)

In code that hasn't changed since last review

Low severity IIFE library name still uses old branding

frontend/​graph-builder-spec/​vite.config.ts:21

This is the remaining WorkflowWorkbench identifier after the rename. build.lib.name is the IIFE library/global name, so it should use the new package branding rather than retaining the old public identifier.

Copilot AI balanced review requested due to automatic review settings October 6, 2026 23:21

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot review overview

🔵 Needs a closer look

The frontend lockfile still records the obsolete workflow-spec-island package identity.

Review effort: Balanced
Findings: None

@borisdev
borisdev changed the base branch from boundary-types to main October 7, 2026 00:31
Boris Dev added 3 commits October 7, 2026 00:31
Boris, 2026-10-06, on the recommendation in #15:

    graph-builder-spec, on the grounds that #19's corrected subtitle — "A
    declaration layer over Pydantic Graph Builder" — is what licenses it, and
    that graph-builder-spec reuses Pydantic's own noun rather than inventing one.

    distribution      workflow-workbench          -> graph-builder-spec
    import package    workflow_workbench          -> graph_builder_spec
    frontend source   frontend/workflow-workbench -> frontend/graph-builder-spec
    built island      static/workflow-workbench.* -> static/graph-builder-spec.*

No alias and no shim. A missed call site is an ImportError at the import, not a
silent change of behaviour — the same choice 0.2.0 made for `NodeSpec(...)` and
0.3.0 for `coherence_check()`.

⚠️ CHANGELOG entries for SHIPPED releases are left as written, and the new entry
says so. Those releases really were published as `workflow-workbench`; rewriting
them would make history describe a name that did not exist at the time.

⚠️ The GitHub repo rename is a separate, outward-facing action and is Boris's:
`gh repo rename graph-builder-spec`. Until it runs, the new clone URL does not
resolve — which is why the two downstream repos' `uv lock` must be regenerated
AFTER it, not in their rename PRs.

296 tests green locally, both generated tables regenerated and matching, and the
quickstart command runs. No CI in this repo, so that is one local run.
`WORKFLOW_WORKBENCH_TOKEN` and `WORKFLOW_WORKBENCH_STORE` survived the sweep,
because the script replaced three casings and not SCREAMING_CASE. Found by a
case-INSENSITIVE grep, which is the check that should have been written first.
Ninth instance of this repo's pattern, and the first one I inflicted on the
rename itself.

⚠️ Verified rather than assumed that this fails CLOSED: a stale
WORKFLOW_WORKBENCH_TOKEN is simply unset under the new name, and `serve()`
raises SystemExit rather than binding a non-localhost host unauthenticated
(serve.py:194). The process refuses to start; it does not start without a token.
That is what makes an alias unnecessary here.

296 tests green.
**`frontend/.../vite.config.ts` still said `name: "WorkflowWorkbenchIsland"`.**
Real, and mine: the rename script covered snake, kebab and "Workflow Workbench"
with a space — not PascalCase. **Tenth instance of this repo's pattern, and the
second I inflicted on the rename itself.** The sweep that finds it is
`git grep -in workbench`, which is the check that should have existed before the
script ran, not after the review.

⚠️ Measured before assuming it mattered: the iife `name` is referenced NOWHERE
else, and the committed bundle carries no global assignment at all
(`grep -oE "^(var|window\.|globalThis\.)" static/graph-builder-spec.js` -> none).
So this is cosmetic and needs no rebuild — there is no source/artifact drift.

**The review's other half was already fixed.** It read commit 4125ec3, which
predates 55d2451; `WORKFLOW_WORKBENCH_TOKEN` / `_STORE` are renamed and the
CHANGELOG documents them. Worth saying out loud because the review independently
found the gap I had just found — which is corroboration, not a second finding.

Also reworded four places where "workbench" meant THIS LIBRARY and now dangles
("no workbench in the file" -> "none of this library in the file"). Three
remaining uses are the common noun — "a workbench that can express everything is
just the engine with extra steps" — and stay.

296 tests green, both generated tables matching.
@borisdev
borisdev force-pushed the rename-graph-builder-spec branch from 7b94830 to 93c01e9 Compare October 7, 2026 00:33
@borisdev
borisdev merged commit bbf2766 into main Oct 7, 2026
@borisdev
borisdev deleted the rename-graph-builder-spec branch October 7, 2026 00:34
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

README: collapse the generated tables, merge the three honesty sections

2 participants