You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Active benchmark PR #322 now fails closed on C0/C1 controls, U+2028/U+2029, and the exact Unicode Bidi_Control set for ControlledBenchmarkRunContext. That closes the reviewed line/paragraph and directional-rendering cases, but it is not yet a complete invisible-format profile.
Fresh source inspection of #322 exact a4c8ceaf67a075ef483334802aacfc54cf502068 shows validate_run_context_field admits any scalar that is not char::is_control, U+2028/U+2029, or one of the 12 bidi controls. Other Default_Ignorable_Code_Point values therefore remain admissible, including classes represented by zero-width/default-ignorable formatters and variation selectors. These benchmark-owned strings are later rendered in logs/reports and bound into evidence identity, so a byte-distinct value that is visually absent or presentation-dependent can create review/audit ambiguity.
This is narrower than general Unicode text policy. It applies only to OriginWeave-owned benchmark reproducibility identifiers. Browser-issued protocol addresses such as WebDriver BiDi browser.UserContext remain lossless external protocol identity and must not inherit this grammar.
Standards basis
Use the exact adopted Unicode profile, not a hand-maintained folklore list:
Unicode Standard Annex feat(evidence): add purpose-bound sensitive access receipts #31, Unicode Identifiers and Syntax, Unicode 18.0.0, Revision 45, 2026-09-01, §7.3 Default-Ignorable Exclusion Profile: exclude code points with Default_Ignorable_Code_Point from identifier Start/Continue; the annex notes that these characters often have no visible effect and can enable spoofing.
Unicode Technical Standard test(mv3): require repeated compatibility evidence #39, Unicode Security Mechanisms, Unicode 18.0.0, Revision 34, 2026-08-27: the General Security Profile classifies Identifier_Type=Default_Ignorable as Restricted. ZWJ/ZWNJ are explicitly Default_Ignorable/Restricted unless a documented tailored context is adopted.
If a reusable Unicode evidence-identity profile is warranted, introduce it only as a small versioned Shared Kernel/value policy with explicit consumers and tests. Otherwise keep the benchmark profile local and versioned.
RED → repair acceptance
Add test-first hostile cases proving the current exact predecessor admits representative default-ignorables outside fix(core): reject bidi controls in benchmark evidence identity #322's existing set. At minimum exercise U+200B ZERO WIDTH SPACE, U+200C ZWNJ, U+200D ZWJ, U+2060 WORD JOINER, U+FEFF ZERO WIDTH NO-BREAK SPACE/BOM, and representative variation-selector behavior such as U+FE0F.
Do not stop at those examples. The production decision must be tied to an exact Unicode-versioned property/profile so later Unicode property changes are reviewable rather than silently changing the accepted grammar.
Preserve visible Korean/Japanese/Chinese/Vietnamese/Spanish/German/French text and ordinary Arabic/Hebrew text that does not require an excluded formatting scalar. Do not widen this repair into ASCII-only admission.
Keep byte identity semantics. Do not silently add NFC/NFKC/case folding/confusable skeletonization; those are separate compatibility/security decisions with their own migration requirements.
Validation must run for both expected and observed contexts before equality can influence benchmark evidence.
Public diagnostics/rustdoc, doctoring, TRACEABILITY, CHANGELOG, and the product-technical gap baseline must name the exact adopted Unicode version/profile and reversal/migration path.
Owned production docstring/rustdoc, test and edge-case coverage remain complete; function/line/region/branch coverage remains 100%.
Exact-head repository contracts, rustfmt, locked tests, strict Clippy, rustdoc/API docs, security/review workflows, and applicable real benchmark/browser evidence must execute. Skipped, queued-only, predecessor, status-only, or synthetic evidence is non-passing.
Non-goals
normalizing or restricting browser-issued WebDriver BiDi/Chromium identifiers;
claiming complete Unicode spoofing resistance from default-ignorable exclusion alone;
introducing confusable/mixed-script restrictions without a separate threat/compatibility decision;
Gap
Active benchmark PR #322 now fails closed on C0/C1 controls,
U+2028/U+2029, and the exact UnicodeBidi_Controlset forControlledBenchmarkRunContext. That closes the reviewed line/paragraph and directional-rendering cases, but it is not yet a complete invisible-format profile.Fresh source inspection of #322 exact
a4c8ceaf67a075ef483334802aacfc54cf502068showsvalidate_run_context_fieldadmits any scalar that is notchar::is_control,U+2028/U+2029, or one of the 12 bidi controls. OtherDefault_Ignorable_Code_Pointvalues therefore remain admissible, including classes represented by zero-width/default-ignorable formatters and variation selectors. These benchmark-owned strings are later rendered in logs/reports and bound into evidence identity, so a byte-distinct value that is visually absent or presentation-dependent can create review/audit ambiguity.This is narrower than general Unicode text policy. It applies only to OriginWeave-owned benchmark reproducibility identifiers. Browser-issued protocol addresses such as WebDriver BiDi
browser.UserContextremain lossless external protocol identity and must not inherit this grammar.Standards basis
Use the exact adopted Unicode profile, not a hand-maintained folklore list:
Default_Ignorable_Code_Pointfrom identifier Start/Continue; the annex notes that these characters often have no visible effect and can enable spoofing.Identifier_Type=Default_Ignorableas Restricted. ZWJ/ZWNJ are explicitly Default_Ignorable/Restricted unless a documented tailored context is adopted.References:
Ownership and compatibility boundary
originweave-coredepend on an unrelated evidence aggregate merely to reuse a helper.RED → repair acceptance
U+200BZERO WIDTH SPACE,U+200CZWNJ,U+200DZWJ,U+2060WORD JOINER,U+FEFFZERO WIDTH NO-BREAK SPACE/BOM, and representative variation-selector behavior such asU+FE0F.Default_Ignorable_Code_Pointor uses an explicit tailored exception profile. If any exception is permitted, record the exact scalar/sequence context and security rationale. Emoji/join-control usability guidance in UAX feat(evidence): add purpose-bound sensitive access receipts #31 / UTS test(mv3): require repeated compatibility evidence #39 is not an implicit exception.Non-goals