aiwg 2026.9.21 → 2026.9.24

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 (50) hide show
  1. package/agentic/code/plugins/agent-loop/.claude-plugin/plugin.json +1 -1
  2. package/agentic/code/plugins/agent-persistence/.claude-plugin/plugin.json +1 -1
  3. package/agentic/code/plugins/agentic-installer/.claude-plugin/plugin.json +1 -1
  4. package/agentic/code/plugins/aiwg-dev/.claude-plugin/plugin.json +1 -1
  5. package/agentic/code/plugins/aiwg-evals/.claude-plugin/plugin.json +1 -1
  6. package/agentic/code/plugins/auto-memory/.claude-plugin/plugin.json +1 -1
  7. package/agentic/code/plugins/browser-control/.claude-plugin/plugin.json +1 -1
  8. package/agentic/code/plugins/color-palette/.claude-plugin/plugin.json +1 -1
  9. package/agentic/code/plugins/compound-memory/.claude-plugin/plugin.json +1 -1
  10. package/agentic/code/plugins/context-curator/.claude-plugin/plugin.json +1 -1
  11. package/agentic/code/plugins/daemon/.claude-plugin/plugin.json +1 -1
  12. package/agentic/code/plugins/doc-intelligence/.claude-plugin/plugin.json +1 -1
  13. package/agentic/code/plugins/droid-bridge/.claude-plugin/plugin.json +1 -1
  14. package/agentic/code/plugins/forensics/.claude-plugin/plugin.json +1 -1
  15. package/agentic/code/plugins/guided-implementation/.claude-plugin/plugin.json +1 -1
  16. package/agentic/code/plugins/hooks/.claude-plugin/plugin.json +1 -1
  17. package/agentic/code/plugins/knowledge-base/.claude-plugin/plugin.json +1 -1
  18. package/agentic/code/plugins/line-memory/.claude-plugin/plugin.json +1 -1
  19. package/agentic/code/plugins/llm-wiki/.claude-plugin/plugin.json +1 -1
  20. package/agentic/code/plugins/marketing/.claude-plugin/plugin.json +1 -1
  21. package/agentic/code/plugins/media-curator/.claude-plugin/plugin.json +1 -1
  22. package/agentic/code/plugins/nlp-prod/.claude-plugin/plugin.json +1 -1
  23. package/agentic/code/plugins/ops/.claude-plugin/plugin.json +1 -1
  24. package/agentic/code/plugins/prose-integration/.claude-plugin/plugin.json +1 -1
  25. package/agentic/code/plugins/research/.claude-plugin/plugin.json +1 -1
  26. package/agentic/code/plugins/rlm/.claude-plugin/plugin.json +1 -1
  27. package/agentic/code/plugins/sdlc/.claude-plugin/plugin.json +1 -1
  28. package/agentic/code/plugins/security-engineering/.claude-plugin/plugin.json +1 -1
  29. package/agentic/code/plugins/semantic-memory/.claude-plugin/plugin.json +1 -1
  30. package/agentic/code/plugins/skill-factory/.claude-plugin/plugin.json +1 -1
  31. package/agentic/code/plugins/star-prompt/.claude-plugin/plugin.json +1 -1
  32. package/agentic/code/plugins/testing-quality/.claude-plugin/plugin.json +1 -1
  33. package/agentic/code/plugins/twelve-factor/.claude-plugin/plugin.json +1 -1
  34. package/agentic/code/plugins/uat-mcp/.claude-plugin/plugin.json +1 -1
  35. package/agentic/code/plugins/utils/.claude-plugin/plugin.json +1 -1
  36. package/agentic/code/plugins/validation-complete/.claude-plugin/plugin.json +1 -1
  37. package/agentic/code/plugins/verbalized-sampling/.claude-plugin/plugin.json +1 -1
  38. package/agentic/code/plugins/voice/.claude-plugin/plugin.json +1 -1
  39. package/agentic/code/plugins/writing/.claude-plugin/plugin.json +1 -1
  40. package/dist/src/artifacts/cli.js +23 -18
  41. package/dist/src/artifacts/fortemi-core-query-adapter.js +6 -2
  42. package/dist/src/artifacts/query-engine.js +14 -4
  43. package/dist/src/decision/qualification/load.js +8 -1
  44. package/docs/releases/v2026.9.22-announcement.md +22 -0
  45. package/docs/releases/v2026.9.23-announcement.md +23 -0
  46. package/docs/releases/v2026.9.24-announcement.md +24 -0
  47. package/package.json +1 -1
  48. package/prebuilt/fortemi-core/framework/aiwg-fortemi-index-v2.json +1 -1
  49. package/prebuilt/fortemi-core/framework/manifest.json +2 -2
  50. package/tools/cli/doctor.mjs +22 -1
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-loop",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Iterative AI coding loops with automatic recovery - iteration beats perfection",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agent-persistence",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Human-in-the-loop (HITL) gate definitions for agent operations. Provides reusable YAML gates for destructive-action authorization, false-positive override, and recovery escalation. Loaded by agent loops and orchestrators that need bounded human checkpoints.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "agentic-installer",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Structured YAML manifests for reproducible, agent-driven software installation across platforms. Scripts are the primary artifact; agentic instructions handle adaptation and recovery.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiwg-dev",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Developer tooling for building AIWG itself and AIWG addons/frameworks. Not for end users — install explicitly with `aiwg use aiwg-dev`.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiwg-evals",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Automated evaluation framework for agent quality, based on KAMI benchmark methodology and ReAct patterns",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auto-memory",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Automatic memory seed templates for AIWG projects",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "browser-control",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Drive a real, user-installed Chromium-derived browser from an AIWG agent. Wraps @playwright/mcp with a setup wizard, health-check doctor, allow-list enforcement, and an opinionated agent persona that respects authorization and audit boundaries.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "color-palette",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Color palette selection and review tooling with color theory fundamentals, current trend research, and accessibility analysis.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "compound-memory",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Governed orchestration across AIWG line memory, semantic memory, and llm-wiki.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "context-curator",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Context curation and distractor filtering for production-grade agent reliability",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "daemon",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Persistent daemon session capabilities: Concierge front-end, session memory, scheduler integration",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "doc-intelligence",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Documentation intelligence addon for scraping, extraction, analysis, and generated-docs auditing.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "droid-bridge",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "MCP server bridging Claude Code to Factory Droid for batch operations and automated fixes",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "forensics",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Digital forensics and incident response framework with 14 specialized agents covering target profiling, evidence acquisition, log/memory/container/cloud analysis, IOC extraction, and reporting.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "guided-implementation",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Bounded iteration control for autonomous issue-to-code implementation",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "hooks",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Claude Code hooks for workflow tracing and observability.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "knowledge-base",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Knowledge-base / wiki framework with skills for ingestion, query, and lint. Build a structured, citable corpus with cross-references and concept pages.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "line-memory",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Bounded, plain-text project memory with least-recently-used retention.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "llm-wiki",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "LLM-maintained markdown wiki that compounds as sources are ingested. Thin topology declaration on the semantic memory kernel — ships schema profiles and page templates, no custom mechanics.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "marketing",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Marketing automation framework with 37 specialized agents for campaign management.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "media-curator",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Media archive management framework with 7 specialized agents for source discovery, acquisition (yt-dlp / Internet Archive / Bandcamp), quality assessment, metadata tagging, and provenance tracking.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "nlp-prod",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Tools, skills, and CLI extensions for designing and productionizing LLM inference pipelines. Pattern-guided, slim by default, eval-first.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "ops",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Operational infrastructure framework with 12 specialized agents covering incident response, runbook execution, fleet inventory, certificate lifecycle, and disaster recovery planning.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "prose-integration",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Tools for reading, parsing, validating, and executing OpenProse programs from AIWG workflows",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "research",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Research workflow framework with 9 specialized agents for discovery, acquisition, synthesis, citation management, GRADE quality assessment, and OAIS-compliant archival.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "rlm",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "RLM-inspired recursive context decomposition for processing arbitrarily large codebases and document corpora through programmatic sub-agent delegation",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "sdlc",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Complete SDLC framework with 180+ specialized agents for software development lifecycle management.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "security-engineering",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Applied security framework for cryptographic primitive selection, chain-of-trust design, authentication factor analysis, supply-chain trust, and physical-threat modeling. Complements OWASP-style application audits.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "semantic-memory",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Topology-agnostic semantic memory operations: ingest, lint, query-capture, and structured event logging. Consumers declare a memory topology in their manifest.json; kernel skills read that contract to parameterize behavior.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "skill-factory",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Build, enhance, validate, and package Claude skills end-to-end. Coordinates skill-builder, skill-enhancer, quality-checker, and skill-packager via the skill-architect agent.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "star-prompt",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Tasteful prompt to encourage users to star the repository after successful command completion",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "testing-quality",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Evidence-bound test conformance, platform protocols, normalization transactions and research-guided testing workflows",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "twelve-factor",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Design-time and audit-time workflows for Twelve-Factor and modern 12+ Factor cloud-native application practices.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "uat-mcp",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Agent-executable acceptance testing via MCP connections — generate, execute, and report on UAT plans that validate MCP tool surfaces.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "utils",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Core AIWG utilities for context regeneration and workspace management.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "validation-complete",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Validation Complete for AIWG",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "verbalized-sampling",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Training-free prompting technique that improves output diversity by 1.6-2.1x through verbalized probability distributions, addressing RLHF mode collapse",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "voice",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Voice profile system for consistent, authentic writing.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "writing",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Writing quality validation and AI pattern detection.",
5
5
  "author": {
6
6
  "name": "AIWG Contributors",
@@ -526,22 +526,21 @@ async function handleBuild(args) {
526
526
  loadUserGraphConfigs(cwd);
527
527
  loadGlobalGraphConfigs();
528
528
  let jsonBuilt = false;
529
- let projectGraphBuilt = false;
529
+ const builtGraphs = new Set();
530
530
  if (graph) {
531
531
  // --graph X: build the JSON graph if X is one; otherwise X may be a
532
532
  // research-corpus markdown view, rendered below.
533
533
  if (graph in GRAPH_CONFIGS) {
534
534
  await buildIndex(cwd, { force, verbose, scope, graph, explicit: true });
535
535
  jsonBuilt = true;
536
- projectGraphBuilt = graph === 'project';
536
+ builtGraphs.add(graph);
537
537
  }
538
538
  }
539
539
  else if (all) {
540
540
  // Build all known graphs — user asked for everything, but don't hard-error on missing dirs
541
541
  for (const [name] of orderedGraphEntries(Object.entries(GRAPH_CONFIGS))) {
542
542
  await buildIndex(cwd, { force, verbose, graph: name, explicit: false });
543
- if (name === 'project')
544
- projectGraphBuilt = true;
543
+ builtGraphs.add(name);
545
544
  }
546
545
  jsonBuilt = true;
547
546
  }
@@ -550,8 +549,7 @@ async function handleBuild(args) {
550
549
  for (const [name, config] of orderedGraphEntries(Object.entries(GRAPH_CONFIGS))) {
551
550
  if (config.defaultBuild) {
552
551
  await buildIndex(cwd, { force, verbose, scope: name === Object.keys(GRAPH_CONFIGS)[0] ? scope : undefined, graph: name, explicit: false });
553
- if (name === 'project')
554
- projectGraphBuilt = true;
552
+ builtGraphs.add(name);
555
553
  }
556
554
  }
557
555
  jsonBuilt = true;
@@ -583,21 +581,28 @@ async function handleBuild(args) {
583
581
  if (viewResults.some((r) => r.status === 'unsupported')) {
584
582
  process.exit(1);
585
583
  }
586
- if (projectGraphBuilt) {
587
- await syncProjectFortemiCoreCacheAfterBuild(cwd, verbose);
584
+ if (builtGraphs.size > 0) {
585
+ await syncFortemiCoreCachesAfterBuild(cwd, builtGraphs, verbose);
588
586
  }
589
587
  }
590
- async function syncProjectFortemiCoreCacheAfterBuild(cwd, verbose) {
591
- try {
592
- const { syncFortemiCoreIndex } = await import('./fortemi-core-sync.js');
593
- const manifest = syncFortemiCoreIndex(cwd, { graph: 'project' });
594
- if (verbose) {
595
- console.log(`Fortemi Core project sync: ${manifest.status}, ${manifest.item_count} item(s) → ${manifest.export_path}`);
588
+ async function syncFortemiCoreCachesAfterBuild(cwd, graphs, verbose) {
589
+ const { syncFortemiCoreIndex } = await import('./fortemi-core-sync.js');
590
+ const { loadGraphIndexFile } = await import('./index-reader.js');
591
+ for (const graph of graphs) {
592
+ // Some default-build graphs skip cleanly when their scan roots are absent.
593
+ // Only materialize a cache when this build left an actual source index.
594
+ if (!loadGraphIndexFile(cwd, 'metadata.json', graph))
595
+ continue;
596
+ try {
597
+ const manifest = syncFortemiCoreIndex(cwd, { graph });
598
+ if (verbose) {
599
+ console.log(`Fortemi Core ${graph} sync: ${manifest.status}, ${manifest.item_count} item(s) → ${manifest.export_path}`);
600
+ }
601
+ }
602
+ catch (err) {
603
+ console.error(`Warning: Fortemi Core ${graph} sync failed: ${err instanceof Error ? err.message : String(err)}`);
604
+ console.error(`Run \`aiwg index sync --graph ${graph}\` before using Fortemi-backed commands for '${graph}' artifacts.`);
596
605
  }
597
- }
598
- catch (err) {
599
- console.error(`Warning: Fortemi Core project sync failed: ${err instanceof Error ? err.message : String(err)}`);
600
- console.error('Run `aiwg index sync --graph project` before using Fortemi-backed `aiwg discover` or `aiwg show` for project-local artifacts.');
601
606
  }
602
607
  }
603
608
  /**
@@ -168,7 +168,11 @@ export function loadFortemiCoreExport(cwd, graph = "project", sourcePaths) {
168
168
  }
169
169
  }
170
170
  let status = getFortemiCoreSyncStatus(cwd, graph);
171
- if ((!status.optedIn || !status.built || status.stale) && graph === "framework") {
171
+ // The packaged framework index is a bootstrap fallback for an absent shared
172
+ // cache. Once a shared cache exists, its stale state proves that the local
173
+ // source index is newer; silently replacing it with an older packaged index
174
+ // would hide newly authored capabilities.
175
+ if ((!status.optedIn || !status.built) && !status.stale && graph === "framework") {
172
176
  const prebuilt = getFortemiCorePrebuiltStatus(graph);
173
177
  if (prebuilt.optedIn && prebuilt.built && !prebuilt.stale) {
174
178
  status = prebuilt;
@@ -182,7 +186,7 @@ export function loadFortemiCoreExport(cwd, graph = "project", sourcePaths) {
182
186
  if (!status.built || status.stale) {
183
187
  return {
184
188
  reason: `${status.reason ??
185
- `Fortemi Core static index for graph '${graph}' is stale or incomplete`}. Re-run 'aiwg index sync' or pass '--backend local' to use the legacy local index.`,
189
+ `Fortemi Core static index for graph '${graph}' is stale or incomplete`}. Re-run 'aiwg index sync${graph === "project" ? "" : ` --graph ${graph}`}' or pass '--backend local' to use the legacy local index.`,
186
190
  };
187
191
  }
188
192
  try {
@@ -949,8 +949,12 @@ export async function discoverCapability(cwd, params) {
949
949
  continue;
950
950
  }
951
951
  }
952
- if (loaded.reason)
952
+ if (loaded.reason) {
953
953
  unavailableReason ??= loaded.reason;
954
+ if (graph === 'framework' && !params.graph) {
955
+ console.error(`Warning: framework capabilities are unavailable: ${loaded.reason}`);
956
+ }
957
+ }
954
958
  entries.push(...loaded.entries.map((entry) => withIndexProvenance(entry, graph)));
955
959
  const discovered = await queryFortemiCoreAiwgDiscovery(cwd, {
956
960
  graph,
@@ -1171,7 +1175,7 @@ export async function discoverCapability(cwd, params) {
1171
1175
  // broader phrase / type filter, and a capability refresh via `aiwg use`.
1172
1176
  const emptyResultHint = scored.length === 0
1173
1177
  ? backend === 'fortemi-core'
1174
- ? `No capability matched "${params.phrase}" among ${entries.length} Fortemi Core static-cache capabilities. Try a broader phrase or a \`--type\` filter. If the local index changed, refresh the cache with \`aiwg index sync\`, or pass \`--backend local\` to use the legacy local index.`
1178
+ ? `No capability matched "${params.phrase}" among ${entries.length} Fortemi Core static-cache capabilities. Try a broader phrase or a \`--type\` filter. If the local index changed, refresh the cache with \`aiwg index sync ${params.graph ? `--graph ${params.graph}` : '--all'}\`, or pass \`--backend local\` to use the legacy local index.`
1175
1179
  : `No capability matched "${params.phrase}" among ${entries.length} indexed capabilities. Try a broader phrase or a \`--type\` filter. If you just installed or authored capabilities, refresh discovery with \`aiwg use <framework>\` (or \`aiwg index build\`).`
1176
1180
  : null;
1177
1181
  const includePaths = params.includePaths ?? true;
@@ -1272,7 +1276,9 @@ export async function discoverCapability(cwd, params) {
1272
1276
  }
1273
1277
  if (scored.length === 0) {
1274
1278
  console.log(`No discovery matches for "${params.phrase}" in types: ${types.join(',')}.`);
1275
- console.log('Try a broader phrase or a `--type` filter. If capabilities were just added, refresh with `aiwg use <framework>` (or `aiwg index build`).');
1279
+ console.log(backend === 'fortemi-core'
1280
+ ? emptyResultHint
1281
+ : 'Try a broader phrase or a `--type` filter. If capabilities were just added, refresh with `aiwg use <framework>` (or `aiwg index build`).');
1276
1282
  return;
1277
1283
  }
1278
1284
  const relaxedNote = relaxed ? ' — relaxed match (verbose query)' : '';
@@ -1410,8 +1416,12 @@ async function loadShowEntries(cwd, params) {
1410
1416
  continue;
1411
1417
  }
1412
1418
  }
1413
- if (loaded.reason)
1419
+ if (loaded.reason) {
1414
1420
  unavailableReason ??= loaded.reason;
1421
+ if (graph === 'framework' && !params.graph) {
1422
+ console.error(`Warning: framework capabilities are unavailable: ${loaded.reason}`);
1423
+ }
1424
+ }
1415
1425
  entries.push(...loaded.entries.map((entry) => withIndexProvenance(entry, graph)));
1416
1426
  }
1417
1427
  if (entries.length === 0 && unavailableReason) {
@@ -226,11 +226,18 @@ export async function runDecisionLoadHarness(options) {
226
226
  export function compareDecisionLoadBounds(manifest, observations, resources) {
227
227
  const bounds = manifest.bounds;
228
228
  const atMost = (bound, observed) => ({ bound, limit: bounds[bound], observed, pass: observed <= bounds[bound] });
229
+ // The wall-clock fallback is process-wide (runner plus sibling workers), so it
230
+ // cannot bound harness CPU: it fails conforming code on shared runners. The
231
+ // manifest CPU bound only gates isolated thread-CPU measurement. The observed
232
+ // value stays in resources for informational use.
233
+ const cpu = resources.cpuSource === 'thread'
234
+ ? [atMost('maximumCpuPercentOneCore', resources.cpuPercentOneCore)]
235
+ : [];
229
236
  return [
230
237
  atMost('maximumActiveCalls', observations.maximumActiveCalls),
231
238
  atMost('maximumQueuedCalls', observations.maximumQueuedCalls),
232
239
  atMost('maximumHeapUsedMiB', resources.heapUsedMiB),
233
- atMost('maximumCpuPercentOneCore', resources.cpuPercentOneCore),
240
+ ...cpu,
234
241
  atMost('maximumEligibleLaneWaitMs', observations.maximumEligibleLaneWaitMs),
235
242
  atMost('maximumRetryAmplificationRatio', observations.retryAmplificationRatio),
236
243
  atMost('maximumCancellationLatencyMs', observations.maximumCancellationLatencyMs),
@@ -0,0 +1,22 @@
1
+ # AIWG 2026.9.22 - Doctor names installation drift
2
+
3
+ AIWG 2026.9.22 is a corrective release for provider reporting under stale
4
+ installations.
5
+
6
+ ## What changed
7
+
8
+ - **Installation-drift diagnosis:** under installation identity drift,
9
+ `aiwg doctor` resolves providers from the stale canonical install, so a
10
+ provider that shipped after the install (muse) was reported as a bare
11
+ `Unknown provider: muse`. The check now names the stale canonical install
12
+ and points to `aiwg installation adopt`. No behavior change when drift is
13
+ absent (#270).
14
+
15
+ ## Try it
16
+
17
+ Update with `npm install -g aiwg@2026.9.22`. The
18
+ [versioning guide](../contributing/versioning.md) describes the stable-channel
19
+ policy.
20
+
21
+ The full change history is in the
22
+ [changelog](https://github.com/jmagly/aiwg/blob/v2026.9.22/CHANGELOG.md).
@@ -0,0 +1,23 @@
1
+ # AIWG 2026.9.23 - CPU bound gates isolated measurement
2
+
3
+ AIWG 2026.9.23 is a corrective release for the publish gate: the D05
4
+ load-harness CPU comparison now gates only isolated thread-CPU measurement
5
+ instead of the process-wide wall-clock fallback.
6
+
7
+ ## What changed
8
+
9
+ - **Load-harness CPU gate:** the publish container runs Node 20, which lacks
10
+ `process.threadCpuUsage`, so every publish run measured process-wide
11
+ wall-clock CPU (runner plus sibling workers) against the fixed manifest
12
+ bound and failed conforming code. The manifest CPU bound now gates only
13
+ isolated thread-CPU results; the observed value stays recorded in
14
+ resources for informational use.
15
+
16
+ ## Try it
17
+
18
+ Update with `npm install -g aiwg@2026.9.23`. The
19
+ [versioning guide](../contributing/versioning.md) describes the stable-channel
20
+ policy.
21
+
22
+ The full change history is in the
23
+ [changelog](https://github.com/jmagly/aiwg/blob/v2026.9.23/CHANGELOG.md).
@@ -0,0 +1,24 @@
1
+ # AIWG 2026.9.24 - Deterministic dispatch cap test
2
+
3
+ AIWG 2026.9.24 is a corrective release that unblocks npmjs publication: the
4
+ parallelism-cap test now holds saturated dispatch slots for the whole cap
5
+ check.
6
+
7
+ ## What changed
8
+
9
+ - **Dispatch cap test:** the cap assertion saturated slots with 250ms tasks
10
+ while the 5th dispatch's own admission work can outlast them on loaded
11
+ runners. Saturating tasks now hold for 8s so the check runs against
12
+ genuinely saturated slots.
13
+ - **Discovery framework cache:** `aiwg discover`/`show` retain framework
14
+ warnings, expose stale diagnostics with scoped repair, and refresh
15
+ rebuilt Fortemi caches (#272).
16
+
17
+ ## Try it
18
+
19
+ Update with `npm install -g aiwg@2026.9.24`. The
20
+ [versioning guide](../contributing/versioning.md) describes the stable-channel
21
+ policy.
22
+
23
+ The full change history is in the
24
+ [changelog](https://github.com/jmagly/aiwg/blob/v2026.9.24/CHANGELOG.md).
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "aiwg",
3
- "version": "2026.9.21",
3
+ "version": "2026.9.24",
4
4
  "description": "Reusable project context and specialist workflows for the AI tools you already use. AIWG places agents, skills, commands, and rules in provider-readable locations, with optional utilities for artifact memory, workflow orchestration, recovery, and discovery.",
5
5
  "type": "module",
6
6
  "bin": {