@ryuenn3123/agentic-senior-core 3.0.40 → 3.0.42

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.
Files changed (41) hide show
  1. package/.agent-context/prompts/bootstrap-design.md +8 -9
  2. package/.agent-context/prompts/init-project.md +1 -1
  3. package/.agent-context/review-checklists/pr-checklist.md +2 -0
  4. package/.agent-context/rules/frontend-architecture.md +4 -0
  5. package/.agent-context/state/README.md +1 -3
  6. package/.agent-context/state/benchmark-reproducibility.json +4 -4
  7. package/.cursor/rules/agentic-senior-core.mdc +1 -1
  8. package/.cursorrules +1 -1
  9. package/.gemini/instructions.md +1 -1
  10. package/.github/copilot-instructions.md +1 -1
  11. package/.github/instructions/agentic-senior-core.instructions.md +1 -1
  12. package/.instructions.md +1 -0
  13. package/.windsurf/rules/agentic-senior-core.md +1 -1
  14. package/.windsurfrules +1 -1
  15. package/AGENTS.md +1 -1
  16. package/CLAUDE.md +1 -1
  17. package/CONTRIBUTING.md +7 -1
  18. package/GEMINI.md +1 -1
  19. package/README.md +1 -1
  20. package/lib/cli/backup.mjs +1 -3
  21. package/lib/cli/commands/init.mjs +1 -1
  22. package/lib/cli/constants.mjs +5 -3
  23. package/lib/cli/rollback.mjs +1 -2
  24. package/lib/cli/utils/managed-surface.mjs +4 -4
  25. package/lib/cli/utils.mjs +33 -11
  26. package/mcp.json +39 -24
  27. package/package.json +2 -4
  28. package/scripts/benchmark-evidence-bundle.mjs +8 -16
  29. package/scripts/benchmark-intelligence.mjs +14 -121
  30. package/scripts/benchmark-writer-judge-matrix.mjs +2 -6
  31. package/scripts/bump-version.mjs +3 -3
  32. package/scripts/clean-local-artifacts.mjs +1 -0
  33. package/scripts/docs-quality-drift-report.mjs +1 -1
  34. package/scripts/frontend-usability-audit.mjs +4 -4
  35. package/scripts/mcp-server/constants.mjs +4 -0
  36. package/scripts/release-gate/static-checks.mjs +0 -1
  37. package/scripts/validate/config.mjs +2 -2
  38. package/scripts/validate.mjs +8 -84
  39. package/.agent-context/state/benchmark-watchlist.json +0 -19
  40. package/.agent-context/state/stack-research-snapshot.json +0 -112
  41. package/.github/ISSUE_TEMPLATE/v1.7-frontend-work-item.yml +0 -54
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@ryuenn3123/agentic-senior-core",
3
- "version": "3.0.40",
3
+ "version": "3.0.42",
4
4
  "type": "module",
5
5
  "description": "Force your AI Agent to code like a Staff Engineer, not a Junior.",
6
6
  "bin": {
@@ -21,11 +21,9 @@
21
21
  ".agent-context/state/benchmark-comparison-schema.json",
22
22
  ".agent-context/state/benchmark-reproducibility.json",
23
23
  ".agent-context/state/benchmark-thresholds.json",
24
- ".agent-context/state/benchmark-watchlist.json",
25
24
  ".agent-context/state/benchmark-writer-judge-config.json",
26
25
  ".agent-context/state/memory-adapter-contract.json",
27
26
  ".agent-context/state/memory-schema-v1.json",
28
- ".agent-context/state/stack-research-snapshot.json",
29
27
  ".agents/",
30
28
  ".cursor/",
31
29
  ".github/",
@@ -85,6 +83,6 @@
85
83
  "report:governance-weekly": "node ./scripts/governance-weekly-report.mjs",
86
84
  "clean:local": "node ./scripts/clean-local-artifacts.mjs",
87
85
  "validate": "node ./scripts/validate.mjs",
88
- "test": "node --test ./tests/cli-smoke.test.mjs ./tests/mcp-server.test.mjs ./tests/llm-judge.test.mjs ./tests/ui-rubric-calibration.test.mjs ./tests/operations.test.mjs"
86
+ "test": "node --test ./tests/cli-smoke.test.mjs ./tests/mcp-server.test.mjs ./tests/llm-judge.test.mjs ./tests/ui-rubric-calibration.test.mjs ./tests/operations.test.mjs ./tests/knowledge-injection.test.mjs"
89
87
  }
90
88
  }
@@ -22,7 +22,6 @@ const isStdoutOnlyMode = ARGUMENT_FLAGS.has('--stdout-only');
22
22
  const PACKAGE_JSON_PATH = join(REPOSITORY_ROOT, 'package.json');
23
23
  const REPRO_PROFILE_PATH = join(REPOSITORY_ROOT, '.agent-context', 'state', 'benchmark-reproducibility.json');
