[PR #5122] [CLOSED] test(plist): update expectations for unknown XML scalar wrappers #6773

Closed
opened 2026-11-01 21:42:56 +00:00 by bsakaguchi · 0 comments
Owner

📋 Pull Request Information

Original PR: https://github.com/morluto/rea/pull/5122
Author: @CassieFox23
Created: 10/18/2026
Status: ❌ Closed

Base: main ← Head: test/plist-stale-expectations


📝 Commits (1)

  • c43e2c4 test(plist): update expectations for unknown XML scalar wrappers

📊 Changes

3 files changed (+35 additions, -12 deletions)

View changed files

📝 tests/boundary/filesystem/interfaceBuilderBundle.test.ts (+3 -3)
📝 tests/boundary/filesystem/keyedArchiveDateRange.test.ts (+13 -4)
📝 tests/fixtures/keyedArchiveNumberMetadata.ts (+19 -5)

📄 Description

TL;DR: Main CI has been red since 3537e58c1. That commit changed plist output on purpose. Three test files still expect the old output. This PR updates them. It changes tests only.

Summary

Closes #5121

3537e58c1 wraps unknown XML scalars as $plist_type: "unknown". It also keeps the timestamp for years past 9999. This PR changes three test files to expect that. It follows the intent of 3537e58c1. It changes no source file.

Problem and expected behavior

Main 32f0e5120 fails CI. Its parent cee95b2ae passes. The tests still expect the shapes from before 3537e58c1.

Test file Failing tests on 32f0e5120
keyedArchiveNumberMetadata (filesystem, CLI and MCP surfaces) 24
keyedArchiveDateRange 1
interfaceBuilderBundle 1

The single failures in the last two rows were run on Node 24 only. The tests should match the new output that 3537e58c1 chose.

Change and scope

Follow the contribution scope.
Unresolved scope, authority, side effects, or required verification block
integration. Link the required maintainer scope decision for new providers or
capabilities involving target execution, injection, mutation, or protection
recovery; ordinary fixes within existing boundaries may state "not applicable".
Draft PRs may leave the scope decision pending and the readiness and merge checklists
unchecked. Maintainers can help resolve open questions.

The change is test-only. It touches three files:

  • tests/fixtures/keyedArchiveNumberMetadata.ts: the exact integer stays exact. The second element becomes an unknown integer wrapper. Its reason is unsupported-markup if the literal has <, else invalid-literal. The entity-encoded case is now unknown, and incomplete is true. The limitation text is now "1 XML scalar value(s) could not be established".
  • tests/boundary/filesystem/keyedArchiveDateRange.test.ts: the far date is now 300000-01-01T00:00:00Z. No JavaScript date can hold it. The test expects an unknown date wrapper with reason unrepresentable.
  • tests/boundary/filesystem/interfaceBuilderBundle.test.ts: the same far date. The limitation regex now says "1 XML scalar value(s)".

Not included: any source change, and the 2 nativeUiFinalizationMcp failures on main. Those are separate and already noted on #5056.

Two questions for the maintainer:

  1. Is it intended that an entity-encoded integer such as <integer>&#57;007199254740993</integer> is now unknown? The acceptance test in 3537e58c1 lists &#52;2 as unknown, so I think yes.
  2. XML dates can no longer give iso8601: null. Can the unknownDateCount branch still be reached from binary plists? I did not trace this.

PRs #4054 and #4047 touch the same fixture. They are on an old base and are unrelated.

Contract and boundary impact

  • Semantic owner and earliest changed stage: tests only. The behavior was changed by 3537e58c1 in the XML plist reader. This PR does not change it.
  • Contribution scope fit and linked maintainer decision: not applicable. This is an ordinary fix within existing boundaries.
  • CLI and MCP/tool-catalog contract: none. The tests now match the current output.
  • Provider, bridge, target-format, or platform compatibility: unknown on macOS. I did not compare with plutil output.
  • Evidence, artifact, provenance, or reconstruction contract: none changed.
  • Target selection, authority, upstream behavior, and cleanup details (if applicable): not applicable.
  • Generated metadata (docs/public/product-catalog.json), package, or installation impact (CI generates and validates ignored catalogs and skills/; edit authored instructions in .agents/skills/reverse-engineer-anything/ and never commit build outputs): none.

Expected effects (check known effects; use documentation-only on its own).
Unchecked items do not establish absence; leave uncertainties visible.

  • Read existing files or captured data.
  • Launch or attach to a process.
  • Inject instrumentation or run scripts/code.
  • Change process memory, registers, files, or configuration.
  • Contact network services.
  • Recover protected code or work around protections.
  • Documentation or usability only; no target interaction.
  • Not sure yet; investigation or maintainer guidance needed.

This PR changes tests and one test fixture. The tests only write and read their own temp plist files. I did not audit every effect, so these boxes stay unticked.

Evidence and regression coverage

  • Tests added or updated: three files, listed under Change and scope. No new test cases.
  • Base reproduction or other evidence: executed. On main 32f0e5120 the two number-metadata files give 24 failed and 26 passed on Node 22.23.1, 24.18.0 and 26.11.1. The date-range and Interface Builder files fail 1 test each on Node 24. On cee95b2ae the two number-metadata files give 50 passed. CI agrees. Run 39155858235 is the first red one, on 3537e58c1. Run 39163665969 is red on 32f0e5120.
  • User-visible CLI/MCP output (if applicable): not applicable. No output changes.
  • Remaining proof gaps: no macOS plutil check, and no full suite or CI sharded jobs.

For evidence-bearing changes:

  • Observed, derived, and inferred claims remain distinguishable.
  • Artifact identity, source provenance, and failed attempts remain preserved.
  • Unsupported, incomplete, unavailable, or uncertain outcomes remain visible.

Validation performed

  • npm run test:focused -- tests/boundary/filesystem/keyedArchiveNumberMetadata.test.ts tests/boundary/mcp/keyedArchiveNumberMetadataMcp.test.ts tests/boundary/filesystem/keyedArchiveDateRange.test.ts tests/boundary/filesystem/interfaceBuilderBundle.test.ts tests/acceptance/applications/keyedArchiveXmlScalars.test.ts — 5 files: 75 passed, 24 skipped (they need ibtool), 0 failed on each of Node 22.23.1, 24.18.0 and 26.11.1.
  • tsc --noEmit, oxfmt --check and oxlint — clean.
  • The same files on parent cee95b2ae — 74 passed. It is 74, not 75, because keyedArchiveXmlScalars is new in 3537e58c1.
  • The same files on main 32f0e5120 — 24 + 1 + 1 failures, as in the table above.

Not run:

  • The full test suite and the CI sharded jobs.
  • macOS plutil and ibtool. The 24 skipped tests need ibtool.
  • nativeUiFinalizationMcp. It fails 2 tests on main for a separate reason, reported on #5056.

Compatibility, safety, and release

  • Breaking changes or migration steps: none. This PR changes tests only.
  • Real Hopper/Ghidra, browser, or OS coverage: not applicable. No macOS coverage, as noted above.
  • Package or release metadata impact: none.
  • Security, privacy, process, or containment review: none needed. Test files and one fixture only.

Author readiness

Human owner:

  • I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work.
  • I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps.
  • I declare this PR ready for initial maintainer review.

Before merge

  • This PR addresses a concrete problem or an agreed enhancement.
  • Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff.
  • The PR has one focused outcome and the title follows type(scope): outcome.
  • Related issue is linked, or the reason for not linking one is stated above.
  • Tests cover changed observable behavior and meaningful failure paths.
  • Owning docs, contracts, and generated metadata are updated where needed.
  • User-visible CLI/MCP changes include representative output.
  • I checked the final diff for secrets, unrelated cleanup, and unsupported claims.
Test setup
  • Box: Nobara 44 (Fedora 44 base), Linux 7.2.9
  • CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads
  • RAM: 32 GB DDR4-3600
  • Node: 22.23.1, 24.18.0, 26.11.1
  • Head / base: c43e2c4f6 / 32f0e5120

🤖 Generated with Claude Code (Sonnet 5.5, verified by Opus 5.5) 🦊


🔄 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/5122 **Author:** [@CassieFox23](https://github.com/CassieFox23) **Created:** 10/18/2026 **Status:** ❌ Closed **Base:** `main` ← **Head:** `test/plist-stale-expectations` --- ### 📝 Commits (1) - [`c43e2c4`](https://github.com/morluto/rea/commit/c43e2c4f6453ccc2162b496e470f8d6ec756f575) test(plist): update expectations for unknown XML scalar wrappers ### 📊 Changes **3 files changed** (+35 additions, -12 deletions) <details> <summary>View changed files</summary> 📝 `tests/boundary/filesystem/interfaceBuilderBundle.test.ts` (+3 -3) 📝 `tests/boundary/filesystem/keyedArchiveDateRange.test.ts` (+13 -4) 📝 `tests/fixtures/keyedArchiveNumberMetadata.ts` (+19 -5) </details> ### 📄 Description **TL;DR:** Main CI has been red since 3537e58c1. That commit changed plist output on purpose. Three test files still expect the old output. This PR updates them. It changes tests only. <!-- PR title: type(optional-scope): imperative outcome The title becomes the squash-merge commit subject and generated changelog entry. --> ## Summary <!-- What user, agent, or maintainer problem does this solve? Link the issue with "Fixes #123" when applicable. Keep the prior behavior, expected contract, and new behavior understandable without private context. --> Closes #5121 3537e58c1 wraps unknown XML scalars as `$plist_type: "unknown"`. It also keeps the timestamp for years past 9999. This PR changes three test files to expect that. It follows the intent of 3537e58c1. It changes no source file. ## Problem and expected behavior <!-- For fixes, give the smallest trigger and violated invariant. For features, describe the use case and observable outcome. --> Main 32f0e5120 fails CI. Its parent cee95b2ae passes. The tests still expect the shapes from before 3537e58c1. | Test file | Failing tests on 32f0e5120 | | --- | --- | | `keyedArchiveNumberMetadata` (filesystem, CLI and MCP surfaces) | 24 | | `keyedArchiveDateRange` | 1 | | `interfaceBuilderBundle` | 1 | The single failures in the last two rows were run on Node 24 only. The tests should match the new output that 3537e58c1 chose. ## Change and scope <!-- Explain the chosen approach, why it fits REA's architecture, and what is intentionally not included. --> Follow the [contribution scope](https://github.com/morluto/rea/blob/main/CONTRIBUTING.md#contribution-scope). Unresolved scope, authority, side effects, or required verification block integration. Link the required maintainer scope decision for new providers or capabilities involving target execution, injection, mutation, or protection recovery; ordinary fixes within existing boundaries may state "not applicable". Draft PRs may leave the scope decision pending and the readiness and merge checklists unchecked. Maintainers can help resolve open questions. The change is test-only. It touches three files: - `tests/fixtures/keyedArchiveNumberMetadata.ts`: the exact integer stays exact. The second element becomes an unknown integer wrapper. Its reason is `unsupported-markup` if the literal has `<`, else `invalid-literal`. The entity-encoded case is now `unknown`, and `incomplete` is true. The limitation text is now "1 XML scalar value(s) could not be established". - `tests/boundary/filesystem/keyedArchiveDateRange.test.ts`: the far date is now 300000-01-01T00:00:00Z. No JavaScript date can hold it. The test expects an unknown date wrapper with reason `unrepresentable`. - `tests/boundary/filesystem/interfaceBuilderBundle.test.ts`: the same far date. The limitation regex now says "1 XML scalar value(s)". Not included: any source change, and the 2 `nativeUiFinalizationMcp` failures on main. Those are separate and already noted on #5056. Two questions for the maintainer: 1. Is it intended that an entity-encoded integer such as `<integer>&#57;007199254740993</integer>` is now unknown? The acceptance test in 3537e58c1 lists `&#52;2` as unknown, so I think yes. 2. XML dates can no longer give `iso8601: null`. Can the `unknownDateCount` branch still be reached from binary plists? I did not trace this. PRs #4054 and #4047 touch the same fixture. They are on an old base and are unrelated. ## Contract and boundary impact <!-- Short answers are welcome. Complete applicable lines; mark unresolved facts as "unknown". Use "none" or "not applicable" only when established. --> - Semantic owner and earliest changed stage: tests only. The behavior was changed by 3537e58c1 in the XML plist reader. This PR does not change it. - Contribution scope fit and linked maintainer decision: not applicable. This is an ordinary fix within existing boundaries. - CLI and MCP/tool-catalog contract: none. The tests now match the current output. - Provider, bridge, target-format, or platform compatibility: unknown on macOS. I did not compare with `plutil` output. - Evidence, artifact, provenance, or reconstruction contract: none changed. - Target selection, authority, upstream behavior, and cleanup details (if applicable): not applicable. - Generated metadata (`docs/public/product-catalog.json`), package, or installation impact (CI generates and validates ignored catalogs and `skills/`; edit authored instructions in `.agents/skills/reverse-engineer-anything/` and never commit build outputs): none. Expected effects (check known effects; use documentation-only on its own). Unchecked items do not establish absence; leave uncertainties visible. - [ ] Read existing files or captured data. - [ ] Launch or attach to a process. - [ ] Inject instrumentation or run scripts/code. - [ ] Change process memory, registers, files, or configuration. - [ ] Contact network services. - [ ] Recover protected code or work around protections. - [ ] Documentation or usability only; no target interaction. - [ ] Not sure yet; investigation or maintainer guidance needed. This PR changes tests and one test fixture. The tests only write and read their own temp plist files. I did not audit every effect, so these boxes stay unticked. ## Evidence and regression coverage <!-- State whether evidence is executed, source-derived, or proposed. For fixes, show the original failure and explain how the regression would fail on the affected base revision when practical. Include the most useful proof inline; link long logs or artifacts, or put them in optional details. Documentation-only changes can use source, link, or rendered-document checks. --> - Tests added or updated: three files, listed under Change and scope. No new test cases. - Base reproduction or other evidence: executed. On main 32f0e5120 the two number-metadata files give 24 failed and 26 passed on Node 22.23.1, 24.18.0 and 26.11.1. The date-range and Interface Builder files fail 1 test each on Node 24. On cee95b2ae the two number-metadata files give 50 passed. CI agrees. Run 39155858235 is the first red one, on 3537e58c1. Run 39163665969 is red on 32f0e5120. - User-visible CLI/MCP output (if applicable): not applicable. No output changes. - Remaining proof gaps: no macOS `plutil` check, and no full suite or CI sharded jobs. For evidence-bearing changes: - [ ] Observed, derived, and inferred claims remain distinguishable. - [ ] Artifact identity, source provenance, and failed attempts remain preserved. - [ ] Unsupported, incomplete, unavailable, or uncertain outcomes remain visible. ## Validation performed <!-- List only commands that actually ran, with observed results. Include the relevant real-provider or platform workflow, or explain why it was unavailable. Keep these results current after changes; a command without its result is incomplete. --> - `npm run test:focused -- tests/boundary/filesystem/keyedArchiveNumberMetadata.test.ts tests/boundary/mcp/keyedArchiveNumberMetadataMcp.test.ts tests/boundary/filesystem/keyedArchiveDateRange.test.ts tests/boundary/filesystem/interfaceBuilderBundle.test.ts tests/acceptance/applications/keyedArchiveXmlScalars.test.ts` — 5 files: 75 passed, 24 skipped (they need `ibtool`), 0 failed on each of Node 22.23.1, 24.18.0 and 26.11.1. - `tsc --noEmit`, `oxfmt --check` and `oxlint` — clean. - The same files on parent cee95b2ae — 74 passed. It is 74, not 75, because `keyedArchiveXmlScalars` is new in 3537e58c1. - The same files on main 32f0e5120 — 24 + 1 + 1 failures, as in the table above. Not run: - The full test suite and the CI sharded jobs. - macOS `plutil` and `ibtool`. The 24 skipped tests need `ibtool`. - `nativeUiFinalizationMcp`. It fails 2 tests on main for a separate reason, reported on #5056. ## Compatibility, safety, and release <!-- Call out breaking changes, migrations, package effects, platform/provider limits, security/privacy/containment implications, and meaningful proof gaps. --> - Breaking changes or migration steps: none. This PR changes tests only. <!-- For ! / BREAKING CHANGE: show a previously valid call/configuration, its new behavior and migration, and why compatibility/deprecation cannot preserve it. Every release increments minor, including breaking changes; keep breaking markers and migration notes so callers can assess compatibility. See docs/releasing.md. --> - Real Hopper/Ghidra, browser, or OS coverage: not applicable. No macOS coverage, as noted above. - Package or release metadata impact: none. - Security, privacy, process, or containment review: none needed. Test files and one fixture only. ## Author readiness <!-- The human owner completes these declarations before requesting review. The PR author is the owner by default. A different owner must explicitly accept ownership on this PR. AI agents must leave these declarations to a human to dictate to them or there could be catastrophic consequences for many users of REA. Draft PRs may leave them unchecked. These declarations record initial readiness when opening the PR for review; later pushes do not require a new human sign-off. Keep the description and validation evidence current as the work changes. See CONTRIBUTING.md#pull-request-ownership-and-readiness. --> Human owner: <!-- @GitHub-handle --> - [ ] I reviewed the final diff and relevant existing code, understand the change and its edge cases, and take responsibility for the complete PR, including AI-assisted work. - [ ] I checked the evidence above, confirmed it supports the current change, and recorded meaningful validation gaps. - [ ] I declare this PR ready for initial maintainer review. ## Before merge <!-- Draft PRs may leave pending items unchecked. Resolve material scope and authority questions before integration. --> - [x] This PR addresses a concrete problem or an agreed enhancement. - [ ] Material scope and authority questions are resolved, and any required maintainer scope decision covers the final diff. - [x] The PR has one focused outcome and the title follows `type(scope): outcome`. - [x] Related issue is linked, or the reason for not linking one is stated above. - [ ] Tests cover changed observable behavior and meaningful failure paths. - [ ] Owning docs, contracts, and generated metadata are updated where needed. - [ ] User-visible CLI/MCP changes include representative output. - [ ] I checked the final diff for secrets, unrelated cleanup, and unsupported claims. <details> <summary>Test setup</summary> - Box: Nobara 44 (Fedora 44 base), Linux 7.2.9 - CPU: AMD Ryzen 9 5900X, 12 cores / 24 threads - RAM: 32 GB DDR4-3600 - Node: 22.23.1, 24.18.0, 26.11.1 - Head / base: c43e2c4f6 / 32f0e5120 </details> 🤖 Generated with Claude Code (Sonnet 5.5, verified by Opus 5.5) 🦊 --- <sub>🔄 This issue represents a GitHub Pull Request. It cannot be merged through Gitea due to API limitations.</sub>
bsakaguchi 2026-11-01 21:42:56 +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#6773
No description provided.