mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
Open
opened 2026-10-15 18:21:47 +00:00 by bsakaguchi
·
15 comments
No Branch/Tag specified
main
codex/procedure-reference-stacked
release-please--branches--main--components--rea-agents
release-please--branches--main--components--rea-agents--release-notes
codex/kuna-independent-retry
codex/byte-search-overlay-coverage
codex/open-failure-target-receipt
codex/kuna-xref-evidence
codex/ghidra-ambiguous-procedure-recovery
codex/function-source-bundle
codex/trace-function-integration-prototype
codex/snapshot-source-closure
codex/recorded-evidence-array-pages
codex/evidence-recovery-redesign
codex/trace-feature-address-scope
codex/call-discovery-scope
codex/ghidra-literal-candidate-evidence
codex/decompile-directory-independent-retry
codex/retry-provenance-base
codex/value-flow-capability-experiment
codex/ghidra-containing-instruction
cursor/readme-discord-button-ef9f
dependabot/github_actions/actions/setup-node-7.1.0
dependabot/github_actions/actions/upload-artifact-7.0.2
dependabot/npm_and_yarn/npm-minor-and-patch-d8d97ce6df
codex/kuna-1989
fix/8559-native-ui-fixture-ownership
fix/8555-go-verifier-mcp-ownership
codex/provider-capability-recovery
fix/8642-rizin-target-stdin
codex/ghidra-memory-effect-scope
codex/ghidra-annotation-entry-selector
codex/ghidra-readonly-recovery
codex/ghidra-regex-verifier-recovery
codex/evidence-discovery-view-guidance
fix/8545-bulk-append-overflow
fix/8428-navigation-refusal-alternatives
codex/address-context-recovery
codex/matching-member-limitations
codex/unknown-scope-contract
codex/evidence-view-guidance
feat/8373-native-trace-views
codex/ghidra-snapshot-verifier-binding
codex/elf-export-visibility
codex/evidence-view-recovery
codex/native-reference-cli-help
codex/provider-candidate-observation-scope
codex/kuna-session-verification
codex/ghidra-switch-lifetime-guidance
codex/pseudocode-paging-discovery
codex/clarify-evidence-view-support
codex/kuna-xrefs-selector-recovery
codex/context-capacity-recovery
codex/evidence-closure-large-links
codex/same-function-evidence-identity
codex/ghidra-verifier-inspected-jdk
codex/audit-guided-workflows
codex/crash-prompt-retained-dossiers
codex/analysis-view-error-recovery
codex/kuna-verifier-target-selection
codex/ghidra-selected-project-call-coverage
codex/docs-native-analysis-scope
codex/ghidra-java-socket-boundary
codex/ghidra-retained-snapshot-verifier
codex/ghidra-search-inventory-facts
fix/8284-zero-argument-parameter-bindings
fix/8198-ui-action-handler-offset
fix/8257-elf-entry-label-identity
fix/8304-deferred-output-schema-projection
fix/8277-call-path-computed-target-uncertainty
fix/pr-8089-conflicts
fix/ci-static-duplicate-export
dependabot/npm_and_yarn/lint-staged-17.6.0
dependabot/github_actions/actions/download-artifact-8.0.2
dependabot/npm_and_yarn/write-file-atomic-8.0.0
dependabot/npm_and_yarn/canonicalize-5.1.0
dependabot/github_actions/actions/cache/restore-6.1.0
dependabot/npm_and_yarn/toon-format/toon-4.4.0
dependabot/github_actions/actions/deploy-pages-5.0.1
codex/review-fixes-pr-2403
codex/review-fixes-pr-2400
codex/process-terminal-width
codex/test-brittleness-cleanup
verify/7167-browser-connect-macos
fix/7167-browser-connect
feat/native-matching-allowance-setting
feat/browser-scenario-dry-run
test/managed-caller-parameters-20261024
codex/parser-fortythird-boundaries
fix/6926-pinvoke-platform-decorations-20261023
fix/6889-har-body-encoding-20261023
fix/6888-sqlite-schema-budget-20261023
fix/dependency-security-gates-6708
cursor/evidence-overwrite-rebase-b4ac
feat/4057-verify-native-exports
fix/windows-acl-observer-overhead-20261022
cursor/erlang-beam-restack-4476
cursor/pe-certificate-review-bf32
fix/6116-javascript-application-fs-errors
fix/6061-unmapped-runtime-script-unknown
feat/browser-scenario-summary
fix/pe-certificates
codex/verify-3407
cursor/rebase-5699
cursor/rebase-5352
cursor/rebase-5600
cursor/fix-cli-schema-omission-10a8
codex/audit-hopper-shutdown-reasons-20261021
fix/demangle-swift-omitted-record
fix/nib-boolean-value-types
cursor/cancellation-partial-observation-a5ac
fix/ib-object-limit-reasons
fix/electron-fuse-limit-advice
fix/kuna-doctor-dangling-cache
fix/fixed-budget-refusal-advice
fix/js-ipc-listener-dedup
fix/js-return-member-provenance
fix/dmg-integrity-retry-advice
fix/ida-doctor-readiness
fix/kuna-version-probe-output-drain
fix/legacy-swift-runtime-name-matching
fix/dylib-lazy-load-commands
fix/browser-scenario-startup-cancel
fix/swift-nested-punycode-classification
fix/compare-unselected-scopes
fix/objc-method-budget-coverage
fix/dmg-mounted-root-observations
audit/ci-tests-20261019-round2
release/6.7.0
fix/wabt-cleanup-retry-resolution
fix/electron-fuse-elf-pe-architecture
fix/native-plist-descriptor-ownership
fix/kuna-caller-cleanup-ownership
experiment/atomic-codemode-20261016
review/first-contributor-3776
fix/call-resolution-full-read-cycles
fix/member-mutation-selection-repeat
experiment/atomic-re-tools-20261015
perf/member-mutation-lazy-origins
perf/static-network-mutation-index
fix/hopper-startup-lifecycle
audit/3050-windows-proof-20261015
feat/windows-window-capture-2183
audit/3049-windows-proof-20261015
audit/3735-macos-fixtures-20261015
fix/batch-decompile-null-pseudocode
fix/kuna-inventory-honors-jobs
experiment/browser-codemode-tool-design-20261015
fix/hopper-clean-runtime-argv
codex/review-2049-27f1b367
review-fixes/pr-2787-routing
fix/3360-scoped-this-emitters
fix/3367-replaced-global-effects
fix/3838-compact-any-value-items
test/hopper-download-probe-20261015
codex/windows-runtime-creation-red-green-20261015
codex/windows-readonly-root-red-green-20261015
codex/windows-root-share-red-green-20261015
codex/exp-1685-win-mcp-startup
codex/bug-sweep-20261015
investigate/2190-windows-package-phases
investigate/3543-macos-cli-deadline
perf/3281-reverse-tools-feedback-quality
fix/3406-hopper-doctor-fixture
fix/3341-wrapper-require-test-context
fix/3301-owned-uninstall-fixtures
fix/3164-compiler-input-ownership
fix/pcap-cleanup-stdout-newline-20261014
perf/interface-builder-summary
codex/review-fixes-pr-1977
fix/ghidra-effective-jvm-platform
fix/docs-turkish-rust-link-20261013
fix/main-maintenance-ci-20261010
fix/recover-binary-session-process-effects
codex/review-fixes-pr-2457
codex/ci-required-cancellation-gate
fix/main-format-baseline-20261013
fix/setup-preserve-entry-fields
cursor/restore-main-checks-1ffc
fix/ghidra-bridge-hashmap-import
codex/shared-ci-jadx-json-default-20261013
codex/shared-ci-ghidra-test-groups-20261013
codex/shared-ci-java-fixture-format-20261013
codex/fix-intrinsic-invocation-boundaries
test/release-preflight-reusable-jobs
test/js-parameter-provenance-expectation
fix/linux-hopper-verification-current
test/2419-ghidra-elf-probe-size
followup/pr-1544-native-ida
codex/fold-pr-2230-contribution
docs/readme-responsible-use
fix/issue-2064
fix/issue-2050
fix/issue-2053
fix/issue-1968
fix/issue-1945
experiment/codemode-bridge-20261011
fix/tool-effects-negative-wording-1904-20261012
fix/1842-electron-interop-provenance
feat/recover-javascript-multi-input
refactor/website-i18n-prep
fix/nativeaot-pe-virtual-extent
fix/browser-verifier-ci-hang
fix/pe-resources-input-selection
docs/beginner-friendly-guides
docs/beginner-setup-guide
fix/javascript-analysis-worker-1563
fix/1649-ghidra-duplicate-names
fix/javascript-export-keys-integration-1369
test/maintenance-boundary-contracts-20261011
review/javascript-export-keys-1369
review/process-live-progress-1483
test/javascript-1495-growth-ratio
fix/ci-escape-timing
docs/normalized-terminal-geometry-1450
release/6.3.0
archive/release-6.3.0-pr1381
release/6.2.0
fix/electron-preload-dynamic-override
fix/javascript-self-referential-bundler-edges
release/6.1.0
cursor/grok-client-cherry-pick-0b56
feat/signature-posture
feat/dyld-shared-cache
feat/artifact-integrity-policy
feat/pkg-inventory
release/6.0.0
chore/sync-release-5.0.0
release/5.0.0
cursor/cloud-agent-node-787e
fix/javascript-xhr-open-endpoints
review/pr-711-realpath-fallback-wording
cleanup/replay-confinement
codex/test-suite-performance
codex/issue-foundations
codex/address-open-issues-2026-07-20
agent/javascript-vite-rollup-esbuild-adapters
agent/process-cleanup
agent/triage-integration
agent/unknown-commands-registry
feat/mcp-identity-metadata
morlvps/issue_cleanup
codex/installer-redesign
morl/roadmap-investigation-core
morl/roadmap-investigation-docs
release-please--branches--main--components--rea
rea-agents-6.8.0
rea-agents-6.7.0
rea-agents-6.6.0
experiment/atomic-codemode-wait-runtime-20261016
rea-agents-6.5.0
rea-agents-6.4.0
rea-agents-6.3.0
rea-agents-6.2.0
rea-agents-6.1.0
rea-agents-6.0.0
rea-agents-5.0.0
rea-agents-4.1.0
rea-agents-4.0.1
rea-agents-4.0.0
rea-agents-3.2.1
rea-agents-3.2.0
rea-agents-3.1.0
rea-agents-3.0.0
rea-agents-2.7.0
rea-agents-2.6.0
rea-agents-2.5.1
rea-agents-2.5.0
rea-agents-2.4.0
rea-agents-2.3.0
rea-agents-2.2.0
rea-agents-2.1.0
rea-agents-2.0.0
rea-agents-1.7.0
rea-agents-1.6.0
rea-agents-1.5.0
rea-agents-1.4.0
rea-agents-1.3.0
rea-agents-1.2.0
rea-agents-1.1.0
rea-agents-1.0.0
rea-agents-0.5.0
rea-agents-0.4.0
rea-agents-0.3.0
rea-0.2.1
rea-0.2.0
Labels
Clear labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
Mirrored from GitHub Pull Request
question
roadmap
triage
No labels
area: bridge
area: bridge
area: build
area: build
area: build
area: cli
area: domain
area: evidence
area: mcp
area: native
area: providers
area: runtime
area: server
area: setup
area: tests
bug
design
documentation
enhancement
enhancement
enhancement
experiment
help wanted
i18n
invalid
P0: critical
P1: high
P2: medium
P2: medium
P2: medium
P3: low
performance
provider-request
pull-request
question
roadmap
triage
Milestone
Clear milestone
No items
No milestone
Projects
Clear projects
No items
No project
Assignees
Clear assignees
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#159
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @morluto on GitHub (Jul 16, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/287
Problem Statement
REA's Windows Ghidra P0 explicitly does not claim private-DACL enforcement, reparse-point-safe path authority, or Job Object process ownership. Closing those gates requires Win32 handle and process-creation primitives that Node's public filesystem and child-process APIs do not expose as a complete security contract.
The project needs to decide how Windows-native authority is packaged and exposed before implementing the individual controls. Adding isolated PowerShell, icacls, taskkill, or ad hoc native-module calls would leave race windows, duplicate platform policy, and make installation behavior difficult to verify.
Purpose and Benefit
Define one narrow Windows adapter boundary that can:
One adapter keeps Win32 types out of the domain and application layers, gives doctor and real-Windows verification one capability source, and avoids three unrelated native integration mechanisms.
Architecture Recommendation
Use a platform adapter beneath the existing process and filesystem primitives:
The adapter should return typed observations and failures. Provider-specific policy remains in the Ghidra adapter; Win32 mechanics and raw handles remain inside the Windows boundary.
Before selecting an implementation, compare:
The decision must preserve REA's rule that setup does not install compilers, runtimes, or unrelated software. Committed binaries and shell-command approximations are not acceptable substitutes for a verified packaging design.
Desired Outcome
Non-goals
Evidence and References
@morluto commented on GitHub (Jul 16, 2026):
Implementation issues:
@morluto commented on GitHub (Jul 17, 2026):
Research update and proposed decision (2026-07-17).
Recommendation: use one CI-built Windows x64 Node-API addon distributed as an exact-version, platform-specific optional npm package. The package declares Windows/x64 through npm
os/cpumetadata, has no install script, performs no download, and has no node-gyp/source-build fallback. The main package pins the matching optional package version and fails closed with typed capability diagnostics when it is absent (including--omit=optionalinstallations).Why this fits REA:
Proposed ordering:
A proposed ADR is now drafted in the working tree at
docs/adr/0004-windows-native-authority-packaging.md. It keeps #288-#290 unshipped, preserves the limited P0 fallbacks without allowing them to satisfy capability claims, and requires real non-administrator Windows proof.@morluto commented on GitHub (Jul 17, 2026):
The proposed packaging ADR was tightened after a Devin CLI audit and current Node documentation review. The platform-package shape remains viable, but #287 is not decided until the process port specifies a complete asynchronous stdio and lifetime design: an addon that calls CreateProcessW must bridge bounded stdio without private V8/libuv APIs, while a helper adds its own authenticated protocol and ownership lifecycle. The delivery order is now #289 handle authority, then #290 private DACLs, then #288 Job Object launch. #288 may be developed separately but cannot advertise the Windows native authority boundary while executable identity or the runtime token root remains unprotected. The ADR stays Proposed and this issue remains open.
@morluto commented on GitHub (Jul 17, 2026):
The proposed Windows native-authority ADR has been tightened after an independent Devin CLI review. It now requires an application-owned TypeScript port contract and tagged failure taxonomy before native implementation, explicitly blocks pathname reuse after handle admission, requires #287 to choose either protected-copy/revalidation or a digest-admitted helper launch binding for CreateProcessW, and defines the artifact digest as release-generated main-package metadata while limiting its claim to drift detection. It also keeps the process helper versus addon decision open until asynchronous stdio and lifetime behavior are specified, and records delivery order #289 then #290 then #288. The current capability probe now explicitly reports reparse-safe admission unavailable on Windows, and runtime-root documentation no longer implies POSIX mode bits prove Windows privacy. npm run check passes. #287 remains open until the exact exported port schemas and process I/O/lifetime design are accepted.
@morluto commented on GitHub (Jul 17, 2026):
Implemented the provider-neutral, fail-closed TypeScript prerequisite on the current working tree; this does not close #287 or enable any Windows native-authority claim.
Delivered in this slice:
WindowsNativeAuthorityapplication boundary for admitted file/directory capabilities, verified private roots, and Job-owned processes without exposing Win32 DTOs.reparsePolicy: "reject_all"/reparseDisposition: "absent".waitForExitcancels only that wait, not process ownership.native_authorityWindows capability outcome that remains unavailable.Validation on the final tree:
npm run docs:generatenpm run checkgit diff --checknpm run checkpassed typecheck, lint (existing warnings only), formatting, generated-document checks, and the full Vitest suite. Coverage remained above repository thresholds.Remaining before #287 can be accepted:
CreateProcessWcannot launch from the retained admission handle, and falling back to the original untrusted path is not acceptable.The ADR therefore remains Proposed, the host capability remains fail-closed, and #288–#290 remain blocked on this design/packaging prerequisite.
@morluto commented on GitHub (Jul 17, 2026):
Design review update: the initially considered retained share-lock launch binding has been rejected, and ADR-0004 remains Proposed.
The exact-diff review found two substitution gaps:
FILE_SHARE_READblocks later conflicting opens but cannot revoke a writable mapped view established before admission. The mapped view can mutate bytes after hashing even after its write handle closes.lpApplicationNamedoes not bind the Windows Ghidra runtime closure: the command interpreter, batch script, Java executable/runtime, Ghidra JARs/native libraries/configuration, and DLL search inputs can load code after the primary image is admitted.The ADR now requires either (a) a complete protected runtime projection built from admitted handles with constrained DLL/runtime search, or (b) an explicitly narrower same-user threat boundary backed by verified immutable installation ACLs and filesystem identity for the entire closure. The real-Windows verifier must cover pre-existing writable mappings, hard-link alias writes, ordinary/POSIX rename-delete, reparse and DLL-search substitution, and post-admission script/JAR/native/config changes. There is no pathname fallback.
The process design was also tightened:
PROC_THREAD_ATTRIBUTE_HANDLE_LISTandPROC_THREAD_ATTRIBUTE_JOB_LIST;CancelSynchronousIoonly at the cleanup deadline; read handles and accumulators remain owned until their reader threads join.Validation after the corrections:
npm run docs:checkgit diff --checkBoth pass. The optional prebuilt Node-API platform-package shape remains selected, but #287 cannot be accepted until the complete Ghidra/Java launch authority is selected and proven.
@morluto commented on GitHub (Jul 17, 2026):
Resolved the remaining architecture question in ADR-0004 without claiming implementation completion.
The selected binding is a complete protected runtime projection, not share locks or immutable admission of the operator's BYO installation:
(relative path, size, SHA-256)tree digest;OWNER RIGHTSrestriction, while REA retains non-inherited authority/cleanup handles opened before sealing;java.exedirectly asghidra.Ghidra ghidra.app.util.headless.AnalyzeHeadless, eliminatingcmd.exe,analyzeHeadless.bat,launch.bat, andLaunchSupportfrom the runtime closure;This research also exposed a real port gap: the current TypeScript contract accepts a source
WindowsAdmittedFileplus an unsealedWindowsPrivateRootat spawn. The ADR now requires a type-state revision where handle-relative projection is built and read back, sealing returns an opaqueWindowsRuntimeProjectionand projected entry point, and process spawn accepts only that sealed pair. #289 owns projection/readback, #290 sealing/DACL proof, and #288 consumes the sealed result.Independent Devin CLI review agreed with the full-projection,
OWNER RIGHTS, retained-handle, direct-Java, and search-closure design. I rejected its proposed Windows 1809 floor: the Microsoft SDK definesIMAGE_LOAD_NO_REMOTE,NO_LOW_LABEL, andPREFER_SYSTEM32in bits 52–61 of the firstDWORD64; the Windows 10 1703 rule applies to the optional two-element policy array. Runtime probing and fail-closed real-runner proof remain required for the documented Windows 10/Server 2016 floor.Validation:
npm run docs:check, repository formatting, andgit diff --checkpass. ADR-0004 remains Proposed and #287 remains open until the type-state port revision, package loader/artifact verification, and real-Windows proof exist.@morluto commented on GitHub (Jul 17, 2026):
Implemented the provider-neutral TypeScript port revision required by the selected ADR design, while keeping this issue open for the native package and real-Windows proof.
Current tree now commits these boundary properties:
Regression coverage includes foreign authority rejection, post-seal source closure, root closure, in-flight close races, caller mutation after invocation, duplicate/cross-kind tokens, cross-authority token aliasing, and aliased root/job cleanup.
Validation on the final tree:
Remaining acceptance work is still the native Windows implementation and package/runtime proof described by ADR-0004: reparse-safe handle admission/projection, protected DACL construction, direct projected-JDK launch, Job Object ownership, mitigations, packaging/signing, and the adversarial real-Windows verifier.
@morluto commented on GitHub (Jul 17, 2026):
Follow-up package-loader research found a security dependency that the earlier ADR text did not state precisely.
A pre-hash, pathname require, post-hash loader cannot prove which native image executed:
I prototyped and independently reviewed that loader shape, then removed it because presenting it as execution authorization would be unsafe. ADR-0004 now explicitly rejects this construction. The loader remains part of #287, but it must wait for the #289/#290 protected projection and retained authority, reject any pre-existing foreign cache entry, and then establish one process-global loaded identity. npm integrity remains the installation authenticity boundary; digest comparison is drift evidence, not a substitute for binding the bytes that execute.
The sealed provider-neutral port and its tests are unchanged. npm run docs:generate and the full npm run check pass after the ADR correction.
@morluto commented on GitHub (Jul 17, 2026):
Resolved the circular native-addon bootstrap requirement in ADR-0004 and moved the ADR to Accepted. This is an architecture decision, not a native-capability claim, and #287 remains open for implementation and package proof.
The previous text was unimplementable: it required the Windows addon to project itself through #289/#290 before first load, but only the unloaded addon could perform the needed handle-relative Win32 operations.
The accepted boundary is now explicit:
The limitation is equally explicit: a hash/path/load handshake cannot resist an already-running process under the same Windows user that can race package replacement, inject into REA, or preload an alias outside the exact observable cache entry. REA does not claim that stronger bootstrap boundary. A future claim against that attacker requires a signed/protected launcher or native main executable and is outside #287–#290.
Package-verifier acceptance now requires mismatch-before-evaluation, zero provider/target activity on failure, idempotent same-tuple loading, rejection of another observable path/identity, omitted-package fail-closed behavior, and sealed projection before launch. It also keeps npm authenticity distinct from the release digest's drift-detection role.
Research used current Node 22 Node-API/addon loading documentation plus DeepWiki comparisons of sharp and esbuild's platform-specific optional-package patterns. REA adopts exact-version os/cpu selection while rejecting source builds, install scripts, downloads, or fallback compilation.
Independent follow-up review: clean. Formatting and git diff --check pass.
Remaining #287 work:
@morluto commented on GitHub (Jul 17, 2026):
Implemented and validated the fail-closed Windows native-authority package loader slice on the current working tree.
Delivered in this slice:
Validation: npm run docs:generate && npm run check passed (160 test files, 1,089 tests; 82.03% statement coverage). The independent exact-diff follow-up review was clean within the ADR’s accepted bootstrap threat boundary.
This is intentionally dormant: the release artifact commitment remains null, so the loader fails before package resolution. #287 remains open for the exact optional platform package, native addon implementation, release build/publish and digest-injection integration, packed-install verification, and real non-administrator Windows proof. No capability is advertised by this slice.
@morluto commented on GitHub (Jul 18, 2026):
The accepted provider-neutral boundary and dormant package loader are now proposed in #305. The loader validates exact package metadata, platform/Node-API/manifest identity, canonical path, digest, export shape, concurrency, and pinned failure; malformed native process observations are runtime-parsed and fail closed.
artifactSha256remainsnull, so no native capability is advertised. The issue remains open for the native package, release integration, and real non-admin Windows proof required by #288–#290.@morluto commented on GitHub (Jul 20, 2026):
Split into focused child issues:
These replace the broad remaining scope in this issue. Closing this parent can happen once all children are closed.
@tony-sebastian commented on GitHub (Oct 5, 2026):
Hi — I've been working on exactly this boundary and would like to contribute the implementation upstream. Happy to take it on if you'd like to assign it.
A bit of context: I hunt bugs on Android/Windows apps, and when a target ships a native component there was no way to inspect it through REA on Windows, because the Ghidra provider is gated off (the contradiction in #527). So I implemented the missing controls and verified them end to end.
What I built (draft branch, verified on Windows x64 + Ghidra 12.1.4 + JDK 21):
bridge/windows/ReaWindowsAuthority.cs— a native authority helper shipped as C# source, following this project's bridge precedent (Python for Hopper, Java for Ghidra, Swift for macOS). It compiles on first use with the Windows system compiler (csc.exe), caches under~/.rea/cache, and is pinned to the source SHA-256 — no binary in the repo, no new toolchain required.REA_WINAUTH_HELPERaccepts a prebuilt binary for CI/enterprise pinning.spawn— kill-on-close Job Object, child assigned between CREATE_SUSPENDED and ResumeThread; the helper holds the only job handle, so terminating it terminates the whole tree (addresses #288).dacl create|verify— protected current-user-only DACL verified by security-descriptor readback (addresses #290).pathcheck— handle-based reparse-safe admission, with a positive junction-rejection test (addresses #289).capabilities— self-test emittingnative-authorityproofs; the adapter fails closed unless all three controls prove in-process (resolves the gate contradiction in #527).PrivateRuntimeRootuses the verified DACL, and the launcher DACL-protects runtime dirs and admits analyzeHeadless/bridge/target paths pre-spawn.GHIDRA_HEADLESS_JAVA_OPTIONSform breaksanalyzeHeadless.bat's parser ("The syntax of the command is incorrect"); the unquoted form is the only batch-safe spelling.Verification: differential against published
rea-agents@3.2.1— same command, same environment, same PE target: the published package rejects withunsupported_host, my branch returns a real Ghidra 12.1.4 evidence overview. 120/120 tests, including win32-gated integration tests for job-spawn routing and private runtime roots.Packaging questions for maintainers (the core of #287): I chose compile-on-first-use to avoid committing binaries; if you prefer a signed release artifact or a different trust anchor, the TS side accepts any binary at the
REA_WINAUTH_HELPERoverride and can land independently.I'd like to work on this upstream — happy to split or rework the branch however you prefer (TS-side only, helper as a release artifact, etc.) and will open a PR from a fork on your go-ahead.
@N0zoM1z0 commented on GitHub (Oct 5, 2026):
Thanks for the detailed write-up — the real-Windows validation and adversarial test cases are especially useful.
The remaining work under #287 is now split into #318 and #319, and #288–#290 are already assigned. If you're happy to align with ADR-0004, #318 would be the best place to start. A focused PR there, carrying over the relevant Windows proof/test cases you've already built, would be very welcome.