Roadmap: architecture review#16
Merged
Merged
Conversation
Second external review, of the codebase rather than the experience. Every claim verified against the code before recording it. The theme is that Packkit doesn't eat its own cooking: it generates publint + are-the-types-wrong, strict TS, and lint gates for other people's packages, then ships with no types entry, no lint script, and no typecheck. Its own package would fail the check it writes for you. Confirmed and logged: no types on any of the four exports; root scripts have no lint/format/typecheck; writeProject joins paths with no escape validation; deepMerge ends in `return source`, so colliding scripts or exports keys silently last-write-wins; run() discards stdout/stderr so failures can't be told apart; shell:true on win32 in two places. Also logged the architecture items (staged resolution with diagnostics, resolved domain model, explicit feature ordering, pairwise coverage, version catalog, unifying the monorepo path) and packkit upgrade, which both reviews independently picked as the highest-value next feature and which 2.9's provenance file was the prerequisite for. Recorded three things not acted on: shareable config URLs already shipped in 2.3, analytics is a values call rather than a task on a static site with no backend, and the two reviews disagree on whether apps belong — noted the stance rather than silently picking a side. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Captures the second external review — this one of the codebase rather than the experience. Every claim was checked against the code before being written down; three didn't survive that check and are recorded as such.
The theme
Packkit doesn't eat its own cooking. It generates
publint+ are-the-types-wrong checks, strict TypeScript, and lint gates for other people's packages — then ships without any of them.check:pkgis something Packkit writes for you, and its own package would fail it.Verified:
typeson any export.,./core,./cli,./scaffold, none typedstart, test, check:deps, integration, build:web, update:node, gen:reference, sync:mcpwriteProjectdoesn't validate pathsdeepMergesilently last-writer-winsreturn sourcerun()discards stdout/stderrshell: trueon win32The path-validation one is worth reading twice: harmless while every feature is trusted first-party code, a security boundary the moment third-party features or MCP-supplied data can contribute paths. It should be fixed before extensibility ships, not after.
Architecture items
Staged resolution returning diagnostics instead of silently disabling options, a resolved domain model to replace ~16 derived booleans, explicit feature ordering, pairwise combination coverage, a dependency version catalog, and unifying the monorepo path — 2.9 added a second early return inside the first, so that one is compounding.
packkit upgradeBoth reviews independently picked this as the highest-value next feature, and 2.9's
packkit.jsonwas the prerequisite. Read the provenance, generate current output in memory, diff, classify each difference, emit a patch. It's what turns a one-time generator into something with a durable relationship to the repos it creates.Checked and not acted on
fullstackstays a supported track — rather than silently siding with the more recent reviewer.🤖 Generated with Claude Code