Compare commits

...

4 commits

Author SHA1 Message Date
leessju
6f3cba6f23
Merge d7b06792aa into f4c5d22f22 2026-05-30 13:02:29 -04:00
nicejames
d7b06792aa test(comments): assert hard-scope sentence text in web and daemon renderers 2026-05-28 11:04:53 +09:00
nicejames
689ff3ba59 ci: re-trigger checks (transient checkout-auth flake on previous run) 2026-05-24 21:22:50 +09:00
nicejames
1f2bc3fdf1 fix(prompt): tighten Comment scope from soft guide to hard constraint
The <attached-preview-comments> block opened with 'Scope: apply the
user request to the attached preview target by default. ... Preserve
unrelated elements.' That reads as a soft preference, and in practice
agents still refactor sibling sub-pages, parent layout, or global CSS
when the user only intended the attached element.

Replace with a hard scope directive:

  Hard scope: change ONLY the elements identified below by selector /
  position / pod members. Do NOT modify sibling sub-pages, parent
  layout, global CSS, design tokens, or unrelated rules even if you
  notice issues there — surface those as a follow-up note in your
  reply instead of editing them. If the user's request cannot be
  satisfied without touching outside this scope, ask the user before
  proceeding. For visual marks, inspect the screenshot and modify the
  marked region first.

Applied symmetrically to apps/web/src/comments.ts and
apps/daemon/src/server.ts so the web composer and the daemon-side
attachment renderer stay in sync.
2026-05-24 21:22:50 +09:00
4 changed files with 14 additions and 2 deletions

View file

@ -880,7 +880,7 @@ export function renderCommentAttachmentHint(commentAttachments) {
'',
'',
'<attached-preview-comments>',
'Scope: treat each attachment as the default refinement target. For visual marks, inspect the screenshot and modify the marked region first. Preserve unrelated areas.',
"Hard scope: change ONLY the elements identified below by selector / position / pod members. Do NOT modify sibling sub-pages, parent layout, global CSS, design tokens, or unrelated rules even if you notice issues there — surface those as a follow-up note in your reply instead of editing them. If the user's request cannot be satisfied without touching outside this scope, ask the user before proceeding. For visual marks, inspect the screenshot and modify the marked region first.",
];
for (const item of commentAttachments) {
const targetKind =

View file

@ -171,6 +171,12 @@ describe('preview comment agent payload', () => {
expect(hint).toContain('file: index.html');
expect(hint).toContain('selector: [data-od-id="hero-title"]');
expect(hint).toContain('comment: Make the headline shorter');
// The hard-scope sentence IS the behavior change. Assert its key phrases
// so a future edit that softens or drops the directive lights the suite
// red instead of silently re-opening the over-broad edit bug.
expect(hint).toContain('Hard scope: change ONLY');
expect(hint).toContain('Do NOT modify sibling sub-pages, parent layout, global CSS, design tokens, or unrelated rules');
expect(hint).toContain('ask the user before proceeding');
});
it('renders pod attachments with grouped member context', () => {

View file

@ -308,7 +308,7 @@ function renderCommentAttachmentContext(commentAttachments: ChatCommentAttachmen
'',
'',
'<attached-preview-comments>',
'Scope: apply the user request to the attached preview target by default. For visual marks, inspect the screenshot and modify the marked region first. Preserve unrelated elements.',
"Hard scope: change ONLY the elements identified below by selector / position / pod members. Do NOT modify sibling sub-pages, parent layout, global CSS, design tokens, or unrelated rules even if you notice issues there — surface those as a follow-up note in your reply instead of editing them. If the user's request cannot be satisfied without touching outside this scope, ask the user before proceeding. For visual marks, inspect the screenshot and modify the marked region first.",
];
commentAttachments.forEach((item) => {
const position = normalizePosition(item.pagePosition);

View file

@ -265,6 +265,12 @@ describe('preview comment attachment helpers', () => {
expect(content).toContain('computedStyle: color: rgb(26, 25, 22)');
expect(content).toContain('fontSize: 13.5px');
expect(content).toContain('comment: Only shorten this title');
// The hard-scope sentence IS the behavior change. Assert its key phrases
// so a future edit that softens or drops the directive lights the suite
// red instead of silently re-opening the over-broad edit bug.
expect(content).toContain('Hard scope: change ONLY');
expect(content).toContain('Do NOT modify sibling sub-pages, parent layout, global CSS, design tokens, or unrelated rules');
expect(content).toContain('ask the user before proceeding');
});
it('adds hidden comment context only to the current user message sent to API providers', () => {