@ryuenn3123/agentic-senior-core 3.0.6 → 3.0.8

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -211,19 +211,19 @@ const REQUIRED_UNIVERSAL_SOP_SNIPPETS = [
211
211
  snippets: [
212
212
  '### 15. Universal SOP Consolidation',
213
213
  'Coding flow is blocked if `docs/architecture-decision-record.md` (or `docs/Architecture-Decision-Record.md`) is missing',
214
- 'UI implementation flow is blocked if `docs/DESIGN.md` is missing',
214
+ 'UI implementation flow is blocked if `docs/DESIGN.md` or `docs/design-intent.json` is missing',
215
215
  ],
216
216
  },
217
217
  {
218
218
  path: '.agent-context/prompts/review-code.md',
219
219
  snippets: [
220
- 'Enforce Universal SOP hard gate: block coding flow when required project docs are missing (`docs/architecture-decision-record.md`, and for UI scope `docs/DESIGN.md`).',
220
+ 'Enforce Universal SOP hard gate: block coding flow when required project docs are missing (`docs/architecture-decision-record.md`, and for UI scope `docs/DESIGN.md` plus `docs/design-intent.json`).',
221
221
  ],
222
222
  },
223
223
  {
224
224
  path: '.agent-context/prompts/refactor.md',
225
225
  snippets: [
226
- '6. Enforce Universal SOP hard gate: stop implementation if `docs/architecture-decision-record.md` is missing, and for UI scope stop if `docs/DESIGN.md` is missing.',
226
+ '6. Enforce Universal SOP hard gate: stop implementation if `docs/architecture-decision-record.md` is missing, and for UI scope stop if `docs/DESIGN.md` or `docs/design-intent.json` is missing.',
227
227
  ],
228
228
  },
229
229
  {
@@ -231,7 +231,7 @@ const REQUIRED_UNIVERSAL_SOP_SNIPPETS = [
231
231
  snippets: [
232
232
  'Universal SOP hard block policy:',
233
233
  'Hard block: do not write application code until docs/project-brief.md and docs/architecture-decision-record.md exist.',
234
- 'For UI scope: if docs/DESIGN.md is missing, execute bootstrap-design prompt before implementing UI surfaces.',
234
+ 'For UI scope: if docs/DESIGN.md or docs/design-intent.json is missing, execute bootstrap-design prompt before implementing UI surfaces.',
235
235
  ],
236
236
  },
237
237
  ];
@@ -250,10 +250,24 @@ const REQUIRED_TEMPLATE_FREE_BOOTSTRAP_SNIPPETS = [
250
250
  snippets: [
251
251
  'Project docs will be authored dynamically by your IDE assistant from these prompts.',
252
252
  'bootstrap-project-context.md',
253
+ 'Seed docs:',
253
254
  'I prepared dynamic synthesis bootstrap prompts',
254
255
  ],
255
256
  },
256
257
  ];
258
+ const REQUIRED_UPGRADE_UI_CONTRACT_WARNING_SNIPPETS = [
259
+ {
260
+ path: 'lib/cli/commands/upgrade.mjs',
261
+ snippets: [
262
+ 'UI/frontend scope was detected, but the dynamic design contract is incomplete:',
263
+ 'docs/design-intent.json',
264
+ 'Planned seed on apply: docs/design-intent.json',
265
+ 'Upgrade synchronizes governance assets and can seed docs/design-intent.json, but it does not author project-specific docs/DESIGN.md automatically.',
266
+ 'detectUiScopeSignals',
267
+ 'seed-generated-during-upgrade',
268
+ ],
269
+ },
270
+ ];
257
271
  const FORBIDDEN_TEMPLATE_BOOTSTRAP_SNIPPETS = [
258
272
  {
259
273
  path: 'lib/cli/project-scaffolder.mjs',
@@ -1021,6 +1035,28 @@ async function validateTemplateFreeBootstrapCoverage() {
1021
1035
  }
1022
1036
  }
1023
1037
 
1038
+ async function validateUpgradeUiContractWarningCoverage() {
1039
+ console.log('\nChecking upgrade UI contract warning coverage...');
1040
+
1041
+ for (const coverageRule of REQUIRED_UPGRADE_UI_CONTRACT_WARNING_SNIPPETS) {
1042
+ const absoluteCoveragePath = join(ROOT_DIR, coverageRule.path);
1043
+
1044
+ if (!(await fileExists(absoluteCoveragePath))) {
1045
+ fail(`Missing upgrade UI contract warning source: ${coverageRule.path}`);
1046
+ continue;
1047
+ }
1048
+
1049
+ const coverageContent = await readTextFile(absoluteCoveragePath);
1050
+ for (const requiredSnippet of coverageRule.snippets) {
1051
+ if (coverageContent.includes(requiredSnippet)) {
1052
+ pass(`${coverageRule.path} includes upgrade UI contract warning snippet: ${requiredSnippet}`);
1053
+ } else {
1054
+ fail(`${coverageRule.path} is missing upgrade UI contract warning snippet: ${requiredSnippet}`);
1055
+ }
1056
+ }
1057
+ }
1058
+ }
1059
+
1024
1060
  async function validateDeterministicBoundaryEnforcementCoverage() {
1025
1061
  console.log('\nChecking deterministic boundary enforcement coverage...');
1026
1062
 
@@ -1289,6 +1325,7 @@ async function main() {
1289
1325
  await validateStackResearchEngineCoverage();
1290
1326
  await validateUniversalSopConsolidationCoverage();
1291
1327
  await validateTemplateFreeBootstrapCoverage();
1328
+ await validateUpgradeUiContractWarningCoverage();
1292
1329
  await validateDeterministicBoundaryEnforcementCoverage();
1293
1330
  await validateStackResearchSnapshotState();
1294
1331
  await validateMcpConfiguration();