Repository navigation
docs: README cold-reader audit fixes; canvas_bind returns an idMap (#227) - #230
Merged
Merged
Conversation
) canvas_bind now returns idMap { workspace, projects } (old -> new) so an agent can retarget without re-listing. Docs said a bind re-keys every project AND canvas ID; only workspace and project IDs change, canvas IDs are kept, so every surface is corrected. Also states that the LLM critique never gates presenting (the heuristic directive is the only gate), that every cliche tell blocks the directive regardless of severity, the real theme count behind the pattern gate, where bound vs unbound canvases persist, and the lower-stakes README gaps from the audit.
# Conflicts: # README.md
Merged
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Fixes #227, except finding 1, which is the multi-line
batch_designops bug. That one is fixed separately in #229 because it needed a parser change.Code change:
canvas_bindreturns an ID mapcanvas_bindnow returnsidMap: { workspace: { old: new }, projects: { old: new } }. An agent can retarget its stale IDs straight from the result instead of callingproject_listandcanvas_listagain.bindRepoalready built this mapping internally and threw it away. The change only adds a field; the existingprojectsMigratedandcanvasesMigratedcounts are unchanged.While checking this I found that the docs overstated what a bind changes. They said binding re-keys every project and canvas ID. In fact only the workspace ID and the project IDs change. Canvas IDs are kept, and each canvas's
projectIdis updated to its new project. A throwaway repro confirmed it, andtest-repo-canvases.tsalready relied on it by callinggetCanvas(login.id)after the bind. Every surface that made the claim now says what actually happens: the READMEinitandcanvas_bindsections, theGUIDELINES.mdsharp-edges bullet, the server instructions, the gotchas, and thecanvas_binddocstring.test-repo-canvases.tsgains three checks: both projects map to liverepo-proj-IDs, the workspace maps to the liverepo-ws-ID, and canvas IDs survive the bind and point at the mapped project.Contract decisions now written down
src/directive.tsbehaves. With a key, the agent runs the critique loop as the standard last step (judge, thencanvas_revise, then judge again). Ifcanvas_revisestops at its iteration cap or because a pass did not improve the score, and axes still fail, the agent presents the design and tells the user which axes fail. A gate the agent cannot satisfy by improving the design would leave it stuck, and a model's verdict varies between runs. Several surfaces used to say "re-judge until it passes", with no exit. That wording is now consistent everywhere: the READMEcanvas_evaluateandcanvas_revisesections and workflow step 7,GUIDELINES.md, the server instructions, the gotcha, and thecanvas_evaluateandcanvas_revisedocstrings.canvas_evaluatedocstring, and aGUIDELINES.mdbullet all described cliché findings as advisory, or as not blocking. That contradicted both the directive paragraph andcountBlocking, which treats any cliché finding as blocking.Other corrections from the audit
~/.framesmith/canvases/, from canvases in a bound repo, which live in that repo's.framesmith/. The viewer section now says it also watches every registered repo.batch_designgets a parameter table, a note that the third argument toM()is the child index, the missing properties (name,pulse,responsive), and the keys a chartseriesentry accepts.SAFE_GRID_*patterns insrc/renderer.ts, instead of calling the rest "unsafe" without defining it.projectId: "default-project", an ID the README never defines.Tests
The fast suite passes 72/72 and
test-discoverability.tspasses 117/117.