infinity-harness 2.6.3 → 2.6.4
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.
- package/CHANGELOG.md +5 -0
- package/package.json +1 -1
- package/src/core/gates.ts +2 -1
package/CHANGELOG.md
CHANGED
|
@@ -4,6 +4,11 @@ All notable changes to this project are documented here.
|
|
|
4
4
|
Format follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/); versions follow
|
|
5
5
|
[Semantic Versioning](https://semver.org/spec/v2.0.0.html).
|
|
6
6
|
|
|
7
|
+
## [2.6.4] — 2026-08-25
|
|
8
|
+
|
|
9
|
+
`feature-criteria` now ignores seeded `phase-*` scaffolding so `DEFINE` does not pass on the
|
|
10
|
+
research seed alone. Same `phase` field, same `seedPhaseIfEmpty`, same worker path — just the gate.
|
|
11
|
+
|
|
7
12
|
## [2.6.3] — 2026-08-25
|
|
8
13
|
|
|
9
14
|
Research was shallow because it had no tasks — one search, doc, PASS. Now it follows the same
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "infinity-harness",
|
|
3
|
-
"version": "2.6.
|
|
3
|
+
"version": "2.6.4",
|
|
4
4
|
"description": "A pi agent extension that runs a gated build pipeline unattended \u2014 enforces phases, validates with deterministic gates, and keeps working for hours or days without losing the plan.",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"keywords": [
|
package/src/core/gates.ts
CHANGED
|
@@ -328,7 +328,8 @@ async function checkNoEmptyDirs({ targetDir }: Ctx): Promise<CheckResult> {
|
|
|
328
328
|
/** Every feature must declare acceptance criteria before BUILD starts. */
|
|
329
329
|
async function checkFeatureCriteria({ targetDir }: Ctx): Promise<CheckResult> {
|
|
330
330
|
const { list } = loadFeatureList(targetDir);
|
|
331
|
-
|
|
331
|
+
// Seeded starter features (phase-*) are scaffolding, not real features — ignore for criteria gate.
|
|
332
|
+
const features = (list.features ?? []).filter((f) => !(f as { phase?: string }).phase);
|
|
332
333
|
if (features.length === 0) return fail("feature-criteria", "no features planned yet");
|
|
333
334
|
const missing = features.filter((f) => !(f.criteria ?? []).length).map((f) => f.id);
|
|
334
335
|
return missing.length === 0
|