24
24
  const BENCHMARK_THRESHOLD_PATH = join(REPOSITORY_ROOT, '.agent-context', 'state', 'benchmark-thresholds.json');
25
- const BENCHMARK_WATCHLIST_PATH = join(REPOSITORY_ROOT, '.agent-context', 'state', 'benchmark-watchlist.json');
26
25
  const MEMORY_SCHEMA_PATH = join(REPOSITORY_ROOT, '.agent-context', 'state', 'memory-schema-v1.json');
27
26
  const MEMORY_ADAPTER_CONTRACT_PATH = join(REPOSITORY_ROOT, '.agent-context', 'state', 'memory-adapter-contract.json');
28
27
  const OUTPUT_PATH = join(REPOSITORY_ROOT, '.agent-context', 'state', 'benchmark-evidence-bundle.json');
@@ -233,6 +232,7 @@ function buildRubricSummary(thresholdConfiguration, intelligenceReport, memoryCo
233
232
  maximumManualCorrectionIncrease: thresholdConfiguration?.maximumManualCorrectionIncrease ?? null,
234
233
  },
235
234
  intelligenceSlaDays: intelligenceReport?.reviewSlaDays ?? null,
235
+ staticExternalWatchlistRetired: intelligenceReport?.staticExternalWatchlistRetired === true,
236
236
  reliabilityThresholds: RELIABILITY_THRESHOLDS,
237
237
  continuityThresholds: memoryContinuityReport?.thresholds || null,
238
238
  };
