mirror of
https://github.com/morluto/rea.git
synced 2026-11-05 06:45:22 +00:00
[GH-ISSUE #7633] [Bug] VitePress-rendered artifact Markdown substitutes an emoji for a literal entry name #4558
Closed
opened 2026-10-31 00:50:46 +00:00 by bsakaguchi
·
1 comment
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#4558
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 @coygeek on GitHub (Oct 27, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/7633
Before submitting
Area
CLI
Observed behavior
For a ZIP named
:)with an entry also named:),node scripts/rea.mjs inspect-artifact "$WORK/:)" --format mdsucceeds. Rendering its output with the checkout's locked VitePress renderer displays😃as the artifact name undersubject.name. The nested inventory JSON table cell also displays"logical_path":"😃"for the entry.The emitted Markdown and paired JSON retain
:). Substitution first occurs in the renderer, whose emoji plugin is enabled by default. A second renderer instance with empty emoji definitions/shortcuts preserves:)in both positions. Two independently executed CLI/renderer comparisons reproduced the substitution.Reproduction
node. Run the following from its root. It generates the ZIP inline, isolates HOME/XDG paths, compares the rendered output, and deletes its temporary files on exit:😃; the emoji-disabled control retains:). All CLI commands exit 0 with empty stderr. The assertion script exits 0 after confirming those results.Expected behavior
The rendered name and entry path should remain
:)when CLI output is rendered with the same locked VitePress configuration that the project's existing literal-display boundary tests use. Formatting should identify the original artifact and archive entry.The CLI documentation expressly promises literal source-text display in Markdown table cells, including nested JSON field names and values. Its description of escaping as a presentation change also says retained Evidence and JSON keep the original values; this does not reduce the display contract to raw Markdown validity. The scalar/paragraph expectation additionally follows the formatter's literal-data comment and existing rendered scalar tests. Exact locators appear below.
Impact and scope
P2: an artifact and entry named
:)appear with a different identifier in the successful rendered report. This is a bounded display-fidelity failure with directly verified workarounds: read the raw Markdown, use--format json, or disable emoji substitution in the renderer.The verified scope is the
subject.nameparagraph and an inventory JSON table cell rendered by locked VitePress 1.6.4 with{ linkify: false }and default emoji support. Ordinary standalone:)text is also transformed by that renderer; REA does not cause an unusual emoji-parser behavior. The defect is that the produced literal-data representation permits the transformation under the renderer REA already uses to check fidelity.No source artifact modification or stored Evidence loss was established. This report makes no claim about GFM, arbitrary renderer plugins, other emoticons, headers, browser visual layout, other platforms, or frequency in real artifacts.
REA version
Exact stdout from
node scripts/rea.mjs --versionwas6.8.0followed by one newline; exit 0. Baseline source commit:65f1c447344a423fa2785847dbcea1e9a9e2454a.Runtime and platform
Node.js v24.22.1; macOS 27.0.1, arm64; checkout-locked VitePress 1.6.4 and parse5 8.0.1. No GUI or external analysis engine was launched.
Target and artifact context
An inline-generated 104-byte ZIP with one regular entry. The artifact basename and entry name are both the two literal characters
:); its entry contents arehi.Interface
CLI
Earliest failure stage
Transport or result projection
Relevant output or evidence
The independent CLI/renderer replay printed:
These outputs distinguish the original data, default rendered display, and emoji-disabled control. The inline assertions also confirm that raw Markdown contains the literal section body
:).Expected-source locators at the baseline:
docs/cli.md:965-973: literal source text in Markdown table headers/cells; nested JSON retains field names and values; retained Evidence and JSON preserve original values.tests/boundary/cli/markdownLiteralCells.test.ts:80-97: public CLI Markdown is rendered withcreateMarkdownRenderer(root, { linkify: false }); rendered cell texts must equal the original values.tests/boundary/cli/markdownLiteralCells.test.ts:108-157: rendered scalar and heading literal-data checks.src/cli/cliOutputFormatter.ts:69: heading and paragraph facts are literal data.Failure/provenance locators inspected separately from the executed CLI comparison:
src/cli/cliOutputFormatter.ts:61-77: shared table/text escaping protects other syntax but leaves:)available to the renderer.docs/.vitepress/config.ts: no Markdown or emoji override. The inspected docs and boundary tests do not state that emoji substitution is disabled.node_modules/vitepress/dist/node/chunk-D3CUZ4fa.js:35715-35743: the locked renderer installs the emoji plugin by default. Both tested default renderings use that behavior; the control explicitly removes emoji definitions and shortcuts.Analysis or suspected cause
Source-derived explanation: the formatter emits the value as ordinary inline text, including inside its nested JSON cell. VitePress then interprets
:)as an emoji shortcut. The emoji-disabled control preserves both positions, identifying that renderer extension as the transformation boundary. The existing escaping contract and tests cover other inline syntax but omit this input.A restoration check should compare rendered paragraph text and the inventory entry path to the JSON/source
:)under the existing default renderer oracle. Passing JSON alone or merely emitting valid Markdown would not establish that restoration.Additional context
Duplicate searches covered open and closed issues, issue comments, and open/closed/merged PRs for Markdown, literal display, emoji, emoticon, shortcode and substitution terms.
Related reports have different closure checks: #7325 concerns brace-delimited provider cells disappearing; #7440 concerns parser-error pipes; #7432 and merged #7506 concern table edge spaces; #7625 concerns paragraph trailing spaces; #7592 and #7593 concern surrogate-byte and NUL-rendering substitutions respectively. Closed #6755 repairs table pipes, and closed #5530 with merged #5814 repairs token windows. This reproduction uses no token window.
Merged #7073 established literal inline table handling and the VitePress comparison, while merged #6932 handles HTML/entity text. Neither claims an emoticon fix. No regression of those specific fixes is alleged. First affected release and last known good release are unknown; current main was not separately executed.
Triage assessment
@coygeek commented on GitHub (Oct 31, 2026):
I checked this against latest main. This appears resolved. The problem was that the CLI Markdown formatter emitted a literal
:)artifact/entry name as ordinary inline text, so the locked VitePress renderer's default emoji plugin substituted😃for it in the rendered report — both in the paragraph undersubject.nameand in the nested inventory JSON table cell showing"logical_path":"😃", even though the raw Markdown and JSON correctly retained:). PR #7938 (merge commite124bdfc5, merged into main) fixes this at the shared formatter boundary insrc/cli/cliOutputFormatter.ts:escapeTableCellnow encodes:as:, so the emitted Markdown no longer presents the literal:)emoji-shortcut sequence to the renderer, while the rendered text still reads as:). Because paragraph facts go throughescapeMarkdownText, which delegates toescapeTableCell, the same encoding covers both thesubject.nameparagraph and the inventory JSON table cell. The PR's regression tests confirm this under the locked VitePress renderer with{ linkify: false }, asserting a scalar":)"renders as literal paragraph text and that rendered table cells contain":)"and the nested JSON. I verified the merge commit is an ancestor of main, so this fix is present on the default branch. Closing as resolved.