[PR #1228] [MERGED] fix(artifacts): name only host-available workflows for non-archive plists #2739

Closed
opened 2026-10-17 21:09:40 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/1228
Author: @kaoru0822-kitauji
Created: 10/9/2026
Status: ✅ Merged
Merged: 10/9/2026
Merged by: @kaoru0822-kitauji

Base: main ← Head: fix/keyed-archive-host-remediation


📝 Commits (1)

  • 2295855 fix(artifacts): name only host-available workflows for non-archive plists

📊 Changes

4 files changed (+67 additions, -7 deletions)

View changed files

📝 src/artifacts/ArtifactProvider.ts (+8 -2)
📝 src/artifacts/apple/KeyedArchiveReader.ts (+25 -2)
📝 src/domain/apple/keyedArchive.ts (+3 -3)
📝 tests/boundary/filesystem/keyedArchiveSelection.test.ts (+31 -0)

📄 Description

Follow-up to #1226, addressing its Codex review finding. #1226 merged before this fix was pushed.

Problem

#1226 reports an ordinary property list selected for inspect_keyed_archive as unsupported_target, with the remediation "Inspect an ordinary property list with inspect_plist". inspect_keyed_archive is available on every host, but inspect_plist is provided only by the native macOS provider (nativeMacOSCapabilities: unavailable outside Darwin). On Linux, the remediation therefore pointed to a workflow that the capability layer rejects.

Change

  • KeyedArchiveKindError (domain) now records only what the file is (nib-archive or property-list), not any tool advice.
  • The artifact reader picks the remediation for the provider's host:
Selected file macOS other hosts
ordinary plist / other archiver "Inspect an ordinary property list with inspect_plist; inspect_keyed_archive decodes NSKeyedArchiver archives only." "Select an NSKeyedArchiver archive; inspect_keyed_archive decodes only those. inspect_plist, which reads ordinary property lists, requires a macOS host."
NIBArchive decode it with decode_interface_builder (available on every host) same
  • ArtifactProvider passes its constructor platform (already used for its capability declarations) to its clients and on to the reader, so the remediation and the advertised capabilities follow the same host.

Code, category, message and details are unchanged from #1226.

Verification

  • tests/boundary/filesystem/keyedArchiveSelection.test.ts: a new provider-level case runs new ArtifactProvider(platform) on a standalone plain plist for darwin and linux. The linux case fails on main and passes here. The existing kind cases now pin darwin explicitly.
  • Keyed-archive and artifact-provider suites (18 files, 121 tests) passed.
  • npm run check:changed: typecheck, lint, and 393 affected tests passed.

No Hopper or Ghidra verification was needed; neither provider is involved.

🤖 Generated with Claude Code


🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.

## 📋 Pull Request Information **Original PR:** https://github.com/morluto/rea/pull/1228 **Author:** [@kaoru0822-kitauji](https://github.com/kaoru0822-kitauji) **Created:** 10/9/2026 **Status:** ✅ Merged **Merged:** 10/9/2026 **Merged by:** [@kaoru0822-kitauji](https://github.com/kaoru0822-kitauji) **Base:** `main` ← **Head:** `fix/keyed-archive-host-remediation` --- ### 📝 Commits (1) - [`2295855`](https://github.com/morluto/rea/commit/22958558eafdfccf71a7d5bbbcf360574a6b2e3c) fix(artifacts): name only host-available workflows for non-archive plists ### 📊 Changes **4 files changed** (+67 additions, -7 deletions) <details> <summary>View changed files</summary> 📝 `src/artifacts/ArtifactProvider.ts` (+8 -2) 📝 `src/artifacts/apple/KeyedArchiveReader.ts` (+25 -2) 📝 `src/domain/apple/keyedArchive.ts` (+3 -3) 📝 `tests/boundary/filesystem/keyedArchiveSelection.test.ts` (+31 -0) </details> ### 📄 Description Follow-up to #1226, addressing its Codex review finding. #1226 merged before this fix was pushed. ## Problem #1226 reports an ordinary property list selected for `inspect_keyed_archive` as `unsupported_target`, with the remediation "Inspect an ordinary property list with inspect_plist". `inspect_keyed_archive` is available on every host, but `inspect_plist` is provided only by the native macOS provider (`nativeMacOSCapabilities`: unavailable outside Darwin). On Linux, the remediation therefore pointed to a workflow that the capability layer rejects. ## Change - `KeyedArchiveKindError` (domain) now records only what the file is (`nib-archive` or `property-list`), not any tool advice. - The artifact reader picks the remediation for the provider's host: | Selected file | macOS | other hosts | | --- | --- | --- | | ordinary plist / other archiver | "Inspect an ordinary property list with inspect_plist; inspect_keyed_archive decodes NSKeyedArchiver archives only." | "Select an NSKeyedArchiver archive; inspect_keyed_archive decodes only those. inspect_plist, which reads ordinary property lists, requires a macOS host." | | NIBArchive | decode it with `decode_interface_builder` (available on every host) | same | - `ArtifactProvider` passes its constructor `platform` (already used for its capability declarations) to its clients and on to the reader, so the remediation and the advertised capabilities follow the same host. Code, category, message and `details` are unchanged from #1226. ## Verification - `tests/boundary/filesystem/keyedArchiveSelection.test.ts`: a new provider-level case runs `new ArtifactProvider(platform)` on a standalone plain plist for `darwin` and `linux`. The `linux` case fails on main and passes here. The existing kind cases now pin `darwin` explicitly. - Keyed-archive and artifact-provider suites (18 files, 121 tests) passed. - `npm run check:changed`: typecheck, lint, and 393 affected tests passed. No Hopper or Ghidra verification was needed; neither provider is involved. 🤖 Generated with [Claude Code](https://claude.com/claude-code) --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-10-17 21:09:40 +00:00
Sign in to join this conversation.
No milestone
No project
No assignees
1 participant
Notifications
Due date
The due date is invalid or out of range. Please use the format "yyyy-mm-dd".

No due date set.

Dependencies

No dependencies set.

Reference
morluto/rea#2739
No description provided.