@@ -384,10 +384,6 @@ function buildHistorySnapshot({
384
384
  reliabilitySignals,
385
385
  securityIndicators,
386
386
  }) {
387
- const staleWatchlistCount = Array.isArray(benchmarkIntelligenceReport?.watchlist)
388
- ? benchmarkIntelligenceReport.watchlist.filter((watchlistEntry) => watchlistEntry?.stale === true).length
389
- : null;
390
-
391
387
  return {
392
388
  generatedAt,
393
389
  releaseVersion,
@@ -396,7 +392,7 @@ function buildHistorySnapshot({
396
392
  manualCorrectionRate: toFiniteNumber(detectionBenchmarkReport?.manualCorrectionRate, 0),
397
393
  benchmarkGatePassed: benchmarkGateReport?.passed === true,
398
394
  intelligencePassed: benchmarkIntelligenceReport?.passed === true,
399
- staleWatchlistCount,
395
+ staticExternalWatchlistRetired: benchmarkIntelligenceReport?.staticExternalWatchlistRetired === true,
400
396
  reliabilityPassed: reliabilitySignals.passed,
401
397
  reliabilityRiskLevel: reliabilitySignals.riskLevel,
402
398
  incorrectDetectionRate: reliabilitySignals.metrics.incorrectDetectionRate,
@@ -419,8 +415,6 @@ function buildReleaseDelta(historyEntries, currentSnapshot) {
419
415
 
420
416
  const top1AccuracyDelta = Number((currentSnapshot.top1Accuracy - previousReleaseSnapshot.top1Accuracy).toFixed(4));
421
417
  const manualCorrectionDelta = Number((currentSnapshot.manualCorrectionRate - previousReleaseSnapshot.manualCorrectionRate).toFixed(4));
422
- const staleWatchlistDelta =
423
- (toFiniteNumber(currentSnapshot.staleWatchlistCount, 0) - toFiniteNumber(previousReleaseSnapshot.staleWatchlistCount, 0));
424
418
  const vulnerabilityDelta =
425
419
  (toFiniteNumber(currentSnapshot.vulnerabilityTotal, 0) - toFiniteNumber(previousReleaseSnapshot.vulnerabilityTotal, 0));
426
420
 
@@ -433,12 +427,10 @@ function buildReleaseDelta(historyEntries, currentSnapshot) {
433
427
  },
434
428
  top1AccuracyDelta,
435
429
  manualCorrectionRateDelta: manualCorrectionDelta,
436
- staleWatchlistCountDelta: staleWatchlistDelta,
437
430
  vulnerabilityTotalDelta: vulnerabilityDelta,
438
431
  summary: [
439
432
  `top1Accuracy: ${top1AccuracyDelta >= 0 ? '+' : ''}${top1AccuracyDelta}`,
440
433
  `manualCorrectionRate: ${manualCorrectionDelta >= 0 ? '+' : ''}${manualCorrectionDelta}`,
441
- `staleWatchlistCount: ${staleWatchlistDelta >= 0 ? '+' : ''}${staleWatchlistDelta}`,
442
434
  `vulnerabilityTotal: ${vulnerabilityDelta >= 0 ? '+' : ''}${vulnerabilityDelta}`,
443
435
  ],
444
436
  };
@@ -453,7 +445,7 @@ function buildTrendTable(historyEntries) {
453
445
  manualCorrectionRate: historyEntry.manualCorrectionRate,
454
446
  incorrectDetectionRate: historyEntry.incorrectDetectionRate,
455
447
  lowConfidenceRate: historyEntry.lowConfidenceRate,
456
- staleWatchlistCount: historyEntry.staleWatchlistCount,
448
+ staticExternalWatchlistRetired: historyEntry.staticExternalWatchlistRetired === true,
457
449
  vulnerabilityTotal: historyEntry.vulnerabilityTotal,
458
450
  criticalVulnerabilityCount: historyEntry.criticalVulnerabilityCount,
459
451
  benchmarkGatePassed: historyEntry.benchmarkGatePassed,
@@ -470,7 +462,7 @@ function buildChartSeries(historyEntries) {
470
462
  manualCorrectionRate: historyEntries.map((historyEntry) => historyEntry.manualCorrectionRate),
471
463
  incorrectDetectionRate: historyEntries.map((historyEntry) => historyEntry.incorrectDetectionRate),
472
464
  lowConfidenceRate: historyEntries.map((historyEntry) => historyEntry.lowConfidenceRate),
473
- staleWatchlistCount: historyEntries.map((historyEntry) => historyEntry.staleWatchlistCount),
465
+ staticExternalWatchlistRetired: historyEntries.map((historyEntry) => historyEntry.staticExternalWatchlistRetired === true),
474
466
  vulnerabilityTotal: historyEntries.map((historyEntry) => historyEntry.vulnerabilityTotal),
475
467
  };
476
468
  }
@@ -503,7 +495,6 @@ function convertTrendTableToCsv(trendTable) {
503
495
  async function runBenchmarkEvidenceBundle() {
504
496
  const reproducibilityProfile = readJsonOrNull(REPRO_PROFILE_PATH);
505
497
  const thresholdConfiguration = readJsonOrNull(BENCHMARK_THRESHOLD_PATH);
506
- const watchlistConfiguration = readJsonOrNull(BENCHMARK_WATCHLIST_PATH);
507
498
  const memorySchemaConfiguration = readJsonOrNull(MEMORY_SCHEMA_PATH);
508
499
  const memoryAdapterContractConfiguration = readJsonOrNull(MEMORY_ADAPTER_CONTRACT_PATH);
509
500
  const releaseVersion = readReleaseVersion();
@@ -611,9 +602,10 @@ async function runBenchmarkEvidenceBundle() {
611
602
  rawInputs: {
612
603
  scenarios: Array.isArray(reproducibilityProfile?.scenarios) ? reproducibilityProfile.scenarios : [],
613
604
  benchmarkThresholds: thresholdConfiguration,
614
- benchmarkWatchlist: Array.isArray(watchlistConfiguration?.repositories)
615
- ? watchlistConfiguration.repositories
616
- : [],
605
+ benchmarkWatchlist: {
606
+ retired: true,
607
+ reason: 'Static external benchmark watchlists were removed to avoid stale or biasing research inputs.',
608
+ },
617
609
  memorySchema: memorySchemaConfiguration,
618
610
  memoryAdapterContract: memoryAdapterContractConfiguration,
619
611
  },
@@ -3,133 +3,26 @@
3
3
  /**
4
4
  * benchmark-intelligence.mjs
5
5
  *
6
- * Competitive intelligence cadence validator.
7
- * Ensures benchmark watchlist coverage and review freshness.
6
+ * Benchmark intelligence compatibility report.
7
+ * Static external watchlists were retired to avoid stale or biasing research inputs.
8
8
  */
9
9
 
10
- import { existsSync, readFileSync } from 'node:fs';
11
- import { dirname, join, resolve } from 'node:path';
12
- import { fileURLToPath } from 'node:url';
13
-
14
- const SCRIPT_FILE_PATH = fileURLToPath(import.meta.url);
15
- const SCRIPT_DIR = dirname(SCRIPT_FILE_PATH);
16
- const REPOSITORY_ROOT = resolve(SCRIPT_DIR, '..');
17
- const WATCHLIST_PATH = join(REPOSITORY_ROOT, '.agent-context', 'state', 'benchmark-watchlist.json');
18
- const REVIEW_SLA_DAYS = 14;
19
- const REQUIRED_BENCHMARK_REPOSITORIES = new Set([
20
- 'sickn33/antigravity-awesome-skills',
21
- 'github/awesome-copilot',
22
- 'MiniMax-AI/skills',
23
- ]);
24
-
25
- function parseDateOrNull(rawDateValue) {
26
- if (typeof rawDateValue !== 'string') {
27
- return null;
28
- }
29
-
30
- if (!/^\d{4}-\d{2}-\d{2}$/.test(rawDateValue)) {
31
- return null;
32
- }
33
-
34
- const parsedDate = new Date(`${rawDateValue}T00:00:00.000Z`);
35
- return Number.isNaN(parsedDate.getTime()) ? null : parsedDate;
36
- }
37
-
38
- function calculateAgeInDays(referenceDate, targetDate) {
39
- const ageInMilliseconds = referenceDate.getTime() - targetDate.getTime();
40
- return Math.floor(ageInMilliseconds / (1000 * 60 * 60 * 24));
41
- }
42
-
43
- function loadWatchlistConfiguration() {
44
- if (!existsSync(WATCHLIST_PATH)) {
45
- return { repositories: [] };
46
- }
47
-
48
- return JSON.parse(readFileSync(WATCHLIST_PATH, 'utf8'));
49
- }
50
-
51
10
  function runIntelligenceValidation() {
52
- const watchlistConfiguration = loadWatchlistConfiguration();
53
- const watchlistEntries = Array.isArray(watchlistConfiguration.repositories)
54
- ? watchlistConfiguration.repositories
55
- : [];
56
- const validationResults = [];
57
- const currentDate = new Date();
58
-
59
- const trackedRepositoryNames = new Set();
60
- for (const watchlistEntry of watchlistEntries) {
61
- trackedRepositoryNames.add(watchlistEntry.repository);
62
- }
63
-
64
- for (const requiredRepositoryName of REQUIRED_BENCHMARK_REPOSITORIES) {
65
- const hasRequiredRepository = trackedRepositoryNames.has(requiredRepositoryName);
66
- validationResults.push({
67
- checkName: 'required-benchmark-repository',
68
- repository: requiredRepositoryName,
69
- passed: hasRequiredRepository,
70
- details: hasRequiredRepository
71
- ? `${requiredRepositoryName} is present in watchlist`
72
- : `${requiredRepositoryName} is missing from watchlist`,
73
- });
74
- }
75
-
76
- const watchlistReport = watchlistEntries.map((watchlistEntry) => {
77
- const repositoryName = watchlistEntry.repository;
78
- const repositoryOwner = watchlistEntry.owner;
79
- const lastReviewedDate = parseDateOrNull(watchlistEntry.lastReviewedAt);
80
-
81
- const hasOwner = typeof repositoryOwner === 'string' && repositoryOwner.trim().length > 0;
82
- validationResults.push({
83
- checkName: 'watchlist-owner-defined',
84
- repository: repositoryName,
85
- passed: hasOwner,
86
- details: hasOwner ? `Owner ${repositoryOwner} is defined` : 'Owner is missing',
87
- });
88
-
89
- if (!lastReviewedDate) {
90
- validationResults.push({
91
- checkName: 'review-date-format',
92
- repository: repositoryName,
93
- passed: false,
94
- details: `Invalid or missing lastReviewedAt: ${String(watchlistEntry.lastReviewedAt)}`,
95
- });
96
-
97
- return {
98
- repository: repositoryName,
99
- owner: repositoryOwner,
100
- lastReviewedAt: watchlistEntry.lastReviewedAt,
101
- ageInDays: null,
102
- stale: true,
103
- };
104
- }
105
-
106
- const reviewAgeInDays = calculateAgeInDays(currentDate, lastReviewedDate);
107
- const reviewWithinSla = reviewAgeInDays <= REVIEW_SLA_DAYS;
108
-
109
- validationResults.push({
110
- checkName: 'review-sla-compliance',
111
- repository: repositoryName,
112
- passed: reviewWithinSla,
113
- details: `ageInDays=${reviewAgeInDays} slaDays=${REVIEW_SLA_DAYS}`,
114
- });
115
-
116
- return {
117
- repository: repositoryName,
118
- owner: repositoryOwner,
119
- lastReviewedAt: watchlistEntry.lastReviewedAt,
120
- ageInDays: reviewAgeInDays,
121
- stale: !reviewWithinSla,
122
- };
123
- });
124
-
125
- const failedCheckCount = validationResults.filter((validationResult) => !validationResult.passed).length;
11
+ const validationResults = [
12
+ {
13
+ checkName: 'static-external-watchlist-retired',
14
+ passed: true,
15
+ details: 'Static external benchmark watchlists are retired; use live official docs and repo evidence for current claims.',
16
+ },
17
+ ];
126
18
  const intelligenceReport = {
127
19
  generatedAt: new Date().toISOString(),
128
20
  reportName: 'benchmark-intelligence',
129
- passed: failedCheckCount === 0,
130
- failureCount: failedCheckCount,
131
- reviewSlaDays: REVIEW_SLA_DAYS,
132
- watchlist: watchlistReport,
21
+ passed: true,
22
+ failureCount: 0,
23
+ reviewSlaDays: null,
24
+ staticExternalWatchlistRetired: true,
25
+ watchlist: [],
133
26
  results: validationResults,
134
27
  };
135
28
 
@@ -152,10 +152,6 @@ function loadScenarios(reproducibilityProfile) {
152
152
  }
153
153
 
154
154
  function buildBaseSignals(detectionBenchmarkReport, tokenBenchmarkReport, benchmarkGateReport, benchmarkIntelligenceReport, thresholdConfiguration) {
155
- const staleWatchlistCount = Array.isArray(benchmarkIntelligenceReport?.watchlist)
156
- ? benchmarkIntelligenceReport.watchlist.filter((watchlistEntry) => watchlistEntry?.stale === true).length
157
- : 0;
158
-
159
155
  const top1Accuracy = Number(detectionBenchmarkReport?.top1Accuracy || 0);
160
156
  const manualCorrectionRate = Number(detectionBenchmarkReport?.manualCorrectionRate || 1);
161
157
 
@@ -166,7 +162,7 @@ function buildBaseSignals(detectionBenchmarkReport, tokenBenchmarkReport, benchm
166
162
  benchmarkGatePassed: benchmarkGateReport?.passed === true,
167
163
  benchmarkGateFailureCount: Number(benchmarkGateReport?.failureCount || 0),
168
164
  intelligenceFailureCount: Number(benchmarkIntelligenceReport?.failureCount || 0),
169
- staleWatchlistCount,
165
+ staticExternalWatchlistRetired: benchmarkIntelligenceReport?.staticExternalWatchlistRetired === true,
170
166
  top1AccuracyMet: top1Accuracy >= Number(thresholdConfiguration?.minimumTop1Accuracy || 0),
171
167
  manualCorrectionMet: manualCorrectionRate <= Number(thresholdConfiguration?.maximumManualCorrectionRate || 1),
172
168
  };
@@ -182,7 +178,7 @@ function buildWriterScenarioRun(writerModel, scenario, baseSignals, writerWeight
182
178
  ? clamp(100 + deterministicOffset(`${writerModel.id}:reliability`, 2), 0, 100)
183
179
  : clamp(100 - (baseSignals.benchmarkGateFailureCount * 20), 0, 100);
184
180
  const freshnessScore = clamp(
185
- 100 - (baseSignals.intelligenceFailureCount * 15) - (baseSignals.staleWatchlistCount * 10) + deterministicOffset(`${writerModel.id}:freshness`, 2),
181
+ 100 - (baseSignals.intelligenceFailureCount * 15) + deterministicOffset(`${writerModel.id}:freshness`, 2),
186
182
  0,
187
183
  100
188
184
  );
@@ -62,13 +62,13 @@ async function bumpVersion() {
62
62
  console.log('Updated package-lock.json');
63
63
  }
64
64
 
65
- // 3. Update docs/deep_analysis_and_roadmap_backlog.md
66
- const roadmapPath = path.join(ROOT_DIR, 'docs', 'deep_analysis_and_roadmap_backlog.md');
65
+ // 3. Update docs/deep-analysis-and-roadmap-backlog.md
66
+ const roadmapPath = path.join(ROOT_DIR, 'docs', 'deep-analysis-and-roadmap-backlog.md');
67
67
  if (await fileExists(roadmapPath)) {
68
68
  let roadmapContent = await readTextFile(roadmapPath);
69
69
  roadmapContent = roadmapContent.replace(`Current Version: ${oldVersion}`, `Current Version: ${newVersion}`);
70
70
  await writeTextFile(roadmapPath, roadmapContent);
71
- console.log('Updated docs/deep_analysis_and_roadmap_backlog.md');
71
+ console.log('Updated docs/deep-analysis-and-roadmap-backlog.md');
72
72
  }
73
73
 
74
74
  // 4. Update legacy root adapters that carry release metadata.
@@ -12,6 +12,7 @@ const LOCAL_ARTIFACT_PATHS = [
12
12
  'validate_output.txt',
13
13
  'release-gate-report.json',
14
14
  '.benchmarks',
15
+ '.zed',
15
16
  '.agentic-backup',
16
17
  '.agent-context/state/active-memory.json',
17
18
  '.agent-context/state/v3-purge-audit.json',
@@ -33,7 +33,7 @@ const MONITORED_STATIC_FILE_PATHS = [
33
33
  '.gemini/instructions.md',
34
34
  '.cursor/rules/agentic-senior-core.mdc',
35
35
  '.windsurf/rules/agentic-senior-core.md',
36
- 'docs/deep_analysis_and_roadmap_backlog.md',
36
+ 'docs/deep-analysis-and-roadmap-backlog.md',
37
37
  ];
38
38
 
39
39
  const MONITORED_DIRECTORY_PATHS = [
@@ -3,9 +3,9 @@
3
3
  /**
4
4
  * frontend-usability-audit.mjs
5
5
  *
6
- * Governance-level audit for V1.7 frontend execution assets.
6
+ * Governance-level audit for current frontend governance assets.
7
7
  * This repository does not host a frontend runtime app, so the audit validates
8
- * required execution artifacts and quality gates documentation.
8
+ * required quality gates and archived execution evidence.
9
9
  */
10
10
 
11
11
  import { existsSync, readFileSync } from 'node:fs';
@@ -18,8 +18,8 @@ const REPOSITORY_ROOT = resolve(__dirname, '..');
18
18
 
19
19
  const REQUIRED_FILES = [
20
20
  'docs/roadmap.md',
21
- 'docs/v1.7-issue-breakdown.md',
22
- 'docs/v1.7-execution-playbook.md',
21
+ 'docs/archive/v1.7-issue-breakdown.md',
22
+ 'docs/archive/v1.7-execution-playbook.md',
23
23
  '.instructions.md',
24
24
  '.agent-context/prompts/bootstrap-design.md',
25
25
  'scripts/ui-design-judge.mjs',
@@ -15,6 +15,10 @@ export const DEFAULT_TREND_WINDOW_DAYS = 90;
15
15
  export const MAX_TREND_PACKAGES = 10;
16
16
  export const FALLBACK_PACKAGE_VERSION = '0.0.0-local';
17
17
 
18
+ // IMPORTANT: This version extraction logic is intentionally duplicated from lib/cli/constants.mjs.
19
+ // The MCP server is designed to be copied directly into target user workspaces where
20
+ // the original package.json may not exist in the parent tree. This try/catch fallback
21
+ // ensures the server can still run standalone without crashing if package.json is missing.
18
22
  function resolvePackageVersion() {
19
23
  try {
20
24
  const parsedPackageManifest = JSON.parse(
@@ -100,7 +100,6 @@ export function runStaticReleaseChecks(results, diagnostics) {
100
100
 
101
101
  const requiredOperationsFiles = [
102
102
  '.agent-context/review-checklists/architecture-review.md',
103
- 'docs/v1.8-operations-playbook.md',
104
103
  '.github/workflows/release-gate.yml',
105
104
  '.github/workflows/sbom-compliance.yml',
106
105
  '.github/workflows/governance-weekly-report.yml',
@@ -14,7 +14,7 @@ export const FORMAL_ARTIFACT_PATHS = [
14
14
  '.instructions.md',
15
15
  'README.md',
16
16
  'CHANGELOG.md',
17
- 'docs/deep_analysis_and_roadmap_backlog.md',
17
+ 'docs/deep-analysis-and-roadmap-backlog.md',
18
18
  '.agent-context/rules/api-docs.md',
19
19
  '.agent-context/review-checklists/pr-checklist.md',
20
20
  '.agent-context/prompts/review-code.md',
@@ -49,7 +49,7 @@ export const REQUIRED_HUMAN_WRITING_SNIPPETS = [
49
49
  ],
50
50
  },
51
51
  {
52
- path: 'docs/deep_analysis_and_roadmap_backlog.md',
52
+ path: 'docs/deep-analysis-and-roadmap-backlog.md',
53
53
  snippets: [
54
54
  '## Part 6: Documentation and Explanation Standards (Mandatory)',
55
55
  'This applies to documentation, release notes, onboarding text, review summaries, and agent-facing explanations.',
@@ -166,14 +166,12 @@ async function validateRequiredFiles() {
166
166
  'docs/faq.md',
167
167
  'docs/deep-dive.md',
168
168
  'docs/terminology-mapping.md',
169
- 'docs/v1.7-execution-playbook.md',
170
- 'docs/v1.7-issue-breakdown.md',
171
- 'docs/v1.8-operations-playbook.md',
172
- 'docs/v2-upgrade-playbook.md',
169
+ 'docs/archive/v1.7-execution-playbook.md',
170
+ 'docs/archive/v1.7-issue-breakdown.md',
171
+ 'docs/archive/v1.8-operations-playbook.md',
172
+ 'docs/archive/v2-upgrade-playbook.md',
173
173
  '.agent-context/state/benchmark-reproducibility.json',
174
174
  '.agent-context/state/benchmark-writer-judge-config.json',
175
- '.agent-context/state/benchmark-watchlist.json',
176
- '.agent-context/state/stack-research-snapshot.json',
177
175
  '.agent-context/state/memory-schema-v1.json',
178
176
  '.agent-context/state/memory-adapter-contract.json',
179
177
  '.vscode/mcp.json',
@@ -569,7 +567,7 @@ async function validateDocumentationFlow() {
569
567
  'npm run validate',
570
568
  'docs/faq.md',
571
569
  'docs/deep-dive.md',
572
- 'docs/v2-upgrade-playbook.md',
570
+ 'docs/archive/v2-upgrade-playbook.md',
573
571
  ];
574
572
 
575
573
  for (const requiredReadmeSnippet of requiredReadmeSnippets) {
@@ -581,90 +579,17 @@ async function validateDocumentationFlow() {
581
579
  }
582
580
  }
583
581
 
584
- function isNormalizedMetricValue(value) {
585
- return Number.isFinite(Number(value)) && Number(value) >= 0 && Number(value) <= 1;
586
- }
587
-
588
- async function validateStackResearchSnapshotState() {
589
- console.log('\nChecking deterministic stack research snapshot state...');
590
-
591
- const snapshotPath = join(ROOT_DIR, '.agent-context', 'state', 'stack-research-snapshot.json');
592
- if (!(await fileExists(snapshotPath))) {
593
- fail('Missing deterministic stack research snapshot: .agent-context/state/stack-research-snapshot.json');
594
- return;
595
- }
596
-
597
- let snapshotPayload;
598
- try {
599
- snapshotPayload = JSON.parse(await readTextFile(snapshotPath));
600
- } catch {
601
- fail('Invalid JSON in .agent-context/state/stack-research-snapshot.json');
602
- return;
603
- }
604
-
605
- if (snapshotPayload?.deterministic === true) {
606
- pass('stack-research-snapshot.json declares deterministic: true');
607
- } else {
608
- fail('stack-research-snapshot.json must declare deterministic: true');
609
- }
610
-
611
- const generatedAtValue = String(snapshotPayload?.generatedAt || '');
612
- if (!Number.isNaN(Date.parse(generatedAtValue))) {
613
- pass('stack-research-snapshot.json includes valid generatedAt timestamp');
614
- } else {
615
- fail('stack-research-snapshot.json must include a valid generatedAt timestamp');
616
- }
617
-
618
- if (Array.isArray(snapshotPayload?.trustedRealtimeSources) && snapshotPayload.trustedRealtimeSources.length > 0) {
619
- pass('stack-research-snapshot.json includes trustedRealtimeSources');
620
- } else {
621
- fail('stack-research-snapshot.json must include at least one trustedRealtimeSources entry');
622
- }
623
-
624
- if (!Array.isArray(snapshotPayload?.stackSignals) || snapshotPayload.stackSignals.length === 0) {
625
- fail('stack-research-snapshot.json must include non-empty stackSignals array');
626
- return;
627
- }
628
-
629
- pass(`stack-research-snapshot.json includes ${snapshotPayload.stackSignals.length} stack signal entries`);
630
-
631
- const invalidSignalEntries = snapshotPayload.stackSignals.filter((signalEntry) => {
632
- const hasStackName = typeof signalEntry?.stackFileName === 'string' && signalEntry.stackFileName.trim().length > 0;
633
- const hasMeasuredAt = !Number.isNaN(Date.parse(String(signalEntry?.measuredAt || '')));
634
- const metrics = signalEntry?.metrics || {};
635
- const hasValidMetrics = isNormalizedMetricValue(metrics.ecosystemMaturity)
636
- && isNormalizedMetricValue(metrics.talentAvailability)
637
- && isNormalizedMetricValue(metrics.deliveryVelocity);
638
-
639
- return !(hasStackName && hasMeasuredAt && hasValidMetrics);
640
- });
641
-
642
- if (invalidSignalEntries.length === 0) {
643
- pass('stack-research-snapshot.json stackSignals keep measurable metrics and timestamps');
644
- } else {
645
- fail(`stack-research-snapshot.json has invalid stackSignals entries: ${invalidSignalEntries.length}`);
646
- }
647
- }
648
-
649
582
  async function validateMcpConfiguration() {
650
583
  console.log('\nChecking MCP configuration...');
651
584
 
652
585
  const mcpConfiguration = JSON.parse(await readTextFile(join(ROOT_DIR, 'mcp.json')));
653
- const lintServerCommand = mcpConfiguration.servers?.lint?.command;
654
- const testServerCommand = mcpConfiguration.servers?.test?.command;
655
586
  const workspaceMcpConfiguration = JSON.parse(await readTextFile(join(ROOT_DIR, '.vscode', 'mcp.json')));
656
587
  const workspaceServerConfig = workspaceMcpConfiguration.servers?.['agentic-senior-core'];
657
588
 
658
- if (lintServerCommand === 'node') {
659
- pass('MCP lint server uses Node');
660
- } else {
661
- fail('MCP lint server must use Node');
662
- }
663
-
664
- if (testServerCommand === 'node') {
665
- pass('MCP test server uses Node');
589
+ if (mcpConfiguration.knowledgeLayers?.enabled === true) {
590
+ pass('Root MCP config has knowledgeLayers enabled');
666
591
  } else {
667
- fail('MCP test server must use Node');
592
+ fail('Root MCP config must have knowledgeLayers.enabled: true');
668
593
  }
669
594
 
670
595
  if (typeof workspaceMcpConfiguration.$schema === 'undefined') {
@@ -732,7 +657,6 @@ async function main() {
732
657
  await validateDependencyFreshnessAutomationCoverage(coverageValidationContext);
733
658
  await validateDeterministicBoundaryEnforcementCoverage(coverageValidationContext);
734
659
  await validateRulesOnlyActiveSurfaceCoverage(coverageValidationContext);
735
- await validateStackResearchSnapshotState();
736
660
  await validateMcpConfiguration();
737
661
  await validateHumanWritingGovernance(coverageValidationContext);
738
662
  await validateInstructionAdapters(coverageValidationContext);
@@ -1,19 +0,0 @@
1
- {
2
- "repositories": [
3
- {
4
- "repository": "sickn33/antigravity-awesome-skills",
5
- "owner": "core-architecture",
6
- "lastReviewedAt": "2026-04-17"
7
- },
8
- {
9
- "repository": "github/awesome-copilot",
10
- "owner": "core-architecture",
11
- "lastReviewedAt": "2026-04-17"
12
- },
13
- {
14
- "repository": "MiniMax-AI/skills",
15
- "owner": "frontend-governance",
16
- "lastReviewedAt": "2026-04-17"
17
- }
18
- ]
19
- }
@@ -1,112 +0,0 @@
1
- {
2
- "schemaVersion": "1.0.0",
3
- "snapshotId": "ecosystem-signals-2026-04-18",
4
- "generatedAt": "2026-04-18T00:00:00.000Z",
5
- "deterministic": true,
6
- "sourceName": "Agentic-Senior-Core deterministic stack research snapshot",
7
- "sourceUrl": "state://stack-research-snapshot/2026-04-18",
8
- "trustedRealtimeSources": [
9
- {
10
- "sourceId": "awwwards-trend-feed",
11
- "sourceName": "Awwwards Trend Feed",
12
- "sourceUrl": "https://www.awwwards.com"
13
- },
14
- {
15
- "sourceId": "github-ecosystem-signals",
16
- "sourceName": "GitHub Ecosystem Signals",
17
- "sourceUrl": "https://github.com"
18
- }
19
- ],
20
- "stackSignals": [
21
- {
22
- "stackFileName": "typescript.md",
23
- "measuredAt": "2026-04-18T00:00:00.000Z",
24
- "metrics": {
25
- "ecosystemMaturity": 0.91,
26
- "talentAvailability": 0.9,
27
- "deliveryVelocity": 0.89
28
- }
29
- },
30
- {
31
- "stackFileName": "python.md",
32
- "measuredAt": "2026-04-18T00:00:00.000Z",
33
- "metrics": {
34
- "ecosystemMaturity": 0.92,
35
- "talentAvailability": 0.88,
36
- "deliveryVelocity": 0.9
37
- }
38
- },
39
- {
40
- "stackFileName": "java.md",
41
- "measuredAt": "2026-04-18T00:00:00.000Z",
42
- "metrics": {
43
- "ecosystemMaturity": 0.89,
44
- "talentAvailability": 0.83,
45
- "deliveryVelocity": 0.8
46
- }
47
- },
48
- {
49
- "stackFileName": "php.md",
50
- "measuredAt": "2026-04-18T00:00:00.000Z",
51
- "metrics": {
52
- "ecosystemMaturity": 0.79,
53
- "talentAvailability": 0.75,
54
- "deliveryVelocity": 0.84
55
- }
56
- },
57
- {
58
- "stackFileName": "go.md",
59
- "measuredAt": "2026-04-18T00:00:00.000Z",
60
- "metrics": {
61
- "ecosystemMaturity": 0.84,
62
- "talentAvailability": 0.78,
63
- "deliveryVelocity": 0.82
64
- }
65
- },
66
- {
67
- "stackFileName": "csharp.md",
68
- "measuredAt": "2026-04-18T00:00:00.000Z",
69
- "metrics": {
70
- "ecosystemMaturity": 0.86,
71
- "talentAvailability": 0.8,
72
- "deliveryVelocity": 0.79
73
- }
74
- },
75
- {
76
- "stackFileName": "rust.md",
77
- "measuredAt": "2026-04-18T00:00:00.000Z",
78
- "metrics": {
79
- "ecosystemMaturity": 0.74,
80
- "talentAvailability": 0.63,
81
- "deliveryVelocity": 0.67
82
- }
83
- },
84
- {
85
- "stackFileName": "ruby.md",
86
- "measuredAt": "2026-04-18T00:00:00.000Z",
87
- "metrics": {
88
- "ecosystemMaturity": 0.7,
89
- "talentAvailability": 0.62,
90
- "deliveryVelocity": 0.72
91
- }
92
- },
93
- {
94
- "stackFileName": "react-native.md",
95
- "measuredAt": "2026-04-18T00:00:00.000Z",
96
- "metrics": {
97
- "ecosystemMaturity": 0.72,
98
- "talentAvailability": 0.67,
99
- "deliveryVelocity": 0.74
100
- }
101
- },
102
- {
103
- "stackFileName": "flutter.md",
104
- "measuredAt": "2026-04-18T00:00:00.000Z",
105
- "metrics": {
106
- "ecosystemMaturity": 0.75,
107
- "talentAvailability": 0.69,
108
- "deliveryVelocity": 0.76
109
- }
110
- }
111
- ]
112
- }