Fullstack Forge v0.1.4
Fullstack Forge v0.1.4
v0.1.4 is a security-correctness and release-integrity patch. It makes taint protection
sink-specific, makes authorization proof structural, completes instance-specific fix lifecycle
handling, replaces broad ship-gate inference with typed evidence, removes scanner fixtures from the
dependency graph, and makes future releases non-clobbering and immutable.
Classification record: docs/AUDIT_CLASSIFICATION_v0.1.4.md.
Tagged local record: docs/RELEASE_VERIFICATION_v0.1.4.md. Final
remote verification is pending and will be published by the tag workflow as
FINAL_RELEASE_VERIFICATION_v0.1.4.md plus its checksum. That final asset is generated after the
tag and is not represented as content of tagged source.
Analyzer correctness
- Generic parse, validation, normalization, escaping, or encoding no longer clears taint. Values
retain their origin and carry typed protection evidence such as parameterized, shell-separated,
allowlisted, trusted-origin, or network-constrained. - SQL parameter binding and fixed executable/validated argument arrays are recognized only for the
corresponding sink class. SSRF allowlists remain tied to the actual destination, require redirect
control, and are invalidated by later raw reassignment. - Authorization requires a final owner/tenant predicate or a dominating guard connected to both
authenticated subject and object. Policy words, comments, unused imports, later calls, and guards
for another object are not evidence. - The bounded analyzer still does not claim whole-program soundness.
Instance-specific evidence and safe fixes
Finding instances now derive from rule, path, containing declaration, receiver, sink, normalized AST
shape, and deterministic same-scope occurrence. Exact identity flows through analyzer verification,
safe-fix planning and writes, blocked attempts, public JSON, Markdown, ship evidence, report
updates, and rollback. v0.1.3 reports without instance-specific fields remain readable.
Fix and verification transitions recompute report revision, retain prior typed gate and coverage
evidence, and attach ROLLED_BACK attempts only to the affected instance. Structurally identical
peers retain their identity when a sibling becomes safe.
The public JSON Schema was also corrected to describe the runtime instance_id, fix_attempts, and
scoped analyzer action fields.
Exact ship gates and adapter coverage
Ship gates accept only their declared evidence types and require current revision/timestamp
evidence. A SQL or SSRF result cannot masquerade as secret scanning; dependency, lockfile, license,
authorization, tenant, upload, migration, test, and release-artifact evidence remain independent.
Normal JSON and Markdown audit output now records analyzer coverage for every detected
language/framework in selected modules. FastAPI and Django are distinguished, unknown Python stays
unknown, and Go, Rust, JVM, mixed-language, and partial JavaScript/TypeScript gaps name the adapter
that would close them.
Dependency and workflow hygiene
- Scanner fixtures are stored as non-installable
package.json.fixturedata and materialized only
inside disposable test projects. A fail-closed fixture validator prevents real manifests,
lockfiles, scripts, symlinks, or non-sentinel versions from returning. - Secret scanning subtracts deleted tracked worktree paths while continuing to scan untracked files,
so manifest renames cannot crash or silently narrow local validation. - Root dependency audit reports no known vulnerability. TypeScript 7 and
@types/node26 remain
intentional major ignores to preserve the supported TypeScript ESLint peer range and Node 24 API
baseline. - GitHub Actions are pinned to reviewed full commit SHAs for checkout v7, setup-node v7,
upload-artifact v7.0.1, dependency review v5, provenance attestation v4.1.1, and CodeQL v4. - A least-privilege no-build CodeQL workflow now scans JavaScript/TypeScript on pull requests,
main, a weekly schedule, and manual dispatch.
Coverage and release integrity
Coverage now fails CI below committed overall and high-risk file floors; statements are explicitly
unmeasured because the Node.js reporter exposes lines, branches, and functions only. Generated
Markdown and package copies are checked by synchronization and deterministic packaging rather than
misrepresented as executable coverage.
The tag workflow:
- proves the annotated tag commit and absence of an existing release;
- runs checks, enforced coverage, dependency audit, packaging, smoke install, and offline install;
- creates one draft and uploads without
--clobber; - attests every initial asset, downloads the exact expected set, and compares archive, checksum,
and manifest bytes; - adds a checksummed and attested final evidence asset;
- publishes exactly once; and
- verifies GitHub immutable release state, asset attestations, and the remote tag commit.
Repository immutable releases are enabled for future publication. Existing tags and releases were
not moved, recreated, or modified.
Install
npm install --save-dev github:thethunderbolt/fullstack-forge-skill#v0.1.4
npx forge init allOr download the agent-specific ZIP from the GitHub release, verify it against SHA256SUMS.txt, and
extract it at the repository root. The release contains nine deterministic ZIP archives,
SHA256SUMS.txt, manifest.json, and the two final evidence assets.
Compatibility and limitations
- Node.js 24 or newer remains required; CLI command and 42-module catalog compatibility is retained.
- Python, Go, Rust, and JVM security/authorization adapters remain
NOT_VERIFIEDgaps. - Cross-file data flow, dynamic properties, reflective calls, middleware inheritance, and production
controls remain outside bounded static proof. - Runtime accessibility, database, backup, malware scanning, provider, deployment, and operator
checks still require direct evidence. - The project is not published to the npm registry; repository/tag and release-archive installation
are the supported publication paths for this release.