pi-aia-asf 0.13.3 → 0.13.5

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 (2) hide show
  1. package/CHANGELOG.md +102 -0
  2. package/package.json +3 -2
package/CHANGELOG.md CHANGED
@@ -7,6 +7,108 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
7
7
 
8
8
  ## [Unreleased]
9
9
 
10
+ ## [0.13.5] - 2026-10-18
11
+
12
+ ### Added
13
+
14
+ - **`test/test-packaging.mjs` — the artifact gate.** Checks the **packed** file set
15
+ rather than the working tree: `index.ts`, the `skills/aia-asf` skill, its normative
16
+ reference files, the `lib/` modules and the declared `obligations.d/` all really ship;
17
+ every entry `files` allowlists is present in the tarball; `pi.extensions` and
18
+ `pi.skills` point at entries that ship; and no relative import inside the artifact
19
+ points outside it. Nothing could previously see a broken `files` allowlist —
20
+ typecheck reads source files, the suite imports from disk, and `npm publish` only
21
+ reports that the upload was accepted. An ASF release whose skill did not ship is an
22
+ empty deliverable that installs without error.
23
+ - **`scripts/verify-published.mjs` — post-publish verification of the published bytes.**
24
+ Installs the just-published version **from the registry** into a throwaway prefix
25
+ (with the peer deps the pi host provides), imports the installed extension, requires
26
+ its default export to be the activate function, and requires the skill and
27
+ `obligations.d/` to be present in the installed copy. Reachable as
28
+ `npm run verify:published`; `BMX_SKIP_PUBLISHED_VERIFY=1` skips it in the release.
29
+ - **`scripts/release.sh` now gates instead of announcing.** It used to print
30
+ "✅ Released" on the strength of `npm publish`'s exit code alone. It now polls the
31
+ registry until the version is listed **and its tarball is fetchable**, then runs the
32
+ published-artifact verification, and exits non-zero if either fails.
33
+
34
+ ### Notes
35
+
36
+ - The import resolver in the artifact gate follows the ESM declaration convention, so a
37
+ `.d.mts` file naming its sibling as `./x.d.mjs` is not reported as a missing module
38
+ (`lib/gates/` ships `.mts` + `.d.mts` pairs).
39
+
40
+ ## [0.13.4] - 2026-10-16
41
+
42
+ ### Fixed
43
+
44
+ - **The model-blind-spot research (D1/D2) could not be verified against its own
45
+ sources, and now it can.** Both deliverables existed; neither had been audited,
46
+ and the audit found three real problems.
47
+ - **Seven quotations attributed to unnamed sources were removed.** The document
48
+ leaned on block quotes from "a soft-delete design guide", "the tenancy
49
+ source", "a team that learned it the expensive way" and the BEA book — none
50
+ carrying a URL. Checked by exact-phrase search and by fetching the cited
51
+ URLs: `orphans-by-policy`, `humans forget filters … RLS policies forget
52
+ nothing` and `we paid for the trash folder twice` return **zero results**,
53
+ and the InfoQ and O'Reilly fitness-function URLs return **404**. An
54
+ unfindable quotation is worse than no citation — it reads as evidence and
55
+ invites downstream reuse — so each was deleted, and the claims that still
56
+ matter were restated as explicitly-labelled **T3** reasoning. Where a primary
57
+ source says it better, it replaced the paraphrase: the PostgreSQL manual's own
58
+ default-deny text is stronger and checkable than the quote it replaced.
59
+ The deletions are listed in a withdrawn table rather than dropped silently.
60
+ - **What remains is now genuinely T1** — fetched and read this pass, with URLs
61
+ and page numbers: Vernon's four aggregate rules (ArchiLab, ch. 10 pp.
62
+ 347–388), the OWASP IDOR methodology, PostgreSQL §5.9, the Thoughtworks
63
+ fitness-function article. `SOURCES.md` gained the Model section with T1/T2/T3
64
+ classes per 02-research.md, including a row that admits the Rails `dependent:`
65
+ option list was **not** read and must be checked before any option name
66
+ reaches normative text.
67
+ - **The inventory had gone stale.** It was measured against `06a–06i` and never
68
+ re-derived after `06j`, `06k`, the gate layer and the model fitness level
69
+ shipped — so it still claimed all 14 classes were invisible. Re-scored against
70
+ the current gate set with the H/M/S enforcement classes: six classes (3
71
+ concurrency, 5 time, 6 numeric/unit, 7 locale, 9 unit-of-work, 12 environment)
72
+ remain **completely uninspected**, and that is now stated as a count instead of
73
+ a mood.
74
+ - **The audit covered only half the mandate.** The spec says "ASF **and
75
+ vigilant**"; vigilant had never been audited. It now has its own table — Loop
76
+ Guardian, spec verification, completeness guard, obligations container,
77
+ tool-timeout abort — and the honest conclusion: vigilant inspects the agent and
78
+ the claim, not the deliverable's design, and by the package boundary it must.
79
+ So for those six classes, **if ASF does not inspect them, nobody does.** There
80
+ is no second line of defence in the other package.
81
+ - **The meta-finding got a status.** "Not one gate asserts the non-effect" was
82
+ written before 06g §3 added non-effect assertions; it now reports itself as
83
+ half-closed — the language exists, the compulsion exists only where a blocker
84
+ was built.
85
+ - **`test/test-model-research.mjs` (42 checks) guards all of the above**, because
86
+ the failure mode is recurrence rather than novelty: it asserts the inventory is
87
+ contiguous and fully re-scored, that vigilant is audited, that every sourced
88
+ subsection resolves to a URL or is labelled T3, and that each withdrawn phrase
89
+ survives only as a record and never as a quotation. **Negative control verified**
90
+ — injecting an unattributed quote back into §2.6 makes it fail, and removing it
91
+ passes.
92
+
93
+ ### Notes
94
+
95
+ - **`npm audit` triage for this line: accepted, not fixed — and the reason is
96
+ recorded rather than skipped.** Three advisories report (1 moderate,
97
+ 2 high), all tracing to `undici` and `brace-expansion`. None of them ships
98
+ with ASF: `dependencies` is `{}` and the packed artifact (50 files) contains
99
+ no `node_modules` and neither package. They are reachable only through the
100
+ **peer** host package `@earendil-works/pi-coding-agent`, which is the user's
101
+ own pi installation and is pinned in `devDependencies` solely so typecheck can
102
+ run against a known host version (`host types 1.2.0`).
103
+ - `npm audit fix` would bump that pin. It was deliberately **not** run: it
104
+ would move the host-types version the entire typecheck and suite are
105
+ calibrated against, for no change whatsoever in what an installed ASF
106
+ contains. The fix belongs to the pi release, not to this manifest.
107
+ - Consequence for anyone reading this: an `npm audit` hit on ASF is a signal
108
+ about your **pi install**, and should be resolved by updating pi. Checking
109
+ the shipped surface is the `dependencies: {}` line plus the pack list above,
110
+ not the audit count.
111
+
10
112
  ## [0.13.3] - 2026-10-16
11
113
 
12
114
  ### Fixed
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "pi-aia-asf",
3
- "version": "0.13.3",
3
+ "version": "0.13.5",
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",
@@ -34,7 +34,8 @@
34
34
  "build": "echo 'nothing to build — pi loads .ts via jiti at runtime'",
35
35
  "check": "./scripts/typecheck.sh",
36
36
  "test": "./test/run-all.sh",
37
- "release": "./scripts/release.sh"
37
+ "release": "./scripts/release.sh",
38
+ "verify:published": "node scripts/verify-published.mjs"
38
39
  },
39
40
  "pi": {
40
41
  "extensions": [