fix(ontology): preserve singleton relations across export pages - #934
fix(ontology): preserve singleton relations across export pages#934seonghobae wants to merge 6 commits into
Conversation
|
Important Review skippedAuto reviews are disabled on base/target branches other than the default branch. Please check the settings in the CodeRabbit UI or the ⚙️ Run configurationConfiguration used: Organization UI Review profile: CHILL Plan: Team Run ID: You can disable this status message by setting the Use the checkbox below for a quick retry:
Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out. Comment |
seonghobae
left a comment
There was a problem hiding this comment.
accumulateNeighborhoodPages() now preserves singleton/array values, but its dedup key is raw JSON.stringify(value). JSON object member order is not semantic identity (RFC 8259 defines objects as unordered), and JSON-LD value/node objects can legitimately arrive with the same members in a different order. In that case continuation pages retain a duplicate even though this PR/ADR promises repeated values are deduplicated. Please pin this with a regression using the same JSON-LD object with reversed member order, then use an order-insensitive structural key for deduplication while preserving array order.
seonghobae
left a comment
There was a problem hiding this comment.
Current-stack governance finding: this head is still based on unmerged #780 (1d8fa267…) while the PR is Ready, so repository-local validation is consuming/queuing capacity for a child that cannot be normally merged yet. This conflicts with the parent-first/Draft-dependent contract already stated in the PR body. Keep the valid JSON-LD repair intact, return this child to Draft now, let the lifecycle cancellation event retire the queued repository-local work, and only re-enter Ready after #780 lands and this branch is non-force converged/retargeted to protected main. No predecessor GREEN transfers.
Continuing a neighborhood must not overwrite earlier direct JSON-LD relationships when either page represents a property as a singleton. Preserve all values for a repeated subject, including types, labels, and multi-Voice links. ADR 0256 clarifies the existing export-parity contract; authorization, carrying/derivation evidence, and cutoff semantics remain unchanged.
Current review/repair lineage: review
5120376842found that rawJSON.stringify(value)treated JSON object member order as identity even though RFC 8259 defines JSON objects as unordered and JSON-LD node/value objects may serialize equivalent members in different orders. RED6beed92b43f23b95131419641563918750e3fc3badds a continuation regression with an equivalent JSON-LD value object whose members are reversed. Causal repaireae1e7286073761283b8ac3642b06b3ea4417e64uses a recursive structural key that sorts object keys while preserving array sequence. Documentation convergence3060dd7000791160c2bcc98351af129899ff32ffrecords that precise boundary in ADR 0256 and adds RFC 8259 plus the W3C JSON-LD 1.1 Recommendation to traceability. Compare from prior head7ed5a417fab667e5954ec14c29a3716dae305330is exactly three commits touching ADR 0256, the new regression, andfrontend/src/ontologyLayout.ts.Earlier validation on predecessor heads recorded focused frontend tests, lint, TypeScript, production build, ontology/SHACL/API tests, real Keycloak/JWKS with migrated synthetic PostgreSQL, Storybook desktop/mobile inspection, and a synthetic authenticated k6 observation of p95 25.88 ms. Those observations are predecessor evidence only and are not promoted to exact-head GREEN for
3060dd7000791160c2bcc98351af129899ff32ff.Review
5120950873found a governance/capacity mismatch: this child was Ready while still stacked on unmerged #780, so repository-local work was queued for a head that could not yet merge normally. The PR was returned to Draft without changing the product tree. On the same exact head, predecessor Ready-trigger Tests33953919411completedcancelled; the Draft-transition Tests run33962248937completedskipped. This proves lifecycle cancellation/admission only and is not product GREEN.Stacked on #780 (
1d8fa267b059289e77301a09985dfac70a439814). Keep Draft until #780 merges through normal protected governance; then retarget/converge this child non-force to protectedmainand collect fresh exact-head/base checks plus qualifying independent review. Child #935 remains Draft behind this branch. No schema or release number is added here. Full authenticated deployed additional-Voice/cutoff acceptance remains unavailable.