Repository navigation
fix: findings from #102 (header actions, prompt limit, e2e model, Mastra agents, own) - #107
Open
joris-sevenlab wants to merge 6 commits into
Open
joris-sevenlab wants to merge 6 commits into
joris-sevenlab wants to merge 6 commits into
Conversation
…l, Mastra listAgents Points 1 to 4 of #102.
`battlestack own` stopped at the first feature tracking a path, so a file two features track (app/app.config.ts under landing-shell and nuxt-ui) was "already owned" under one while doctor kept reporting drift under the other and pull still merged or staged it. own and disown now act on every feature whose record tracks the path, and the consumers treat a path owned under any feature as owned: the drift-aware writers, obsolete-file deletion and format reconciliation (core), doctor, remove's delete pass, and pull's overwrite repair, which now restores the local version of an owned file instead of merging into it. Manifests written by the old own (owned under one feature only) are handled without a migration. Refs #102
… files `battlestack add` now seeds every installed feature's owned paths, so the added feature's writes skip a path another feature owns instead of staging it. Pull's overwrite repair no longer puts back an owned file under --overwrite --force, which takes owned files as confirmed at its prompt. Refs #102
…ing projects The layout is structural and owned by the project, so pull never adds the target to it. The pull that crosses the version that introduced it lists the lines to add, once.
joris-sevenlab
added this pull request to stack #108
October 20, 2026 08:22
This branch has not been deployed
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.
What this changes
Fixes the five findings in #102 from a project on battlestack 1.4.0. Stacked on #101, which it builds on for ownership; merge #101 first.
Closes #102.
Why and what
nuxt4:landing-shell): the landing layout's header has an empty#header-actionstarget, and its centre slot shows at every width (:ui="{ center: 'flex' }"). The nav menu keeps its old behaviour (hidden lg:flex, mobile menu unchanged), so this differs from the issue's snippet, which dropped both. A page adds an action with<Teleport to="#header-actions" defer>, client-side only. Thebattlestack-uiskill tells agents to do that instead of editing the layout.pullnever changes it. The pull that crosseslanding-shell1.4.3 lists the two lines to add as a step inREPORT.md, once, and only when the layout has aUHeaderwithout the target.nuxt4:prompts): 100,000 characters instead of 10,000 (the column istext). The API now returns the real reason ("Content is longer than 100,000 characters") rather than h3's generic "Validation Error", and the page shows it throughserverErrorMessage, as the user-admin pages already do.nuxt4:mastra, mastra-admin subtree): sets the model fromNUXT_AI_GATEWAY_CHAT_MODEL, which every scaffold's.envdefines, instead of a hard-codedopenai/gpt-5.6-luna, so a run against a dev server leaves a model its gateway key can use. Skips when unset.nuxt4:mastra): callslistAgents()(checked in@mastra/core1.78;getAgentsis gone), falls back togetAgents()for older Mastra, and warns instead of silently registering onlydefault.ownon a path two features track: owning is per path now.own/disownapply to every feature that tracks the path.doctor,addandremovetreat a path owned under any feature as owned. Manifests from the oldownneed no migration.pullnever changes an owned file, edited or not: the overwrite repair puts it back.Type of change
AI assistance
Agent, service and model, if you know it: Claude Code, Opus 5.5
How much of this is agent-written?
Feature versions
version:nuxt4:landing-shell1.4.3,nuxt4:prompts1.2.4,nuxt4:mastra2.1.8,shared:ai-tool-config1.3.1 (against pull: merge into edited files, generate migrations, and the review fixes #101's branch)collectDocsorcollectEnvcontribution, and also bumped the feature that writes the target fileChangelog
## Unreleasedsaying what changes for someone using battlestackTesting
New tests, each red without its fix:
ownclaims a path for both tracking features, anddisownreleases it.doctorreports no drift for it, andaddrespects it.Prompts: a new e2e case saves a 20,000-character prompt, gets the reason for one over 100,000, and resets the prompt.
Points 1 to 4 are template code. CI's scaffold job lints, type-checks and runs them in a real project.
pnpm tscpassespnpm testpassesI removed the behaviour each new assertion covers, watched the test fail, and put it back
Checklist
docs/,README.md)packages/*/templates/**are LFAnything else
bump:checkmissed template changes in features that passthis.id(landing-shell,build-info). That fix went into pull: merge into edited files, generate migrations, and the review fixes #101, since pull: merge into edited files, never overwrite local work #94's layout change had slipped through without a bump.