Skip to content

feat(harness): inline include editing & manifest editor in detail pane#250

Merged
eyelock merged 4 commits into
developfrom
feat/harness-detail-editing
May 2, 2026
Merged

feat(harness): inline include editing & manifest editor in detail pane#250
eyelock merged 4 commits into
developfrom
feat/harness-detail-editing

Conversation

@eyelock
Copy link
Copy Markdown
Owner

@eyelock eyelock commented May 2, 2026

Summary

Phase 1 zing pass: makes the Harnesses detail pane a place where you can modify a non-registry harness inline, not just browse it. Builds on PR #249's foundation; no changes to the existing marketplace-driven include flow.

  • Inline include management — remove and edit affordances on each include row (gated to fully-editable harnesses), with a multi-step "Add Include…" flow embedded directly in the dependencies section. Source step picks between flat marketplace plugin list and free-form Git URL; picks step uses a reusable checkbox selector; review step shows the exact ynh include add command before apply. Already-installed plugins in the picker route to Edit instead of attempting a duplicate add.
  • Edit Include sheet — ref / path / picks editing for an existing include. Picks selector pre-checks what's currently included (resolved via MarketplaceStore lookup of source URL + path), with a command preview at the bottom showing the ynh include update that Save will run. Honors ynh's "empty picks = include all" semantics.
  • Manifest editor — new "Edit Manifest…" item in the detail action menu opens a sheet for the safe subset of plugin.json fields (description, default vendor, version with semver hint). Writes preserve every other key ($schema, includes, etc.) by round-tripping through a JSON dictionary. Save refreshes both detail and the harness list so the sidebar reflects the change.
  • Drift indicator polish — per-include yellow triangle now matches by git URL when an include has no subpath (was previously skipped), and the tooltip names the SHA delta ("Upstream commit changed: abc1234 → def5678") instead of the generic banner copy.

Test plan

  • Open a fully-editable harness; confirm ••• menu on each include row and + Add Include… button below the dependencies section.
  • Open a registry harness; confirm none of the editing affordances appear (Fork-to-local remains).
  • Add Include → marketplace path: pick a plugin, narrow picks, apply; new include appears with the chosen picks.
  • Add Include → git URL path: paste URL + ref + path, apply; include appears.
  • Try adding a plugin that's already on the harness — row shows "Already added" badge and pencil icon; clicking opens the Edit sheet for the existing include.
  • Edit Include: change ref/path/picks; command preview matches selection; Save persists changes; detail re-fetches.
  • Remove Include: confirm dialog → confirm → include disappears, detail refreshes.
  • Edit Manifest: change description/version/vendor; sidebar list AND detail header reflect the new values after Save.
  • Edit Manifest version: typing v1.0 (non-semver) keeps Save disabled and shows the orange hint.
  • Drift indicator: open a harness with detected drift; yellow triangles appear on the drifted include rows; hover reveals SHA delta tooltip.

🤖 Generated with Claude Code

David Collie and others added 4 commits May 2, 2026 12:35
Adds inline add/edit/remove of includes directly from the harness detail
pane, gated to non-registry harnesses. Builds on Phase 1's foundation;
no changes to the existing marketplace-driven flow.

- IncludeMutator service wraps ynh include remove/update with the same
  streaming pattern as IncludeApplier
- HarnessIncludeEditor coordinator drives the per-include affordances
  (edit sheet, remove confirmation) and the inline add panel state
- AddIncludeFlow embeds the source picker (marketplace browse or git
  URL), reusable picks selector, and review-and-apply step inline below
  the dependencies section
- EditIncludeSheet edits ref/path/picks with a command preview and
  honors ynh's "empty picks = include all" semantics
- Already-installed plugins in the source picker route to Edit instead
  of attempting a duplicate add

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Adds an "Edit Manifest…" item to the detail pane action menu (gated to
fully-editable harnesses) that opens a sheet for the safe subset of
plugin.json fields. Includes/delegates remain managed by ynh commands.

- HarnessManifestEditor service reads/writes .ynh-plugin/plugin.json,
  preserving every key (\$schema, name, includes, etc.) by round-tripping
  through a JSON dictionary
- SemverValidator gives the version field a shape check with inline hint
- VendorService drives the default-vendor picker
- Save invalidates detail and re-fetches so the header reflects the
  change immediately

Also picks up a swift-format whitespace fix on AddIncludeFlow.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
- Manifest save now refreshes the harness list so the sidebar reflects
  new version and description (was only re-fetching detail)
- "Default Vendor" label disambiguates the manifest field from the
  per-user override badge in the header
- Drift triangle on dependency rows now matches by git URL when an
  include has no subpath, so includes spanning the whole repo light up
- Drift tooltip names the SHA delta ("Upstream commit changed: abc1234
  → def5678") instead of the generic banner copy

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
Brings 39 non-English locales up to 852/852 keys. Covers the 50 new
strings added by this branch (include add/edit/remove + manifest
editor + drift tooltip) plus 12 pre-existing gaps that the localizer
audit surfaced (sidebar checkout-branch sheet, harness loading help,
unversioned drift help/banner/confirmation copy).

Validated with zero NEEDS TRANSLATION markers, zero missing keys, and
zero format-specifier mismatches across all 40 languages.

Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
@eyelock eyelock merged commit 063007e into develop May 2, 2026
7 checks passed
@eyelock eyelock deleted the feat/harness-detail-editing branch May 2, 2026 14:06
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant