[GH-ISSUE #7353] [Bug] Imported IL2CPP metadata views return impossible declaring-type relationships #4374

Closed
opened 2026-10-31 00:49:18 +00:00 by bsakaguchi · 0 comments
Owner

Originally created by @coygeek on GitHub (Oct 27, 2026).
Original GitHub issue: https://github.com/morluto/rea/issues/7353

Before submitting

  • I searched the open and closed issues for a related report.
  • I removed credentials, tokens, private paths, and sensitive target data.

Area

Evidence, artifacts, or reconstruction

Observed behavior

The built CLI accepts synthetic, digest-consistent inspect_il2cpp_metadata Evidence whose declaring_type identifies the row itself, forms a two-type cycle, or names type 999 in a two-type collection. A method naming type 999 also passes; a declaring_types: [999] query returns that method with exit 0. These relationships appear in ordinary successful view Evidence without a diagnostic identifying the invalid owner.

Valid nesting, an absent owner (-1), and historical records omitting newer collections succeed. Invalid field and parameter owners are already rejected, and omitting the required types collection is rejected. All eleven cases below ran successfully as a reproduction; success here means observing the listed current behavior, not restoration.

Reproduction

Use the stated baseline with locked dependencies and its compiled runtime already available, and place the repository-pinned Node.js on PATH. Run this complete shell snippet from the source checkout. It creates only generated Evidence/request/output files in a new temporary directory and invokes the public CLI sequentially. No metadata artifact is opened and no target code executes. The snippet was replayed once exactly as shown; its outcomes matched the independent initial probe.

set -eu
repo="$PWD"
work="$(mktemp -d)"
node --input-type=module - "$repo" "$work" <<'JS'
import { writeFileSync, mkdirSync, readFileSync } from 'node:fs';
import { join, dirname } from 'node:path';
import { pathToFileURL } from 'node:url';
import { spawnSync } from 'node:child_process';
const [repo, work] = process.argv.slice(2);
const { createEvidence, parseEvidence } = await import(pathToFileURL(join(repo,'dist/domain/evidence.js')));
const { IL2CPP_METADATA_SECTION_NAMES } = await import(pathToFileURL(join(repo,'dist/domain/il2cpp/il2cppMetadata.js')));
for (const dir of ['home','config','data','cache','state','tmp']) mkdirSync(join(work,dir),{recursive:true});
const env = {PATH:dirname(process.execPath)+':/usr/bin:/bin',HOME:join(work,'home'),XDG_CONFIG_HOME:join(work,'config'),XDG_DATA_HOME:join(work,'data'),XDG_CACHE_HOME:join(work,'cache'),XDG_STATE_HOME:join(work,'state'),TMPDIR:join(work,'tmp'),REA_LOG_LEVEL:'silent'};
const target={path:'/artifacts/global-metadata.dat',sha256:'a'.repeat(64),format:'file'};
const provider={id:'il2cpp-metadata',name:'REA IL2CPP global-metadata reader',version:'1'};
const type=(name,declaring_type=-1)=>({name,namespace:'',method_start:-1,method_count:0,nested_type_start:-1,nested_type_count:0,declaring_type});
const base=()=>({artifact:{path:target.path,sha256:target.sha256,bytes:1024},magic:0xfab11baf,metadata_version:29,index_widths:{type_definition:4,generic_container:4,parameter:4,type:4,type_width_source:'fixed-width-version'},sections:IL2CPP_METADATA_SECTION_NAMES.map(name=>({name,offset:256,size:0,count:null})),images:[{name:'Fixture.dll',type_start:0,type_count:2}],types:[{...type('Outer'),method_start:0,method_count:1,nested_type_start:0,nested_type_count:1},type('Inner',0)],methods:[{name:'Run',declaring_type:0}],fields:[],properties:[],events:[],parameters:[],string_literals:[],binary:null,method_addresses:[],return_types:[],field_types:[],parameter_types:[],generic_method_instances:null,limitations:[]});
const variants=[
 ['valid-nested',r=>{},'types'],
 ['valid-method',r=>{},'methods'],
 ['valid-absent',r=>{r.types[0].nested_type_count=0;r.types[0].nested_type_start=-1;r.types[1].declaring_type=-1;r.methods[0].declaring_type=-1;r.types[0].method_count=0;r.types[0].method_start=-1;},'methods'],
 ['historical-nested',r=>{for(const k of ['fields','properties','events','parameters','string_literals','binary','method_addresses','return_types','field_types','parameter_types','generic_method_instances'])delete r[k];},'types'],
 ['self-owner',r=>{r.types[0].declaring_type=0;r.types[0].nested_type_count=2;},'types'],
 ['cycle',r=>{r.types[0].declaring_type=1;r.types[1].nested_type_start=1;r.types[1].nested_type_count=1;},'types'],
 ['type-owner',r=>{r.types[1].declaring_type=999;},'types'],
 ['method-owner',r=>{r.methods[0].declaring_type=999;},'methods'],
 ['field-reject-control',r=>{r.fields=[{name:'slot',declaring_type:999}];},'fields'],
 ['parameter-reject-control',r=>{r.parameters=[{name:'value',method:999}];},'parameters'],
 ['incomplete-reject-control',r=>{delete r.types;},'methods']
];
const summaries=[];
for(const [name,edit,collection] of variants){
 const report=base();edit(report);
 let at=256; const sizes={strings:32,typeDefinitions:(report.types?.length??0)*88,methods:report.methods.length*32,images:report.images.length*40,nestedTypes:(report.types??[]).reduce((n,t)=>n+t.nested_type_count,0)*4,fields:(report.fields?.length??0)*12,parameters:(report.parameters?.length??0)*12};
 report.sections=report.sections.map(section=>{const size=sizes[section.name]??0;const row={...section,offset:at,size};at+=size;return row;});
 const record=createEvidence(target,provider,{operation:'inspect_il2cpp_metadata',parameters:{path:target.path},result:report,confidence:'observed',limitations:[],locations:[{kind:'artifact-path',path:target.path}]});
 parseEvidence(record);
 const view={kind:'il2cpp-metadata',collection,...(name==='method-owner'?{declaring_types:[999]}:{})};
 const input=join(work,`${name}.json`);writeFileSync(input,JSON.stringify({source:{kind:'inline',evidence:record},view}));
 const out=spawnSync(process.execPath,[join(repo,'scripts/rea.mjs'),'inspect-analysis-view',input,'--json'],{env,cwd:work,encoding:'utf8',timeout:30000,maxBuffer:1024*1024});
 writeFileSync(join(work,`${name}.stdout`),out.stdout??'');writeFileSync(join(work,`${name}.stderr`),out.stderr??'');
 const doc=JSON.parse(out.stdout);
 const summary={name,authenticated:true,exit:out.status,...(doc.error?{code:doc.code,issues:doc.details?.issues}:{items:doc.normalized_result.items,coverage:doc.normalized_result.coverage})};
 summaries.push(summary);console.log(JSON.stringify(summary));
}
writeFileSync(join(work,'results.json'),JSON.stringify(summaries,null,2));
writeFileSync(join(work,'runtime.json'),JSON.stringify({node:process.version,platform:process.platform,arch:process.arch},null,2));
JS

Expected behavior

A successful IL2CPP metadata view should preserve usable declaring-type relationships: each nonnegative owner identifies a type position in the same retained inventory, and an enclosing-type chain terminates at a top-level type. An impossible relationship in imported Evidence should produce a typed invalid-input result instead of an ordinary successful metadata page. Valid nested relationships, absent references and historical omissions must remain usable.

The expectation follows the documented positional metadata-index contract and the semantic meaning of an enclosing type. The producer's explicit bounds/self-nesting/cycle refusals establish those format invariants; the view independently parses imported payloads as the same owning metadata model. Existing member-owner checks are a control supporting that import behavior, not the sole basis for extending producer rules to imports.

Impact and scope

P2: callers can receive an unresolvable or impossible type relationship as retained metadata and can select a method under a type that does not exist. The demonstrated exposure is deliberately inconsistent imported Evidence through the CLI. A normal producer cannot emit these relationships because its decoder rejects them. No crash, target modification, security boundary crossing, real-game incidence, or downstream consumer failure was established. NOT_ENOUGH_INFO: naturally occurring affected records and their frequency are unknown; no practical recovery workflow was tested.

REA version

rea-agents 6.8.0, source revision ace4dbf36e8c8f36a0e192aff9a11484ed428358.

Runtime and platform

Node.js v24.22.1; macOS 27.0.1; arm64. The parent prepared the compiled runtime; the verifier used it without rebuilding or installing software. No Unity, native binary, Hopper, Ghidra, live service, or target application was used.

Target and artifact context

Generated version-29 IL2CPP metadata Evidence with two positional type definitions, one method, one image, a synthetic artifact identity, and no binary link. Section rows use ordered, nonoverlapping extents within the declared artifact size. The artifact path and digest are fixture labels; no corresponding artifact file is required or accessed. Every variant gets its own freshly computed Evidence identifier and passes Evidence parsing before the CLI call.

Interface

CLI

Earliest failure stage

Request parsing or validation

Relevant output or evidence

  • Expected source: docs/il2cpp-metadata.md:116 documents historical omission; docs/il2cpp-metadata.md:194 defines collection position as metadata identity and declaring-type references as positional. src/domain/il2cpp/il2cppMetadata.ts:147 and :161 define type/method row identity and owner semantics. src/il2cpp/Il2cppMetadataFile.ts:434, :477, and :627 reject self-nesting, cycles, and out-of-range method owners. Failure observations use operation observe_il2cpp_metadata_source with no complete inventory (src/il2cpp/Il2cppMetadataProvider.ts:294); they do not establish a supported truncated positional type table.
  • Failure source: src/domain/analysisView/il2cppMetadataView.ts:286 reads every imported metadata parent with il2cppMetadataParentSchema; src/domain/il2cpp/il2cppMetadata.ts:403 validates facts and bounds member/parameter owners but lacks corresponding type/method owner and enclosing-chain checks. The filter at src/domain/analysisView/il2cppMetadataView.ts:493 matches the retained owner directly. The public CLI replay returned the rows summarized below after Evidence authentication and artifact-identity checks.
  • Evidence provenance: observed through the built public CLI using generated, digest-consistent records; producer refusal and incomplete-source semantics are source-inspected and were not runtime-tested.
  • Local verification: reproduced. Eleven sequential cases in an initial probe, a repeat with meaningful section extents, and the exact public snippet gave the same relevant statuses and owner values. The final public snippet ran once.
  • Reproduction completeness: complete for the generated import/view cases. Real-producer incidence and MCP transport behavior were not tested.
case                        exit  result
valid-nested                   0  Outer owner -1; Inner owner 0
valid-method                   0  Run owner 0
valid-absent                   0  Run owner -1
historical-nested              0  Outer owner -1; Inner owner 0
self-owner                     0  Outer owner 0
cycle                          0  Outer owner 1; Inner owner 0
type-owner                     0  Inner owner 999
method-owner                   0  Run owner 999, selected by declaring_types [999]
field-reject-control           1  invalid_request; invalid_value at fields[0].declaring_type
parameter-reject-control       1  invalid_request; invalid_value at parameters[0].method
incomplete-reject-control      1  invalid_request; missing_argument at types

The field and parameter messages are respectively “Member owner is outside the retained type definitions.” and “Parameter owner is outside the retained method definitions.” Invalid owner acceptance is independent of selected page size: the successful pages show the complete two-type/one-method collections, not a truncated source whose missing rows could contain type 999.

Additional context

Restoration check (proposed, unexecuted): rerun the snippet. The four impossible-owner cases should cease returning normal successful metadata pages and report a typed invalid relationship. The four valid/historical controls should retain their successful facts, and the three existing rejection controls should remain rejected. No fix was attempted.

The supplied all-state issue index and 7,168 archived full issue/PR bodies were searched. Closed completed reports #5751, #5988, and #4709 concern respectively raw generic-container extents, managed identity-error classification, and Electron DOM parents. Their contracts and restoration checks differ. Closed IL2CPP feature PR #5326 describes ownership validation and historical omission, but does not report or resolve the type/method import behavior reproduced here. No exact duplicate was found in that supplied snapshot or the current upstream issue/PR search before submission.

NOT_ENOUGH_INFO: the first affected release and whether a released producer ever saved such a record are unknown. This report makes no security or resource-exhaustion claim.

Triage assessment

  • Impact level: P2
  • Assessment status: supported
  • Impact basis: The public CLI returns an impossible or unresolvable metadata owner and matches a nonexistent declaring type in generated imported Evidence. This is bounded evidence correctness; no core workflow outage, data loss, or downstream failure was observed.
  • Workaround status: unverified
  • Workaround basis: Manual validation or reinspection may detect or avoid these records, but no practical recovery preserving a caller's required facts was demonstrated, and availability of the original metadata is unknown.
Originally created by @coygeek on GitHub (Oct 27, 2026). Original GitHub issue: https://github.com/morluto/rea/issues/7353 ## Before submitting - [x] I searched the open and closed issues for a related report. - [x] I removed credentials, tokens, private paths, and sensitive target data. ## Area Evidence, artifacts, or reconstruction ## Observed behavior The built CLI accepts synthetic, digest-consistent `inspect_il2cpp_metadata` Evidence whose `declaring_type` identifies the row itself, forms a two-type cycle, or names type 999 in a two-type collection. A method naming type 999 also passes; a `declaring_types: [999]` query returns that method with exit 0. These relationships appear in ordinary successful view Evidence without a diagnostic identifying the invalid owner. Valid nesting, an absent owner (`-1`), and historical records omitting newer collections succeed. Invalid field and parameter owners are already rejected, and omitting the required `types` collection is rejected. All eleven cases below ran successfully as a reproduction; success here means observing the listed current behavior, not restoration. ## Reproduction Use the stated baseline with locked dependencies and its compiled runtime already available, and place the repository-pinned Node.js on PATH. Run this complete shell snippet from the source checkout. It creates only generated Evidence/request/output files in a new temporary directory and invokes the public CLI sequentially. No metadata artifact is opened and no target code executes. The snippet was replayed once exactly as shown; its outcomes matched the independent initial probe. ```sh set -eu repo="$PWD" work="$(mktemp -d)" node --input-type=module - "$repo" "$work" <<'JS' import { writeFileSync, mkdirSync, readFileSync } from 'node:fs'; import { join, dirname } from 'node:path'; import { pathToFileURL } from 'node:url'; import { spawnSync } from 'node:child_process'; const [repo, work] = process.argv.slice(2); const { createEvidence, parseEvidence } = await import(pathToFileURL(join(repo,'dist/domain/evidence.js'))); const { IL2CPP_METADATA_SECTION_NAMES } = await import(pathToFileURL(join(repo,'dist/domain/il2cpp/il2cppMetadata.js'))); for (const dir of ['home','config','data','cache','state','tmp']) mkdirSync(join(work,dir),{recursive:true}); const env = {PATH:dirname(process.execPath)+':/usr/bin:/bin',HOME:join(work,'home'),XDG_CONFIG_HOME:join(work,'config'),XDG_DATA_HOME:join(work,'data'),XDG_CACHE_HOME:join(work,'cache'),XDG_STATE_HOME:join(work,'state'),TMPDIR:join(work,'tmp'),REA_LOG_LEVEL:'silent'}; const target={path:'/artifacts/global-metadata.dat',sha256:'a'.repeat(64),format:'file'}; const provider={id:'il2cpp-metadata',name:'REA IL2CPP global-metadata reader',version:'1'}; const type=(name,declaring_type=-1)=>({name,namespace:'',method_start:-1,method_count:0,nested_type_start:-1,nested_type_count:0,declaring_type}); const base=()=>({artifact:{path:target.path,sha256:target.sha256,bytes:1024},magic:0xfab11baf,metadata_version:29,index_widths:{type_definition:4,generic_container:4,parameter:4,type:4,type_width_source:'fixed-width-version'},sections:IL2CPP_METADATA_SECTION_NAMES.map(name=>({name,offset:256,size:0,count:null})),images:[{name:'Fixture.dll',type_start:0,type_count:2}],types:[{...type('Outer'),method_start:0,method_count:1,nested_type_start:0,nested_type_count:1},type('Inner',0)],methods:[{name:'Run',declaring_type:0}],fields:[],properties:[],events:[],parameters:[],string_literals:[],binary:null,method_addresses:[],return_types:[],field_types:[],parameter_types:[],generic_method_instances:null,limitations:[]}); const variants=[ ['valid-nested',r=>{},'types'], ['valid-method',r=>{},'methods'], ['valid-absent',r=>{r.types[0].nested_type_count=0;r.types[0].nested_type_start=-1;r.types[1].declaring_type=-1;r.methods[0].declaring_type=-1;r.types[0].method_count=0;r.types[0].method_start=-1;},'methods'], ['historical-nested',r=>{for(const k of ['fields','properties','events','parameters','string_literals','binary','method_addresses','return_types','field_types','parameter_types','generic_method_instances'])delete r[k];},'types'], ['self-owner',r=>{r.types[0].declaring_type=0;r.types[0].nested_type_count=2;},'types'], ['cycle',r=>{r.types[0].declaring_type=1;r.types[1].nested_type_start=1;r.types[1].nested_type_count=1;},'types'], ['type-owner',r=>{r.types[1].declaring_type=999;},'types'], ['method-owner',r=>{r.methods[0].declaring_type=999;},'methods'], ['field-reject-control',r=>{r.fields=[{name:'slot',declaring_type:999}];},'fields'], ['parameter-reject-control',r=>{r.parameters=[{name:'value',method:999}];},'parameters'], ['incomplete-reject-control',r=>{delete r.types;},'methods'] ]; const summaries=[]; for(const [name,edit,collection] of variants){ const report=base();edit(report); let at=256; const sizes={strings:32,typeDefinitions:(report.types?.length??0)*88,methods:report.methods.length*32,images:report.images.length*40,nestedTypes:(report.types??[]).reduce((n,t)=>n+t.nested_type_count,0)*4,fields:(report.fields?.length??0)*12,parameters:(report.parameters?.length??0)*12}; report.sections=report.sections.map(section=>{const size=sizes[section.name]??0;const row={...section,offset:at,size};at+=size;return row;}); const record=createEvidence(target,provider,{operation:'inspect_il2cpp_metadata',parameters:{path:target.path},result:report,confidence:'observed',limitations:[],locations:[{kind:'artifact-path',path:target.path}]}); parseEvidence(record); const view={kind:'il2cpp-metadata',collection,...(name==='method-owner'?{declaring_types:[999]}:{})}; const input=join(work,`${name}.json`);writeFileSync(input,JSON.stringify({source:{kind:'inline',evidence:record},view})); const out=spawnSync(process.execPath,[join(repo,'scripts/rea.mjs'),'inspect-analysis-view',input,'--json'],{env,cwd:work,encoding:'utf8',timeout:30000,maxBuffer:1024*1024}); writeFileSync(join(work,`${name}.stdout`),out.stdout??'');writeFileSync(join(work,`${name}.stderr`),out.stderr??''); const doc=JSON.parse(out.stdout); const summary={name,authenticated:true,exit:out.status,...(doc.error?{code:doc.code,issues:doc.details?.issues}:{items:doc.normalized_result.items,coverage:doc.normalized_result.coverage})}; summaries.push(summary);console.log(JSON.stringify(summary)); } writeFileSync(join(work,'results.json'),JSON.stringify(summaries,null,2)); writeFileSync(join(work,'runtime.json'),JSON.stringify({node:process.version,platform:process.platform,arch:process.arch},null,2)); JS ``` ## Expected behavior A successful IL2CPP metadata view should preserve usable declaring-type relationships: each nonnegative owner identifies a type position in the same retained inventory, and an enclosing-type chain terminates at a top-level type. An impossible relationship in imported Evidence should produce a typed invalid-input result instead of an ordinary successful metadata page. Valid nested relationships, absent references and historical omissions must remain usable. The expectation follows the documented positional metadata-index contract and the semantic meaning of an enclosing type. The producer's explicit bounds/self-nesting/cycle refusals establish those format invariants; the view independently parses imported payloads as the same owning metadata model. Existing member-owner checks are a control supporting that import behavior, not the sole basis for extending producer rules to imports. ## Impact and scope P2: callers can receive an unresolvable or impossible type relationship as retained metadata and can select a method under a type that does not exist. The demonstrated exposure is deliberately inconsistent imported Evidence through the CLI. A normal producer cannot emit these relationships because its decoder rejects them. No crash, target modification, security boundary crossing, real-game incidence, or downstream consumer failure was established. NOT_ENOUGH_INFO: naturally occurring affected records and their frequency are unknown; no practical recovery workflow was tested. ## REA version `rea-agents` 6.8.0, source revision `ace4dbf36e8c8f36a0e192aff9a11484ed428358`. ## Runtime and platform Node.js v24.22.1; macOS 27.0.1; arm64. The parent prepared the compiled runtime; the verifier used it without rebuilding or installing software. No Unity, native binary, Hopper, Ghidra, live service, or target application was used. ## Target and artifact context Generated version-29 IL2CPP metadata Evidence with two positional type definitions, one method, one image, a synthetic artifact identity, and no binary link. Section rows use ordered, nonoverlapping extents within the declared artifact size. The artifact path and digest are fixture labels; no corresponding artifact file is required or accessed. Every variant gets its own freshly computed Evidence identifier and passes Evidence parsing before the CLI call. ## Interface CLI ## Earliest failure stage Request parsing or validation ## Relevant output or evidence - Expected source: `docs/il2cpp-metadata.md:116` documents historical omission; `docs/il2cpp-metadata.md:194` defines collection position as metadata identity and declaring-type references as positional. `src/domain/il2cpp/il2cppMetadata.ts:147` and `:161` define type/method row identity and owner semantics. `src/il2cpp/Il2cppMetadataFile.ts:434`, `:477`, and `:627` reject self-nesting, cycles, and out-of-range method owners. Failure observations use operation `observe_il2cpp_metadata_source` with no complete inventory (`src/il2cpp/Il2cppMetadataProvider.ts:294`); they do not establish a supported truncated positional type table. - Failure source: `src/domain/analysisView/il2cppMetadataView.ts:286` reads every imported metadata parent with `il2cppMetadataParentSchema`; `src/domain/il2cpp/il2cppMetadata.ts:403` validates facts and bounds member/parameter owners but lacks corresponding type/method owner and enclosing-chain checks. The filter at `src/domain/analysisView/il2cppMetadataView.ts:493` matches the retained owner directly. The public CLI replay returned the rows summarized below after Evidence authentication and artifact-identity checks. - Evidence provenance: observed through the built public CLI using generated, digest-consistent records; producer refusal and incomplete-source semantics are source-inspected and were not runtime-tested. - Local verification: reproduced. Eleven sequential cases in an initial probe, a repeat with meaningful section extents, and the exact public snippet gave the same relevant statuses and owner values. The final public snippet ran once. - Reproduction completeness: complete for the generated import/view cases. Real-producer incidence and MCP transport behavior were not tested. ```text case exit result valid-nested 0 Outer owner -1; Inner owner 0 valid-method 0 Run owner 0 valid-absent 0 Run owner -1 historical-nested 0 Outer owner -1; Inner owner 0 self-owner 0 Outer owner 0 cycle 0 Outer owner 1; Inner owner 0 type-owner 0 Inner owner 999 method-owner 0 Run owner 999, selected by declaring_types [999] field-reject-control 1 invalid_request; invalid_value at fields[0].declaring_type parameter-reject-control 1 invalid_request; invalid_value at parameters[0].method incomplete-reject-control 1 invalid_request; missing_argument at types ``` The field and parameter messages are respectively “Member owner is outside the retained type definitions.” and “Parameter owner is outside the retained method definitions.” Invalid owner acceptance is independent of selected page size: the successful pages show the complete two-type/one-method collections, not a truncated source whose missing rows could contain type 999. ## Additional context Restoration check (proposed, unexecuted): rerun the snippet. The four impossible-owner cases should cease returning normal successful metadata pages and report a typed invalid relationship. The four valid/historical controls should retain their successful facts, and the three existing rejection controls should remain rejected. No fix was attempted. The supplied all-state issue index and 7,168 archived full issue/PR bodies were searched. Closed completed reports [#5751](https://github.com/morluto/rea/issues/5751), [#5988](https://github.com/morluto/rea/issues/5988), and [#4709](https://github.com/morluto/rea/issues/4709) concern respectively raw generic-container extents, managed identity-error classification, and Electron DOM parents. Their contracts and restoration checks differ. Closed IL2CPP feature PR [#5326](https://github.com/morluto/rea/pull/5326) describes ownership validation and historical omission, but does not report or resolve the type/method import behavior reproduced here. No exact duplicate was found in that supplied snapshot or the current upstream issue/PR search before submission. NOT_ENOUGH_INFO: the first affected release and whether a released producer ever saved such a record are unknown. This report makes no security or resource-exhaustion claim. ## Triage assessment - Impact level: P2 - Assessment status: supported - Impact basis: The public CLI returns an impossible or unresolvable metadata owner and matches a nonexistent declaring type in generated imported Evidence. This is bounded evidence correctness; no core workflow outage, data loss, or downstream failure was observed. - Workaround status: unverified - Workaround basis: Manual validation or reinspection may detect or avoid these records, but no practical recovery preserving a caller's required facts was demonstrated, and availability of the original metadata is unknown.
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#4374
No description provided.