Skip to content

install-manifest.yaml omits 44 payload files — installer drops them and aiox validate reports 100% integrity on a broken tree #835

Description

@maiquelfrantz

Summary

.aiox-core/install-manifest.yaml declares 1164 files, but the published payload ships 1208 files under .aiox-core/. The 44-file gap is not cosmetic:

  • files the manifest doesn't declare can be dropped at install time, and
  • aiox validate cannot detect the loss, because it only walks declared files.

The result is an installed tree that is measurably broken while every integrity tool reports it healthy. #820 and #808 are two symptoms of this; this issue is about the mechanism that lets them happen silently.

Evidence

Measured on Windows 11 / Node v24.19.0 against a vendored @aiox-squads/core-internal@5.3.0 tree, comparing with npm pack @aiox-squads/core@5.3.0. Line endings normalized CRLF→LF before comparing — without that, Windows checkouts show 100% divergence on line endings alone and the real signal is lost.

.aiox-core files in the published tarball : 1208
declared in install-manifest.yaml         : 1164   (file_count: 1164)
in the package but NOT declared           :   44

files actually missing from the install   :   28
  of those, declared in the manifest      :    0
  of those, NOT declared in the manifest  :   28

Every missing file was an undeclared one. The 28:

Group Count Files
quality/ 4 metrics-collector.js, metrics-hook.js, seed-metrics.js, schemas/quality-metrics.schema.json
hooks/ 13 ids-post-commit.js, ids-pre-push.js, gemini/* (6), unified/* (5)
utils/ 7 aiox-validator.js, format-duration.js, filters/* (5)
root config 4 framework-config.yaml, project-config.yaml, local-config.yaml.template, governance/global-heuristic-hints.yaml

The remaining 16 undeclared files did land — constitution.md, core/docs/*, docs/standards/*, schemas/*, presets/README.md. That asymmetry suggests those are copied by explicit installer rules, while everything else depends on being in the manifest.

Why this is worse than the individual symptoms

$ aiox validate
Integrity Score: 100%
Total files: 1164 | Valid: 1162 | Corrupted: 2

$ node .aiox-core/cli/index.js --help
Error: Cannot find module '../../../quality/metrics-collector'

aiox validate --repair cannot repair what the manifest never listed, and aiox doctor has no check for payload completeness. So the failure mode is: install succeeds, all checks pass, and the CLI is dead — with no tool in the box able to say why.

The dropped hooks/ files make this broader than the CLI: ids-pre-push.js, ids-post-commit.js and the whole hooks/unified/ runner set silently don't exist, so any governance that depends on them is absent rather than failing loudly.

Expected

One of:

  1. scripts/generate-install-manifest.js covers the entire .aiox-core/ payload, so file_count equals what actually ships; or
  2. the manifest stops being the copy list and is used only for change detection, with the installer copying the payload wholesale.

Right now it appears to serve both roles and the two disagree. Either way, aiox doctor would benefit from a payload-completeness check that compares the installed tree against the packaged file list rather than against the manifest — the manifest is the thing that can be wrong.

Repro

npm pack @aiox-squads/core@5.3.0
tar -xzf aiox-squads-core-5.3.0.tgz

# what ships vs what the manifest declares
tar -tzf aiox-squads-core-5.3.0.tgz | grep '^package/\.aiox-core/' | grep -v '/$' | wc -l   # 1208
grep -c '^\s*- path:' package/.aiox-core/install-manifest.yaml                               # 1164

Environment

Related

🤖 Investigated with Claude Code on behalf of a project using AIOX.

Metadata

Metadata

Assignees

No one assigned

    Labels

    area: cliCLI tools (bin/, packages/aios-pro-cli/)area: health-checkHealth check systemarea: installerInstaller and setup (packages/installer/)status: needs-triageAwaiting initial triagetype: bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions