Skip to content

release: 0.1.7 (array frameworkManifest normalizer) - #11

Merged
qmarcelle merged 3 commits into
mainfrom
release/0.1.7
Jul 20, 2026
Merged

release: 0.1.7 (array frameworkManifest normalizer)#11
qmarcelle merged 3 commits into
mainfrom
release/0.1.7

Conversation

@qmarcelle

Copy link
Copy Markdown
Contributor

Cuts 0.1.7, carrying the array frameworkManifest normalizer from #10.

Why this branch exists

#10 (e0827a8) landed on main and has been sitting unpublished. The
branch that looked like the release lane, polish/extension-marketplace-metadata,
carries a release: bump to 0.1.6 commit but does not contain e0827a8
it still has the old guard at src/services/workspace.ts:150. Cutting 0.1.7
from there would have shipped a release without the fix it exists to deliver,
with a fully green board attesting otherwise. This branch is cut from main.

Commits

  • 940d394 — version bump across the three sync points (package.json,
    package-lock.json, runtime VERSION in src/index.ts), matching the
    shape of the 0.1.6 bump.
  • c165393 — gitignore local editor state. .vscode/ was failing
    check:structure, the first gate in prepublishOnly. Needs both a
    .gitignore entry and a biome.json ignore entry, matching the existing
    .claude / .local convention.
  • 62bbddf — CI assertion that the normalizer is in the shipped tarball.

The acceptance-test problem this fixes (HAC-206)

The verification step for this fix could not detect it. Billfold's artifact
carries frameworkManifest: [], and an empty array normalizes to
undefined with or without the fix — normalizeFrameworkManifest returns
undefined when the manifest ends up empty, deliberately, because no
detected frameworks means no framework context. Measured through the
0.1.7 build:

input result
[] (billfold's artifact) undefined
[{name:"express",version:"4.19.2"}] {"express":"4.19.2"}

So the check returned the same "correct" answer in both directions and
discriminated nothing. Confirmed the fix's absence from 0.1.6 the
discriminating way instead — by unpacking the published tarball, which
contains zero occurrences of normalizeFrameworkManifest and still carries
the old frameworkRaw guard.

62bbddf promotes that tarball check into CI. Verified to discriminate:
published 0.1.6 fails it, a 0.1.7 pack passes it.

Known limit: it asserts a symbol name, so it catches the fix going missing,
not the fix being wrong. A behavioural gate needs a non-empty
frameworkManifest fixture — that is the follow-up, not this PR.

Scope

Normalizer only. The extension stays at 0.1.2 and releases on its own
extension-v* tag, so the walkthrough assets cannot ride this train.

Verification

  • Full npm run check green in a pristine clone and on the release branch;
    smoke reports v0.1.7 ready on stdio.
  • e0827a8 confirmed an ancestor; old frameworkRaw guard absent.

Release

Merge, then tag the merge commit codex-mcp-v0.1.7 and push the tag —
publish-npm.yml does the rest.

Stages 0.1.7 across the three sync points (package.json, package-lock,
runtime VERSION in src/index.ts). Cut from main so PR #10 (e0827a8,
array frameworkManifest normalization) is included -- the prior release
branch did not contain it.

Normalizer fix only. Extension stays 0.1.2 (separate vsce track).
.vscode/ is untracked developer convenience (extension-host launch +
build task). It failed check:structure, the first gate in
prepublishOnly, blocking local publish. The checker consults
git check-ignore plus config/repository-structure.json; .vscodeignore
governs vsce bundling only and has no bearing here.

Kept separate from the 0.1.7 version bump.
The npm publish workflow asserted tarball contents by filename only, so
a release could ship without the array-manifest normalizer and stay
green. 0.1.5 and 0.1.6 both did exactly that (HAC-206).

Extracts the packed tarball and greps dist/services/workspace.js for
normalizeFrameworkManifest. Verified to discriminate: the published
0.1.6 tarball fails this check, a 0.1.7 pack passes it.

Scope is deliberately narrow -- this is a presence check on a symbol.
It catches the fix going missing, not the fix being wrong. A behavioural
gate needs a non-empty frameworkManifest fixture, because an empty array
normalizes to undefined with or without the fix and discriminates
nothing. That fixture is the follow-up.
Copilot AI review requested due to automatic review settings July 20, 2026 21:49

Copilot AI left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Copilot was unable to review this pull request because the user who requested the review has reached their quota limit.

@qmarcelle
qmarcelle merged commit 7b1f487 into main Jul 20, 2026
2 checks passed
@qmarcelle
qmarcelle deleted the release/0.1.7 branch July 20, 2026 21:50
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants