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 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",
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
- const features = list.features ?? [];
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