pi-aia-asf 0.15.0 → 0.15.1

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 (3) hide show
  1. package/CHANGELOG.md +12 -0
  2. package/index.ts +16 -7
  3. package/package.json +1 -1
package/CHANGELOG.md CHANGED
@@ -7,6 +7,18 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.15.1] - 2026-11-06
11
+
12
+ ### Fixed
13
+
14
+ - **Specs are read under the same project key as run state.** 0.15.0 moved run state
15
+ to the git-root key but still read pi-vigilant's spec store by cwd basename. From
16
+ a subdirectory, the trace floor for specs met in the run therefore looked in the
17
+ wrong store and found nothing. pi-vigilant 0.9.0 writes the store under the root
18
+ key, and ASF reads it there. It falls back to the basename location, so an older
19
+ pi-vigilant does not leave ASF unable to see specs. Both suites pin the same
20
+ key vectors.
21
+
10
22
  ## [0.15.0] - 2026-11-06
11
23
 
12
24
  ### Added
package/index.ts CHANGED
@@ -143,11 +143,10 @@ function stateFileFor(project: string): string {
143
143
  }
144
144
 
145
145
  /**
146
- * The key pi-vigilant uses for spec-memory and feedback (cwd basename). Specs are
147
- * a shared contract between the two extensions, so ASF reads them where
148
- * vigilant writes them; only ASF's OWN run state moved to the root-based key.
146
+ * The pre-0.15 key (cwd basename). Used only to find run state written by an
147
+ * older ASF, and spec memory written by pi-vigilant < 0.9.
149
148
  */
150
- function sharedSpecKey(): string {
149
+ function legacyKey(): string {
151
150
  try {
152
151
  return basename(process.cwd()) || "default";
153
152
  } catch {
@@ -155,12 +154,22 @@ function sharedSpecKey(): string {
155
154
  }
156
155
  }
157
156
 
157
+ /**
158
+ * The spec store for this project. pi-vigilant >= 0.9 writes it under the same
159
+ * root-based key ASF uses (pinned vectors in both suites); older versions wrote
160
+ * it under the basename, which is read as a fallback so an un-upgraded
161
+ * pi-vigilant does not make ASF go blind to specs.
162
+ */
163
+ async function loadProjectSpecs(): Promise<SpecItem[] | null> {
164
+ return (await loadSpecs(projectName())) ?? (await loadSpecs(legacyKey()));
165
+ }
166
+
158
167
  async function loadState(project: string): Promise<ProjectStateFile> {
159
168
  const file = stateFileFor(project);
160
169
  if (!existsSync(file)) {
161
170
  // One-time migration: a run opened under the old basename key is adopted,
162
171
  // not orphaned — an upgrade must never silently end an active run.
163
- const legacy = stateFileFor(sharedSpecKey());
172
+ const legacy = stateFileFor(legacyKey());
164
173
  if (legacy !== file && existsSync(legacy)) {
165
174
  try {
166
175
  const data = JSON.parse(await readFile(legacy, "utf-8")) as ProjectStateFile;
@@ -665,7 +674,7 @@ export default function register(pi: ExtensionAPI): void {
665
674
  ];
666
675
 
667
676
  if (scale === "large") {
668
- const specs = await loadSpecs(sharedSpecKey());
677
+ const specs = await loadProjectSpecs();
669
678
  lines.push("\nSPEC-TO-CODE TRACEABILITY (M1 — large work):");
670
679
  if (!specs || specs.length === 0) {
671
680
  lines.push(
@@ -1183,7 +1192,7 @@ export default function register(pi: ExtensionAPI): void {
1183
1192
  let untracedMet: string[] = [];
1184
1193
  try {
1185
1194
  const runStart = Date.parse(state.startedAt || "") || 0;
1186
- const specs = (await loadSpecs(sharedSpecKey())) || [];
1195
+ const specs = (await loadProjectSpecs()) || [];
1187
1196
  untracedMet = specs
1188
1197
  .filter((sp) => sp.status === "met")
1189
1198
  .filter((sp) => {
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-aia-asf",
3
- "version": "0.15.0",
3
+ "version": "0.15.1",
4
4
  "description": "Ai Applied Agentic Software Factory — codifies the full software development flow: intake, research, spec capture, adversarial analysis, planning with approval gates, test-first implementation, and release. Requires pi-vigilant, pi-smart-web-search, pi-smart-fetch, and pi-aia-browser.",
5
5
  "keywords": [
6
6
  "pi-package",