Every row in the modifications panel encodes two independent signals: where the file stands relative to the last successful build, and whether the validator has accepted its current contents. Filters, badges, click actions, and the build ribbon all flow from those two axes.
excluded > pinned > building > in build/stale > new. stale fires when the file (or, for overrides, its vendor source) has drifted since the last successful Full Rebuild. Build & validation pills are independent except excluded shows — for validation.
| Surface | State | Action |
|---|---|---|
| Row body | any | Open file in editor. If active editor is on this URI, focus the tab. |
| Tier badge | any | Filter list to that tier (toggle with chip). |
| Content-cat badge | any | Tooltip: category name (Type / Func / Annotation / Basictypes / Enum / Desc). |
| Build pill | new / stale | Context menu: Run Full Rebuild, Exclude from build. |
| Build pill | in build | Tooltip: "In build at <timestamp>". |
| Build pill | building | No-op while build is in flight; transitions out automatically when BuildLock releases. |
| Build pill | pinned | Right-click: Unpin (use working copy), or Re-pin to different sha. Left-click: open file. |
| Build pill | excluded | Toggle to include (one click). |
| pin@<sha> chip | pinned | Tooltip: full sha + pin timestamp. Click: reveal that commit in View History. |
| Vendor file open | override exists | Opens the override (writable copy that applies at build time), not the read-only vendor base. Covers nav tree, search, and graph clicks. INV-04 / DQ-01b. |
| Validation pill | clean | Tooltip: last validated timestamp. |
| Validation pill | validating | No-op (transient). |
| Validation pill | errors | Open Problems panel filtered to this file; jump cursor to first error. |
| Validation pill | n/a | Tooltip: "No validator for .java today — install Red Hat Java Pack (Phase N)." |
| Right-click row | any | Menu: Edit / Unlock, Discard, Exclude, View History. |
| Help icon (?) | — | Open this help webview. |
| Filter chip | — | Toggle. Within row: OR. Across rows: AND. |
| Refresh icon (↻) | — | Force tracker.refresh + BSS.reload + push to webview. |
Vendor → override redirect.
Clicking a vendor file when an override exists at rune/overrides/<sub-path> opens the override — the writable copy that actually applies at build time — not the read-only vendor base. Applies to clicks from the namespace nav tree, search results, and the graph view. The vendor file is still reachable via raw showTextDocument; a dedicated "View vendor base" toolbar affordance is planned for users who want to peek upstream.
BuildLock.acquire() →
building
→ release() →
in build
BuildLock.acquire(), snapshot membership frozen for the build's lifetime (mid-build saves don't remove BUILDING from a row), exits on release() back to the row's computed steady state.
.runedsl/excluded.json::pinned[path]); working-copy edits are ignored at build time until unpinned. Unpin transitions to whatever the working copy now computes to — typically new or stale.