Repository navigation
feat(canvas): add Pick & polish for prototype feedback - #13
lukasoppermann wants to merge 7 commits into
Conversation
Preserve creator-owned improvement notes, element and region selection, Hub synchronization, and immutable repair batches. Co-authored-by: Copilot App <[email protected]> Copilot-Session: c7fef05b-f8a7-419f-9baf-16b6ad61733c
There was a problem hiding this comment.
🟡 Changes recommended
Unresolved ownership, synchronization, checkout-safety, selection, and unbounded-result issues block approval.
4 open findings
What changed in this PR
Adds Pick & polish to the prototype canvas for creator-owned feedback, with durable notes, Hub synchronization, and immutable Copilot repair batches.
Changes:
- Adds element/region selection, note controls, and Storybook examples.
- Implements local persistence, revision-guarded synchronization, and repair-batch actions.
- Separates improvement notes from team reviews and Learnings.
| File | Description |
|---|---|
hub/vite.prototype-canvas.config.mjs |
Splits feature bundles. |
hub/test/models/learning/run_test.rb |
Tests note exclusion from learning scheduling. |
hub/test/integration/canvas_repository_comments_test.rb |
Tests note APIs, isolation, and limits. |
hub/script/build-prototype-preview-bridge.mjs |
Bundles shared anchor validation. |
hub/docs/storybook.md |
Documents the notes workbench. |
hub/docs/review-collaboration.md |
Distinguishes creator notes from team reviews. |
hub/docs/prototype-canvas.md |
Documents selection, persistence, synchronization, and handoff. |
hub/db/schema.rb |
Records note fields and constraints. |
hub/db/migrate/20261013080000_add_improvement_notes_to_review_comments.rb |
Adds note storage and constraints. |
hub/config/routes.rb |
Exposes note synchronization endpoints. |
hub/app/models/review_comment.rb |
Adds note validation and filtering. |
hub/app/models/prototype.rb |
Separates review and note associations. |
hub/app/models/learning/run.rb |
Excludes notes from scheduling. |
hub/app/models/learning/overview.rb |
Excludes notes from evidence. |
hub/app/models/learning/collection.rb |
Excludes notes from imports. |
hub/app/javascript/utils/review-anchor/validate-anchor.ts |
Exports shared anchor validation. |
hub/app/javascript/utils/prototype-canvas/types.ts |
Adds feature configuration flags. |
hub/app/javascript/utils/prototype-canvas/en.ts |
Adds loading copy; misleading production “demo” wording remains. |
hub/app/javascript/features/prototype-canvas-improvement-notes/use-saved-notes/index.ts |
Loads, polls, saves, and synchronizes notes. |
hub/app/javascript/features/prototype-canvas-improvement-notes/use-saved-notes/index.test.ts |
Tests persistent save errors. |
hub/app/javascript/features/prototype-canvas-improvement-notes/use-preview-selection/index.ts |
Connects selection and preview markers. |
hub/app/javascript/features/prototype-canvas-improvement-notes/types.ts |
Defines note and selection contracts. |
hub/app/javascript/features/prototype-canvas-improvement-notes/styles.css |
Styles notes and selection controls. |
hub/app/javascript/features/prototype-canvas-improvement-notes/stories.tsx |
Adds workbench stories; outdated feature naming remains. |
hub/app/javascript/features/prototype-canvas-improvement-notes/preview/index.tsx |
Renders sample preview screens. |
hub/app/javascript/features/prototype-canvas-improvement-notes/index.test.tsx |
Tests interactive note workflows. |
hub/app/javascript/features/prototype-canvas-improvement-notes/fixtures.ts |
Supplies sample targets and notes. |
hub/app/javascript/features/prototype-canvas-improvement-notes/en.ts |
Defines workflow copy; production preview errors still say “demo.” |
hub/app/javascript/features/prototype-canvas-improvement-notes/capture/index.ts |
Crops sample SVG captures. |
hub/app/javascript/features/prototype-canvas-hub-panel/index.tsx |
Disables competing review selection controls. |
hub/app/javascript/components/prototype-canvas-toolbar/index.tsx |
Adds the notes toolbar slot. |
hub/app/javascript/application/prototype-preview-bridge/index.ts |
Adds combined selection; keyboard text-field selection and scripted-click interception remain unresolved. |
hub/app/javascript/application/prototype-preview-bridge/index.test.ts |
Updates bridge capability expectations. |
hub/app/javascript/application/prototype-preview-bridge/improvement-selection.test.ts |
Tests pointer and keyboard selection. |
hub/app/javascript/application/prototype-canvas/tests/improvement-notes.test.tsx |
Tests live canvas integration. |
hub/app/javascript/application/prototype-canvas/index.tsx |
Lazily loads and connects the feature. |
hub/app/controllers/concerns/review_comment_pages.rb |
Serializes and filters notes. |
hub/app/controllers/concerns/has_review_comment_context.rb |
Shares filtering and configurable request limits. |
hub/app/controllers/canvas_api/repository_review_comments_controller.rb |
Supports explicit note inclusion. |
hub/app/controllers/canvas_api/prototypes_controller.rb |
Exposes immutable viewer identity. |
hub/app/controllers/canvas_api/improvement_notes_controller.rb |
Implements author-scoped synchronization; duplicated limits need shared constants. |
.github/extensions/replica-prototype/start-canvas-server/index.test.mjs |
Tests persistence and asset serving. |
.github/extensions/replica-prototype/start-canvas-server/index.mjs |
Wires local note endpoints and feature assets. |
.github/extensions/replica-prototype/render-canvas-html/index.test.mjs |
Tests compatibility-flag propagation. |
.github/extensions/replica-prototype/render-canvas-html/index.mjs |
Enables Pick & polish by default. |
.github/extensions/replica-prototype/register-prototype-canvas/index.test.mjs |
Tests batch responses and canvas opening. |
.github/extensions/replica-prototype/register-prototype-canvas/index.mjs |
Adds batch/result actions; unbounded results, redundant demo input, and stale reopening hints remain unresolved. |
.github/extensions/replica-prototype/improvement-notes/index.test.mjs |
Tests storage, synchronization, ownership, and batches. |
.github/extensions/replica-prototype/improvement-notes/index.mjs |
Implements durable notes and batches; findings cover deployment ownership, checkout/Hub-switch races, invalidated pending batches, conflict recovery, and polling overhead. |
.github/extensions/replica-prototype/hub-client/index.test.mjs |
Tests non-registering status reads. |
.github/extensions/replica-prototype/hub-client/index.mjs |
Adds guarded, read-only status verification. |
.github/extensions/replica-prototype/create-canvas-context/index.test.mjs |
Tests compatibility-input retention. |
.github/extensions/replica-prototype/create-canvas-context/index.mjs |
Preserves compatibility configuration. |
.github/extensions/replica-prototype/assets/renderer-rolldown-runtime.js |
Updates generated runtime helpers. |
.github/extensions/replica-prototype/assets/renderer-improvement-notes-prototype.js |
Bundles the notes interface. |
Files not reviewed (2)
- .github/extensions/replica-prototype/assets/renderer-improvement-notes-prototype.js: Generated file
- .github/extensions/replica-prototype/assets/renderer-rolldown-runtime.js: Generated file
🧠 Review effort: Max
💡 Configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Improve note cards, destructive confirmation, and responsive toolbar controls. Present ready results in a solution disclosure and prevent ready-note edits. Co-authored-by: Copilot App <[email protected]> Copilot-Session: c7fef05b-f8a7-419f-9baf-16b6ad61733c
Address Pick & polish review findings. Co-authored-by: Copilot <[email protected]>
Preserve the complete tested source before carving independent review layers. Co-authored-by: Copilot App <[email protected]> Copilot-Session: c7fef05b-f8a7-419f-9baf-16b6ad61733c
Retain the existing learning hook and runtime safety fixes while reconciling versioned conversations and bounded action results. Co-authored-by: Copilot App <[email protected]> Copilot-Session: c7fef05b-f8a7-419f-9baf-16b6ad61733c
Co-authored-by: Copilot App <[email protected]> Copilot-Session: c7fef05b-f8a7-419f-9baf-16b6ad61733c
Keep current publishing, comment metadata and unread behavior while preserving the shared conversation presentation. Co-authored-by: Copilot App <[email protected]> Copilot-Session: c7fef05b-f8a7-419f-9baf-16b6ad61733c
|
Superseded by the verified native Pick & polish stack: persistence #39 → actions and synchronization #41 → canvas experience #42. The independent Hub identity fix #40 remains separate. All remaining work is committed in the appropriate replacement PRs. The complete source snapshot and this branch are retained at |
<!-- Use a conventional commit-style title, such as "fix(hub): retain prototype history". --> ## Why <!-- Explain the problem and why this change matters in a short, plain-English paragraph. Link the issue when applicable. --> The prototype canvas needs a stable Hub account ID for the connected viewer. The connection response currently provides only their login, even though Hub already knows the authenticated account. ## What changes <!-- Describe what becomes different for a first-time reader. Explain necessary terms. Include accurate Mermaid diagrams when they clarify the proposal, using before/after diagrams when helpful. Add screenshots for meaningful UI changes. --> <!-- Omit validation sections, checklists, and routine test/CI summaries such as "CI is green" or "tests passed". Mention only known verification gaps that affect the change, not disclaimers about drafting this description. --> Authenticated `GET /api/canvas/connection` responses now include `viewerId`, the current user's internal Hub ID. Existing login and repository authorization behavior remain unchanged, and the response works before any prototype exists. This is an independent extraction from #13. It adds no Pick & polish functionality and needs only a Hub deployment to expose the new field. Co-authored-by: Copilot App <[email protected]> Copilot-Session: 9e593c03-e358-4cd6-9fc0-ac3d917635d2


Preserve creator-owned improvement notes, element and region selection, Hub synchronization, and immutable repair batches.
Why
What changes