feat(tui): Paramify tab redesign, focus/shortcut fixes, manifest-scoped scripts sync#18
Merged
Merged
Conversation
…ed scripts sync A collection of TUI improvements for the next release, plus the behavior change they surfaced: - Paramify tab: rebuilt into stacked evidence-upload + scripts-sync panels. A Preview action runs a read-only dry-run and surfaces the per-fetcher plan (create/update/drift/noop) in a table, flagging what --force would push. - Scripts sync is now manifest-scoped by default (provisions scripts only for the fetchers you collect, like `upload`); `--all` pushes the whole catalog. Threaded an `include` filter through the uploader, api, CLI (new manifest arg + --all), and TUI (active manifest). - Focus/keyboard fix: page shortcuts (ctrl+r/ctrl+u/ctrl+s) fire regardless of focus; default focus lands in the active pane on mount, tab switch (mouse too), and escape — not just on number-key switches. - Add-fetchers picker: a fully-added category (e.g. datadog) no longer disappears; already-added fetchers render greyed-out and non-selectable. - Uniform sizing for the Paramify action row (Preview/Sync/force/reassociate) — equal width, and checkboxes flattened to one row to match the buttons. Tests: 233 passed (2 new scoping tests); ruff + mypy clean. TUI verified with headless Textual Pilot runs (focus, plan population, sizing). Co-Authored-By: Claude Opus 4.8 (1M context) <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.
A collection of TUI improvements for the next release (
0.3.0-beta), plus the one behavior change they surfaced. All changes are additive to the just-merged scripts-sync feature (#3).UI changes
Paramify tab redesign. Rebuilt the cramped single-table tab into stacked evidence upload and scripts sync panels over a shared log. Scripts sync gains a Preview action that runs a read-only
--dry-runand surfaces the per-fetcher plan (create / update / drift / noop) in a table — flagging which drifted scripts--forcewould push — so you can see what a sync will do before running it.Focus + keyboard-shortcut fix. Page shortcuts (
ctrl+r/ctrl+u/ctrl+s) previously only fired right after a number-key tab switch, because a page's bindings only fire when focus is inside it andfocus_defaultwasn't called on mount, mouse tab-clicks, orescape. Now default focus lands in the active pane in all those cases, so shortcuts work however you enter a tab.Add-fetchers picker fix. A category whose fetchers were all already in the manifest (e.g.
datadogwith all 13 added) vanished from the picker. It now stays visible, with already-added fetchers rendered greyed-out and non-selectable.Uniform action-row sizing.
Preview/Sync Scripts/force/reassociatewere mismatched in width (content-sized) and height (buttons flattened to 1 row, checkboxes 3). They're now a uniform 20×1 band.Behavior change
Scripts sync is manifest-scoped by default. It previously planned all repo fetchers (122) regardless of your manifest; it now provisions scripts only for the fetchers your manifest uses — mirroring how
paramify uploadis run-scoped — so you don't create scripts + evidence sets you never populate.--allrestores whole-catalog provisioning. Wired through the uploader,framework.api, the CLI (paramify scripts sync [manifest] [--all]), and the TUI (active manifest).Testing
_discover_specsinclude-filter +sync_scriptsforwarding);ruff check framework/+mypy framework/clean.ctrl+rliveness, plan-table population, add-picker disabled leaves, and the 20×1 uniform sizing.manifest.yaml→ 13,--all→ 122, explicit manifest → 1.🤖 Generated with Claude Code