From 41be1f601c7361ddc1a426cf63805f0aacfc0cd0 Mon Sep 17 00:00:00 2001 From: Cursor Agent Date: Fri, 17 Jul 2026 15:50:41 +0000 Subject: [PATCH] fix(guard-core): include app/ in core scope envelope Next.js App Router repos use app/ rather than apps/. Without this prefix, core-scoped intents on terminal routes trigger I4 divergence warnings. Co-authored-by: michaeljjudan --- packages/guard-core/src/intent.mjs | 2 +- packages/guard-core/test/envelope.test.mjs | 20 ++++++++++++++++++++ 2 files changed, 21 insertions(+), 1 deletion(-) create mode 100644 packages/guard-core/test/envelope.test.mjs diff --git a/packages/guard-core/src/intent.mjs b/packages/guard-core/src/intent.mjs index 5e25000..e8d7818 100644 --- a/packages/guard-core/src/intent.mjs +++ b/packages/guard-core/src/intent.mjs @@ -12,7 +12,7 @@ export const MEC_CONSTITUTIONAL_REGEX = export const SCOPE_ENVELOPES = { docs: ['docs/', 'README', 'DOCS.md', 'CONTRIBUTING.md', 'LICENSE', 'FOR-'], ci: ['.github/'], - core: ['apps/', 'packages/', 'src/', 'lib/'], + core: ['app/', 'apps/', 'packages/', 'src/', 'lib/'], infra: ['infra/', 'render.yaml', 'vercel.json', 'Dockerfile', 'docker-compose', 'netlify.toml'], sentinels: ['sentinels/', 'agents/'], labs: ['labs/', 'experiments/'], diff --git a/packages/guard-core/test/envelope.test.mjs b/packages/guard-core/test/envelope.test.mjs new file mode 100644 index 0000000..17c4db1 --- /dev/null +++ b/packages/guard-core/test/envelope.test.mjs @@ -0,0 +1,20 @@ +import assert from 'node:assert/strict'; +import { describe, it } from 'node:test'; + +import { inEnvelope } from '../src/index.mjs'; + +describe('scope envelopes', () => { + it('covers Next.js App Router paths under core', () => { + assert.equal(inEnvelope('core', 'app/api/vault/status/route.ts'), true); + assert.equal(inEnvelope('core', 'lib/vault-v2/store.ts'), true); + }); + + it('still covers legacy apps/ monorepo layout under core', () => { + assert.equal(inEnvelope('core', 'apps/terminal/api/route.ts'), true); + }); + + it('rejects paths outside the declared scope', () => { + assert.equal(inEnvelope('infra', 'app/api/vault/status/route.ts'), false); + assert.equal(inEnvelope('docs', 'lib/vault-v2/store.ts'), false); + }); +});