@thedecipherist/mdd 1.5.12 → 1.6.0

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.
@@ -129,6 +129,9 @@ Manifest: .mdd/jobs/audit-<date>/MANIFEST.md
129
129
  - Feature has `depends_on` entries with `integration_contracts` but `satisfies_contracts` is empty
130
130
  - Security module's `integration_contracts` specifies a caller that has no `satisfies_contracts` entry
131
131
  - Missing test cases for documented business rules
132
+ - CLI command missing any of the universal flags (--env, --cwd, --verbose, --strict, --silent) — check all commands against the CLI feature doc's universal flags requirement
133
+ - `file.*` filesystem helpers or path-resolving functions accept arbitrary paths without confinement to a documented jailRoot
134
+ - Silent error swallow: catch block returns empty/undefined without pushing to warnings array
132
135
 
133
136
  ### P4 Low
134
137
  - Code style inconsistencies
@@ -638,6 +638,18 @@ Quality gates passing does not mean the feature works. This phase verifies actua
638
638
  □ Confirm no unintended side effects on unrelated files or state
639
639
  ```
640
640
 
641
+ **Spec invariants — applies when the feature doc references spec language like "cannot be overridden", "always blocked", "immutable", "confinement", or "required":**
642
+ ```
643
+ □ Every spec-stated invariant must be verifiably enforced in code:
644
+ "cannot be overridden" → Object.freeze() on arrays/objects + readonly type
645
+ "always blocked" → the block path runs BEFORE any allow logic
646
+ "confinement" → an actual path check exists at every entry point, not just a gate module
647
+ "required" → ParseError or equivalent thrown for missing values (no silent empty string)
648
+ □ Run grep for the invariant keyword in source — verify it appears in a test assertion, not just prose
649
+ □ If the spec says module X enforces Y, verify X is actually CALLED at the relevant call site
650
+ (building a security module is not the same as wiring it)
651
+ ```
652
+
641
653
  **Ownership Default — applies to ALL feature types:**
642
654
 
643
655
  ```
@@ -278,8 +278,20 @@ For each feature in the wave's feature table, in dependency order, skipping `com
278
278
  4. Update the wave doc's `Doc` column with the feature doc path (once created in MDD Phase 3).
279
279
  5. Run full MDD Build Mode (Phases 1–7) for the feature, at the chosen interaction level.
280
280
  - Feature doc is auto-numbered from `.mdd/docs/` and gets `initiative`, `wave`, `wave_status` fields added.
281
- 6. After Phase 7 verify: flip `wave_status: complete` in wave doc AND confirm `status: complete` is written to the feature doc frontmatter (Phase 7c should have done this — verify it, write it if missing).
282
- 7. Mark the feature `[x]` in `MANIFEST.md`. If an error occurred that prevented completion, mark `[!]` with a one-line note.
281
+ 6. **PE3 Completion Gate** run these checks BEFORE marking `[x]`. This is a hard gate, not advisory.
282
+
283
+ **a. source_files existence check** — read `source_files` from the feature doc. For each file listed, verify it exists on disk:
284
+ ```bash
285
+ # For each file in source_files:
286
+ test -f <path> && echo "OK: <path>" || echo "MISSING: <path>"
287
+ ```
288
+ If any file is missing: mark the feature `[!]` in MANIFEST with the list of missing files. Do NOT proceed to step 7 — implement the missing files or explicitly document them as deferred in `known_issues`.
289
+
290
+ **b. satisfies_contracts verification** — read `satisfies_contracts` from the feature doc. If any entry is still `status: pending`, the security/integration contract was never wired. Find the call site, wire it, update to `verified: <file>:<line>`. A feature cannot be `[x]` with pending contracts.
291
+
292
+ **c. Doc status write** — confirm `status: complete` is in the feature doc frontmatter. Phase 7c should have written this. If it is missing (still `draft` or `in_progress`), write it now along with `last_synced: <today>` and `phase: all`. This is NOT optional — a missing status write means the doc audit will flag the feature as incomplete on the next run.
293
+
294
+ 7. Mark the feature `[x]` in `MANIFEST.md`. If the completion gate blocked (step 6a or 6b failed), mark `[!]` with a one-line note listing what was missing.
283
295
  8. Ask: *"Feature N done ✓. Start Feature N+1? (yes / pause here)"*
284
296
 
285
297
  **Resume behaviour:** if re-run on a partially complete wave, stale job detection in PE1 handles resume. MANIFEST is the authoritative progress record — it is always written before and after each feature so an interrupted session can pick up at the exact right point.
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@thedecipherist/mdd",
3
- "version": "1.5.12",
3
+ "version": "1.6.0",
4
4
  "description": "MDD — Manual-Driven Development workflow for Claude Code",
5
5
  "type": "module",
6
6
  "bin": {