Work Done
At the user’s request, split the published combined Factory PR into:
- mono #404: framework package and its root
inventory entry only. Branch
feat/factory-framework-histo, commit fefad76f, base main. Worktree~/work/worktrees/mono/factory-framework. - mono #406: draft histo consumer app and
its root inventory entry only. Branch
feat/factory-histo, commit ff48f394, basefeat/factory-framework-histo. Original worktree~/work/worktrees/mono/factory-framework-histonow checks out this app branch.
Reordered framework before app; force-pushed #404 with an explicit old-OID lease. The final stacked committed tree is byte-for-byte identical to original combined commit 5e2c876f (tree 43accf33b65abddbd67c5a51dbccfa6a77b42bdf). Verified GitHub file lists and draft/base metadata. No behavior changed or tests reintroduced. Both PR descriptions explain the stack and validation boundaries.
Pitfalls
An uncommitted framework pyproject.toml edit was present in the original worktree. It was preserved byte-for-byte and left uncommitted; it is not in either PR. Cherry-picking the app after moving the root framework inventory row caused a cleanly merged duplicate row. Exact tree comparison caught it; the duplicate was removed before pushing. Main advanced meanwhile, so use merge-base/three-dot comparisons when inspecting PR scope, not a two-dot comparison with latest main.
Improvements
Review/merge #404 first, then rebase and retarget draft #406 onto main. Keep current worktree/branch mapping explicit: framework edits belong on the base, app edits on the draft. Do not accidentally include the preserved local manifest edit when committing unrelated app work.