From 3db3a477bebd15ca335ec29a0eff65664db613c9 Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 6 Sep 2026 18:06:15 +0900 Subject: [PATCH 1/8] fix(ontology): discard prior evidence after access denial --- docs/product-technical-gap-baseline.md | 129 ++++++++++++++++++ .../ontology-denial-desktop-20260906.png | Bin 0 -> 57800 bytes .../ontology-denial-mobile-20260906.png | Bin 0 -> 44592 bytes docs/storybook-inventory.md | 2 +- .../components/OntologyExplorer.stories.tsx | 18 +++ .../src/components/OntologyExplorer.test.tsx | 29 ++++ frontend/src/components/OntologyExplorer.tsx | 9 +- 7 files changed, 184 insertions(+), 3 deletions(-) create mode 100644 docs/screenshots/ontology-denial-desktop-20260906.png create mode 100644 docs/screenshots/ontology-denial-mobile-20260906.png diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index b5d31877b..f0fb34a15 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,5 +1,134 @@ # Product & Technical Gap Baseline +## Current audit — 2026-09-06 + +This section supersedes the dated queue snapshots below. Audited protected +`main`: `83eba56149eb802cd63642c507c324c9976ec78e`. +The pre-change remote inventory contains 120 open PRs (114 Draft, 6 Ready) +and 16 open issues. No Ready PR has a qualifying exact-head approval. +All six retain normal squash auto-merge. Their first 100 review threads were +fully paginated (no additional page) and contain zero unresolved threads. +Required workflows remain mandatory even where ordinary local tests pass. + +| Ready PR | Exact head | Current-head approvals / unresolved threads | Auto-merge | Non-green check names | +| --- | --- | --- | --- | --- | +| #780 | `1d8fa267b059289e77301a09985dfac70a439814` | 0 / 0 | enabled | Admit current pull request head, CodeQL compatibility analysis (actions), CodeQL compatibility analysis (javascript-typescript), CodeQL compatibility analysis (python), Detect changed scope, admit-current-head, cancel-superseded-opencode-review-runs, cancel-superseded-pr-runs, required-workflow-bootstrap | +| #802 | `32f1cda10a2a1a6cabd64a3ae6f59bd6f0b20fd6` | 0 / 0 | enabled | CodeQL compatibility analysis (actions), CodeQL compatibility analysis (javascript-typescript), CodeQL compatibility analysis (python), dependency-review, noema-review, opencode-review, strix | +| #907 | `847a15e73e69bfc768d517a83fa8706aecfafe7e` | 0 / 0 | enabled | CodeQL compatibility analysis (actions), CodeQL compatibility analysis (javascript-typescript), CodeQL compatibility analysis (python), noema-review, opencode-review, publish-manual-pr-evidence-status, strix | +| #911 | `5d40eed35a0b6e0d182397f8d02b29c38e9bdd17` | 0 / 0 | enabled | CodeQL compatibility analysis (actions), CodeQL compatibility analysis (javascript-typescript), CodeQL compatibility analysis (python), dependency-review, noema-review, opencode-review, strix | +| #914 | `61ed3a3712d252e3c179a71d297c52f05e1bac20` | 0 / 0 | enabled | CodeQL compatibility analysis (actions), CodeQL compatibility analysis (javascript-typescript), CodeQL compatibility analysis (python), noema-review, opencode-review | +| #929 | `2a8ed5d02f4a3082b346d923d754c1ff37ebff52` | 0 / 0 | enabled | CodeQL compatibility analysis (actions), CodeQL compatibility analysis (javascript-typescript), CodeQL compatibility analysis (python), dependency-review, noema-review, opencode-review | + +Current branch rules require one independent approval, dismissal of stale +reviews, resolved review threads, and the central workflow suite. Last-push +approval is currently false; do not replace live rules with historical notes. +No self-approval, force push, admin bypass, stack retarget, or merge occurred +in this audit. No in-progress repository run was returned during the initial +runner inventory, so no run was cancelled. Cancelled checks above remain +non-passing evidence and do not authorize cancelling a current open-PR run. + +### Authority, implementation, and acceptance are separate + +- **Authority read:** current LineageWeave `docs/product-requirements.md`, + ADR 0184, ADR 0246 and the actual main ADR 0251; current upstream TEPP + `docs/product/prd-v0.4-approved.md`, contextual-orchestrator + `docs/product_planning.md` and `docs/architecture.md`. Main's ADR 0251 is + the FJA/I-O taxonomy, while Voice composition is ADR 0256; an ADR number + alone does not resolve the competing historical identities. +- **Canonical remote names verified:** `ContextualWisdomLab/LineageWeave`, + `RankWeave`, `ThreadWeave`, `TEPP`, and `ContextualWisdomLab/disksage`. + The mixed-case DiskSage row in the historical authority register is not + the canonical repository name. +- **Research boundary:** no new scientific claim, weight, inference policy, + model selector, or arithmetic was introduced. Existing ADR literature is + supporting authority for its stated scope, not proof that implementation + or runtime acceptance is complete. +- **Current implementation gap selected:** after an authenticated continuation + returned 403/404, the ontology graph disappeared but previously loaded + CSV/JSON-LD remained downloadable and a selected record drawer survived. + This directly violated ADR 0184's same-authorized-content export contract. + Three new regressions failed before the fix. The minimal repair clears + denied response data/selection and prevents every visible projection from + using data in the denied state, including supplied Storybook payloads. + Ordinary 500 continuation retries retain the earlier authorized pages. +- **Local candidate evidence:** 36 focused and 533 total frontend tests pass; + lint, TypeScript/Vite build and Storybook build pass. `DeniedAfterLoaded` + reuses the existing controls, copy, layout and tokens. Inspected 1440px and + 390px screenshots show disabled CSV/JSON-LD controls, no old evidence table + or drawer, and no horizontal document overflow. Existing build chunk-size + warnings were not suppressed. +- **Current aggregate only:** official Compose project `lineageweave` has + 43,189 source Posts and a Voice-assignment store. These counts disclose no + record identity and are not a probability sample or population inference. + The inspected worker, PostgreSQL and orchestrator containers report healthy; + this is not exact-candidate deployment evidence. +- **Still unaccepted:** full Voice API/UI truth/cutoff/PROV-O parity, + authenticated rendering of this candidate against PostgreSQL, and full + asynchronous Ask end-to-end saturation/capacity. The current stack is a + private-data runtime; its existence does not authorize presenting synthetic + Storybook or a missing-focus probe as full real-runtime acceptance. + +### Bounded authenticated denial probe + +Synthetic `demo.analyst` OIDC authentication succeeded without printing its +credential or token. PostgreSQL confirmed the synthetic focus identifier had +zero rows. A 4-VU, 10-second k6 probe against the official authenticated +ontology route returned the expected 404 on all 18,939 focus reads (0 failed +checks); explicit expected-status classification produced 0% HTTP error rate. +Including one setup token request, observed throughput was 1,757.53 requests/s, +mean latency 2.04ms and p95 2.60ms. This intentionally bounded observation is +not an SLO, probability sample, full Ask workflow, or saturation test. +Point-in-time observations showed one active diagnostic PostgreSQL connection +and six idle clients; sampled CPU percentages for PostgreSQL, Ask processing, +Valkey, and the gateway were 0.00%, 0.14%, 0.23%, and 0.02%. These samples do +not measure peak saturation. No performance bottleneck or numerical repair is +claimed. The first probe classified expected 404s as HTTP errors; the reported +probe corrected only expected-response classification, without hiding failed +checks or changing the application. + +The UI design contract is unchanged in layout: evidence reviewers retain the +existing next-action notice and navigation; denial removes prior record +content and disables export controls at desktop and mobile widths. Existing +tokens and Storybook scenes are the visual authority. No new layout, color, +spacing, or decorative component was introduced. Screenshots are synthetic: +[desktop](screenshots/ontology-denial-desktop-20260906.png) and +[mobile](screenshots/ontology-denial-mobile-20260906.png). + +### PR overlap and identity collisions + +All 120 open PR file lists were retrieved successfully. Added ADR filenames +reuse eight numeric identities for distinct decisions: + +- `docs/adr/0279`: #888 `docs/adr/0279-global-ask-exact-semantic-index.md`; #811 `docs/adr/0279-leftover-map-segment-expected.md`. +- `docs/adr/0289`: #821 `docs/adr/0289-leftover-map-compare-coverage.md`; #820 `docs/adr/0289-leftover-map-plot-singular.md`. +- `docs/adr/0290`: #823 `docs/adr/0290-leftover-map-axis-singular.md`; #822 `docs/adr/0290-leftover-map-compare-item-coverage.md`. +- `docs/adr/0300`: #899 `docs/adr/0300-contextual-orchestrator-owner-boundary.md`; #837 `docs/adr/0300-leftover-map-compare-expected.md`. +- `docs/adr/0301`: #902 `docs/adr/0301-dichotomous-measurement-policy.md`; #838 `docs/adr/0301-leftover-map-compare-rank.md`. +- `docs/adr/0305`: #844 `docs/adr/0305-leftover-map-compare-plot-axis-share.md`; #843 `docs/adr/0305-leftover-map-compare-rank-payload.md`. +- `docs/adr/0335`: #877 `docs/adr/0335-leftover-map-compare-plot-tick-origin-badge.md`; #876 `docs/adr/0335-leftover-map-plot-criterion-coordinates.md`. +- `docs/adr/0355`: #920 `docs/adr/0355-leftover-map-plot-origin-badge.md`; #915 `docs/adr/0355-dynamic-evaluation-lineage.md`. + +No distinct added migration filenames reused a number in that inventory. +This filename check does not prove SQL/API compatibility across all stacked +branches. Release-title duplicates remain candidates requiring actual version +reconciliation: v2.92.0 (#877/#876), v2.62.0 (#844/#843), v2.61.0 (#842/#841), +v2.50.0 (#828/#826), v2.47.0 (#823/#822), v2.46.0 (#821/#820). +Do not merge these child branches onto an unprotected parent; protect the +parent first, retarget, and gather new head/base/review/check evidence. + +Existing owner PRs remain intact: #780 carries Voice export authority; +#934 singleton JSON-LD page relations; #935 filtered export parity; +#936 correction history; #937 evidence visibility/write admission; #929 +versioned translations. The denial fix changes `OntologyExplorer.tsx` and its +regressions only; shared Storybook/inventory/baseline edits need reconciliation +when those PRs reach main. API, schema, ADR identity, and release number are +unchanged by this slice. + +## Historical audit snapshots + +The remaining dated entries are historical supporting evidence, not a current +queue, deployment, or acceptance claim. + > Exact-head loop overlay: 2026-08-29 13:20 KST. Protected `main` is > `fc13acaa20adca11968238e398d4aafcf62b6cee` (v2.23.0 leftover-map > explained leftover share, #775). Open ready PRs still lack independent diff --git a/docs/screenshots/ontology-denial-desktop-20260906.png b/docs/screenshots/ontology-denial-desktop-20260906.png new file mode 100644 index 0000000000000000000000000000000000000000..66d5b85bac7260d6da5fa8710a8917768a9d76a3 GIT binary patch literal 57800 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�pch79R#m?W2yBC~7|Lv75`uySw*DiTg!O37zrsCsrc~rZB~~Y8 zdv_6U2wk4%*+s?iv%>V^4)w;t5cca7(sDidp1K3Z|F>`%Da+YXHZ7nwNSzfn5ein8 zb|go|uCpT!BKeF$b~oxt{cJzlynB))h~Hrl>IQ=Vgglv3WS*^E;4|<8#p$~CCjIW{ zp)0%H(G;geqWgGbB9##M{o^?n>K=ltdKSi7@pjk-wQQ1Q`u9!9f)pQ7yY~?tzKxn z14&4d^Be42Nb7nVmDvo$1Lb73$5T)iM=AW4B{rNuu9KH z^}KGDhgaC4!|t|OrqhPn<5fxxHQD!fd%Yllf%M*-qm_>K!&>Wa;+EMD=9(35!NTDyAx9M z615XTD2VFrGuEAZYkQ1Es5X<h9K4kR z?>PnM2ZJ8Qa|LuOZzPozT`94CjcW_7pl%g7N*E%s9Pw1f)-iuz#r1cYLC8`khaG<= z4}3+`Pv~U@%Gkn@yS&U+dxI896iWRp%x}s!c@#s-%0e#Bib+D;ZCm%}z#M(%@0qIc zL6Y!ZB9t{u<{MvGi-qvPameIN0g*}fKD{lKvwh95T?t&;euAvuEp#MnzCnoq zHHr0(?9NwNAyYVEImTQ$xeOO#3nUXV(8Xrf`eD!`=)v1A65jg~_e^TIjLrB^9J<08 zGW27r9|d7#4U^p{^q9;Z&hAMPCFVn+g|?*ftP?_yy{*TjRAe69g84i03P}f;g~;{K zoO(20NoA!yA6TRxqDB~p70_<@+%dl|FBN0xXh`?TxKGNy=fev**-B!Vzh0@0+p^{& zWT?nMBYNo$2=Q9E<(&hmvk(1!w|DxQJ_e5#=s{RV3a}2N$@pYZXXT;4n3N^G#^)}( zV=1rcVoQP{&EJ7nWj|R}XOYZd5{`mguEfov9L%;-($Sq%=T)R)%$*wY%DJAJrH}(> z)=6iQZ|lu4MxQ&1bfmKdfvUUl!`5fDam_@T$P+EotT4Ydck$A_k%4#Ur5aiO~ zviqf*`SJ*9x2fv$-MS*T9S@E5va@vJz{I0fkPHj=u9mzxI-Kx9XwRVeO%8bvWd_$j z^(^Xpcy+zV{kpc4pY`-iQ8GxT#i^f5bjz){VCJS}#)BNrUQf+_m$CuF6_Ba>Fvvz9X`)$I_O3N^yOmnjP(Q{bCH~Y{A~vYU z72LPq_`pV#7w30_-*F|2Sr8^)G%8D3j7*a7E3BM+zrT#m*4(JCF(Q0rj2kc#>!{3$ zDK}zfu7~5-!^;sx{=KoXu(r}yXiov}f#aBJF3lqsGU=d6x5up@5iS^MDH7` zY1quO(wq-ekS3AAju>(SxgwM_x5H6#MbK!S!H%>W*=sS{)hS44fb>$T9V=gVn2tE* zC`{?bE;=W9ojGyBZMnzDu)p6GTFocV=qN#N zT`#tsdQL!wpFS4#rptnsE^OaNE;g6m#&AZtkVlu zR%8)mC!zm(dbcPIQb%&6RP*V~rT8Hq7IJXvHXmx2Do%)#% zioJH2`_#7xjtAjBj3;B|jY4vQUsX8`e|@#%vx&eGFhXc?&avEnwrt3gX0b5UO~Itx-4Ua=#5Z?gjxJoyPDr5$x2e`5D>Q%WG@;ZR)uE(e47jex1t%~~3v z{9ufRjg|@YPC3y|r(RsWaJWZ&aj5bF{|!Q@W3tK}Z*9eq#pF=v+@>A+RnYvEy~a$T zsHrV|h9|^ooi4Tv3J7J*c&+l<80!4$5Tqf@*bcmtflDiAu{eknNyEC~4w_+)Z&3xeiSf zVXhUQlzH1QJr+;}c2{vuj9GmU=j%=90(0!Gh}!{nMLt3Bd$wy9IFnQ67TgaMq}88G zhnxRZk06C71HA-pM6nx*IwMwrAop81Qa>`yd93rfX{YB!a*$?Pw$y~p#&vsfTX!Gh5PAGhdkhhCAk zAk>zx>$3XfJql5C^ERP|%?j?@Or5qJFXOtuADXWC#f-N1qp{;G+d|wT;kGvd7Vu|PaH+}L$m&j_@)yHW8og`*DuGt=wXQKt! zLZ72U5T(s0O@JVv)YARWa=X90V0hO*SG63?2q-ppGk@<>C8b7mZ!?wRRCTAb3~IFK z+KgRd>ZffPvasI_tLjW|^ex*e%2!Fga}dNHLZ({97>E2ux`;~4j+@B{V+t1%O#FmxW}g43{7?dF{PkE z?Hv*hq#$i?5eLQ0MfVk9eIRid$~GwJWb!TtR+z)uajFFr!_|>|J#B}P1mxK-W<9x8 zTXzEDptwo(5?Ah)%`&}4or<+{qV>~AHV|@Z?dMdIysNE&Qw>=4$57E3P4A_~S=S312 z&V!jw!CEdkKDWY@GAXbbeozWoqp8``)99%Y zr^=iYdJUt*k#R_L__tnAK&BvZ<)mOGNNP+9wC%SUwxhOhVqt#(VG+xT5nCQENDpSB zfV%!AMZ4|lJ@uD5)q86iyNB>AqB^Q-Jh!vG_Ua)ap%){5LfM~gp+bLCqswF$A;b0p zR2Ar4S-Om3kBXe4`C9ER2EPQl&Yqr6>=Td|7#Bgb76RNJM_5=RC3q;n9iIT@*o_J}}?eG-; zVqAX-@RLqYR+syV)|bMe;SF2p%w*J|jpn`VJ9sa)V`DYmRVNIUY7(5(Bv|gJ-!JQx z-Gh4L6(P{T!i&^8!gk?)!P4Hjg}Ysh;<4t&da zMrcm3lEX6dB7?^)nwNCmn=`frlrb-yc=lLMW4DpgZ>=mjU#ZM;Yn!#P zP(N}e^HO`(dm)$tr}Gl1 zK-A!tUlR|ui8`pLR`&7ylR;Qg^QnHkrDh8?8A9=!ynZoxtZgerawOl z6|;7!RwDDKt~D0FKFVs9}LSyIc4Fk}@TO7`Yc zpOI}de*QW5Nh3v|cC;RwzBX3b7sSj@q<9%k9WI?bGP&wFEE>bnSFKsLGHmGW_OxGJ zBPz@1$gA~>ka;S=&Epa;qT&!_l~GVk@R}S8EI^VMY!Q{K8Q3H1vg?mfx!ro@m+F3+ zb;guv1UlW(<~V@tx9qU$dyOoGqX^_#^=tFG3?&vl@Xdm7qU6Dtb$)%ZoG;RZL|Gz< zv25_QR`hR2!w?dBEg3*0X?9-QsPCu~H#TWxRP27_g&q{RRJEwd=$?%)%&%h<`W(`@ zl7Y90m$n>Fc!aGZ_9z$&uX`9`Qf9|sY5B&Gw!n`;ZxA6=cWK6F8PeyXWf;xr3eWWt zbZul}ZjsRWPrtPOj;bzOP33;f-A<|W8jklkv{3PiM=p;2S++XF*SRWhXEs@2tm2VD z4Q6ySPPUmcujiD~mNv$gD2I{7tQRJU*n_32_kutRa4)KkmnFfbwOBAOGP+ZnIf)|7 zkFwSl0)B2XAs6I+v-MBTu_C}Ih`wvhseY52CD!+)c!;@ek6y5e{cuYhFJQRrW7o)w z2Sp;{zMJxWuS0ZZSE7vl5N#^Xsf6VK_Z5URTKi4K>7B=R-v#&xR#f5QUl>%&wWFtJ zgnR-LSh>FR0wwdp8GD83gbJH#khhbawmt#~&5U6|%ogLZGH01kFK%f>chS5zKH=bI z%hS|ffY@c-u6PMv^GeUgl=af%DDB;iu#e^mOzU;Xk{uCeIwAsTNHCkl5XpnwV#7(pnq z7|2>@TqWsd1=->7EoG}_O(I-J?MlVVx|-XBiAzous`^&mD|wAM>mJRPAz)A}4U_N- zU_z-_ZqN6-PTpvnctUIwuZ2K2Jn~T~#s$IhFL%2ti-bk24KwnLT<~{;#|}(t0IVR8 zqLv#8AunZvnWZlPqDIU!rq5)t>0WzicD9H8;xq-IpDfAgT)3||70JUN3dsl4Q>uzA^T{n6 zBUsEqBh2XV1cKvkh)^%6gtcT{rFl)9I(VAV?l>-ff&?n8pjaMS^tOhcw(TBnV*(Oz zO^d7qLA;^PEKDqR$0gt1UkC=Z+FPVw6fNa0wGaH8i0ydgX2=``)pd5Ty=EneLmt1dFb77ZeXtKpfQ3_K5o2o!Rw^&eP@5*qv zG@(!KBuzcFC+q3cW<$uUU0VhC+r}4StVkI@CeEsz-v)yOMKX&ed zetfQp6@;D_m&AQ5nEZw^~=#5}QJNvs63 zOR%KI`6Diml?5ZpZAv9{wRX_>rS`tzF56H|d8=TQveW@ElKO>1eq6!IK0g8g zm!j6g0aCp_lUL~t3_ZJf99#Co#jsqsVexh-0+Yhrscl+!hO@?{5|o$g08CU+D=zZz z&kzxTnr(6u@e}@QuppF(k%CmM6Wv?qo5R)|*8&w->OR)NdV3<T^drf&2ldrC+e;=mY&99lsUL)P<;NMuO88vvY`GZxy_P{Q8<)#wxXbWnn zx5lrLqR=8zR8HMS!GOtfS@48^5j5J04&+8TnQg0h_VM`TKBrI?LKPs*C7D63#vXOr~}c&v9~B+0AyK}Z!+kDHjq3?=Tc*1BRz6aTpXJd)XKZ+ z4w8QSb?%Nig34-o@ie5Ndcq+;?H)oX$pxU<)J+2 zr^ZLP+n3q1dgG7^bTD4E_B?m;O_U*kcct>02nFQFjWMn78~1A@N~~M3t7X>19sQ?_ zKY&!yyk5REc0X8xvL-+lqQ?~&mH@5NaVdJG(cD+;sEdlVkp=ea+}xhVE7qDExIh@<>%hHFD)MEewp_k7Dg)-m-_XlnY;A0E*-HaVb%=7_&5fr%P90p(GHxhHYh4;~k=MWTsGH+j8Fm45o zmt*w?>L&kslDokE7e}pNK5}VH^=~H{#O!*{a-8^Rd;(kfES2tw4)2K*FXLrax%rN9 zZh&~#K4Swf{uhYaoV;p4V~*DA$}G-2;mWT^n6dStFr z?ABd<+-n0u!e0#rylBq%CWoc3jz9a(z})>0P>dg?N_%6OabTK)0x z`wN4PnO`xhl}zEe8q2G)OCSREr}M$>2r&U+avz690=#F*;D=gkr4Na)?s$|534c{> z>IrO;vgBSRX~TOCpeh5kW`q0dbAf|?3~<a@3hj@zO6yU0Fwtg2d2gp(-=UWo63|4shXQFPpyHIA@@x&jqFTn5`PICDg2p zEAne(^?};rapm6Hi(_0AmP``KMW8iV=ddfE1cdxkp$D~ky**%S`+x!;lEi@k8H6cf z57hB{5{02Ke{hfuNw|pvmgw7&8B^pOy<>~};y@|!eyZUSawN~7!nA*2-@X7z4B}tx ziU-<5AMIpnE-9mTf_)f431}eg6)rtE#>~FV9_Od}?2DjY#1VjnX<3xf8B@Qh^QwfO z+gTJCE4S4HX7%WZK3E@Qu_p)|H6%`skCLtuOR>1{_9!fvkB!3`Q77&`DfkMqb3;Rl zrTEIw4^0oVDddW&V6INxeF}Vi{>_$AzusNYLS!fh`JtMsI};6RW>a-{sWMm2vEB(o zu&%0iJaq8~Q<)!H$6JPD44#!tHs28?DG#CZ!cCQLz-w z%%>46<}RlnfY93*m4?lKMemfbf+H{}GH&fGsQX5`W)L*RhdQ}#0Ii1~!|Xo3^`c=m zw~kwQ2qHCm+vW@~xw>_tH8h+Be` z9SH7P{((O~h4iI{GS6FYH;}uv7U!%ieK4kN$Ptg6`3YC4#rG(H#it#!!I=t|ChaO7 zx5u<9K|8mWhOITA+hdPXV>N!L@oEbFsrT)=TFew|!x9~AZJqb16o(;lYIt=SWW28zt11rslG+`50+!&T5^wm(w$WPUX#9LU|Sw+{VgO(lDDR2<)WL`Dlr^osiy7de_XZDIrZszKg zr@Tp}0pJhpIhJW>+if*a16;g!1(v+C&D88)jbLQKLZ+?88usHa_B;_@7CyTWrem|8Fjq$AFW4>6sk=Gn>ecV`^W z1AB~G)${Zh646o)L-__E4*KPn-Wj~!%NAvX+@IIjXixN{YBffvSwU4>K^1N$A_Fqj^Sk-e#cn zmTxgf18m>pL;ceewE4M$f#rG+>pwJNYj=`G3y=_}41=*DCqfD*2y@UQcMP z$^$DseB2lCU-57Lzq|J+P;g#UYD~Wb6L>*$e1a!WFcxn$&|^$8z)wy*d!qa}|KaNo F{|6m5(O3Wg literal 0 HcmV?d00001 diff --git a/docs/screenshots/ontology-denial-mobile-20260906.png b/docs/screenshots/ontology-denial-mobile-20260906.png new file mode 100644 index 0000000000000000000000000000000000000000..5c89af3eea3059c22d4ce5eddc356bf8195648f5 GIT binary patch literal 44592 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 literal 0 HcmV?d00001 diff --git a/docs/storybook-inventory.md b/docs/storybook-inventory.md index f426285a6..1abbfa6c0 100644 --- a/docs/storybook-inventory.md +++ b/docs/storybook-inventory.md @@ -13,7 +13,7 @@ operator-facing control you can click before changing product CSS. | `Post/Connect perspective` | Choose one unassigned Voice and an explicit evidence state, then record the open post as its evidence. `Ready`, `Completed`, and `NarrowViewport` cover untouched, successful, and mobile states. | `VoiceAssignmentForm`, `admin-form`, `btn-primary` | | `Evidence/CitationChip` | Click a cited title to open that source post. | `--color-chip-border`, `--radius-chip`, `CitationChip` | | `Evidence/OrganizationAliasChip` | Click a cataloged org; the parenthetical is the unique corroborated SKOS companion. | `--color-chip-border`, `--radius-chip`, `OrganizationAliasChip` | -| `Evidence/OntologyExplorer` | Distinguish Event Lineage from typed ontology facts, inspect Post/Person/Organization/Team/Project shapes, token-backed secondary cues, and truth labels, then open authorized evidence. The named exact-values region supports keyboard scrolling; `LongLabelsAndEvidenceTable` proves complete labels wrap without character-count truncation, while `CombinedVoiceEvidence` covers primary-plus-additional Voice assignments and focuses the evidence action distinct from the carrying-Post action. Desktop, narrow, drawers, legend/filter, empty, truncated, partial, denied, stale, and rejected scenes cover ADR 0184/0222/0251 states. | `OntologyExplorer`, `ontologyLayout`, `--ontology-node-*-fill`, `--color-table-border` | +| `Evidence/OntologyExplorer` | Distinguish Event Lineage from typed ontology facts, inspect Post/Person/Organization/Team/Project shapes, token-backed secondary cues, and truth labels, then open authorized evidence. The named exact-values region supports keyboard scrolling; `LongLabelsAndEvidenceTable` proves complete labels wrap without character-count truncation, while `CombinedVoiceEvidence` covers primary-plus-additional Voice assignments and focuses the evidence action distinct from the carrying-Post action. `DeniedAfterLoaded` proves previously loaded evidence cannot be exported or opened after denial. Desktop, narrow, drawers, legend/filter, empty, truncated, partial, denied, stale, and rejected scenes cover ADR 0184/0222/0251 states. | `OntologyExplorer`, `ontologyLayout`, `--ontology-node-*-fill`, `--color-table-border` | | `Evidence/OntologyExplorer` | Distinguish Event Lineage from typed ontology facts, inspect Post/Person/Organization/Team/Project/Work-evidence shapes, token-backed secondary cues, and truth labels, then open authorized evidence. The populated scene includes one assertion-backed occupational construct without a person-trait promotion. The named exact-values region supports keyboard scrolling; `LongLabelsAndEvidenceTable` proves complete labels wrap without character-count truncation. Desktop, narrow, drawers, legend/filter, empty, truncated, partial, denied, stale, and rejected scenes cover ADR 0184/0222/0255 states. | `OntologyExplorer`, `ontologyLayout`, `--ontology-node-*-fill`, `--color-table-border` | | `AnalysisRun/CutoffKnownBody` | Read the cutoff-known sentence, then compare it with the live body below. | `--color-accent-border`, `--space-panel-block`, `--radius-panel`, `CutoffKnownBody` | | `Analysis/LineageEntityPicker` | Choose which corp to reconstruct, then click Request a lineage reconstruction. | `--space-control-gap`, `--size-control-min`, `--radius-control`, `LineageEntityPicker` | diff --git a/frontend/src/components/OntologyExplorer.stories.tsx b/frontend/src/components/OntologyExplorer.stories.tsx index 5e192ff0f..acaf8eca8 100644 --- a/frontend/src/components/OntologyExplorer.stories.tsx +++ b/frontend/src/components/OntologyExplorer.stories.tsx @@ -430,6 +430,24 @@ export const Denied: Story = { }, }; +export const DeniedAfterLoaded: Story = { + args: { + neighborhood: demoNeighborhood, + status: "denied", + }, + play: ({ canvasElement }) => { + const buttons = Array.from(canvasElement.querySelectorAll("button")); + for (const label of ["Export CSV", "Export JSON-LD"]) { + if (!buttons.find((button) => button.textContent === label)?.disabled) { + throw new Error("A denied neighborhood must disable evidence exports"); + } + } + if (canvasElement.querySelector(".ontology-exact-values, .ontology-drawer")) { + throw new Error("A denied neighborhood must omit prior evidence"); + } + }, +}; + export const StaleCutoff: Story = { args: { knowledgeCutoff: "2026-01-15T12:00:00Z", diff --git a/frontend/src/components/OntologyExplorer.test.tsx b/frontend/src/components/OntologyExplorer.test.tsx index 7820d383c..f748681af 100644 --- a/frontend/src/components/OntologyExplorer.test.tsx +++ b/frontend/src/components/OntologyExplorer.test.tsx @@ -246,6 +246,35 @@ describe("OntologyExplorer", () => { ).toBeInTheDocument(); }); + it.each([403, 404])("discards prior evidence and exports after continuation denial (%s)", async (status) => { + const fetchNeighborhood = vi.mocked(fetchOntologyNeighborhood); + fetchNeighborhood.mockReset(); + fetchNeighborhood + .mockResolvedValueOnce(neighborhood({ truncated: true, next_cursor: "page-2" })) + .mockRejectedValueOnce(new BackendError("/api/ontology/neighborhood", status)); + render( + , + ); + await userEvent.click(await screen.findByRole("button", { name: "Select node: Post Demo public post" })); + await userEvent.click(screen.getByRole("button", { name: "Load next relation page" })); + expect(await screen.findByText("Related information is unavailable for this record. Open a visible post next.")).toBeInTheDocument(); + expect(screen.getByRole("button", { name: "Export CSV" })).toBeDisabled(); + expect(screen.getByRole("button", { name: "Export JSON-LD" })).toBeDisabled(); + expect(screen.queryByRole("region", { name: "Exact values" })).not.toBeInTheDocument(); + expect(screen.queryByRole("complementary", { name: "Node evidence" })).not.toBeInTheDocument(); + expect(screen.queryByRole("button", { name: "Load next relation page" })).not.toBeInTheDocument(); + expect(screen.queryByText("Demo public post")).not.toBeInTheDocument(); + }); + + it("denies exports even when a supplied denied state retains an earlier payload", () => { + render( + , + ); + expect(screen.getByRole("button", { name: "Export CSV" })).toBeDisabled(); + expect(screen.getByRole("button", { name: "Export JSON-LD" })).toBeDisabled(); + expect(screen.queryByText("Demo public post")).not.toBeInTheDocument(); + }); + it("lets keyboard users open node and edge evidence", async () => { const onSelectPost = vi.fn(); const onOpenEvidence = vi.fn(); diff --git a/frontend/src/components/OntologyExplorer.tsx b/frontend/src/components/OntologyExplorer.tsx index fb05b0144..96456f4d2 100644 --- a/frontend/src/components/OntologyExplorer.tsx +++ b/frontend/src/components/OntologyExplorer.tsx @@ -152,6 +152,8 @@ export function OntologyExplorer({ if (cancelled) return; if (!cursor) setLoaded(null); if (error instanceof BackendError && (error.status === 403 || error.status === 404)) { + setLoaded(null); + clearSelection(); setStatus("denied"); return; } @@ -162,11 +164,14 @@ export function OntologyExplorer({ }; }, [accessToken, focusType, focusId, knowledgeCutoff, cursor, pageRetry, provided, providedStatus, liveFocus]); - const visible = useMemo(() => filterNeighborhood(loaded, query), [loaded, query]); + const visible = useMemo( + () => status === "denied" ? null : filterNeighborhood(loaded, query), + [loaded, query, status], + ); const layout = useMemo(() => (visible ? layoutOntologyNeighborhood(visible) : null), [visible]); const selectedNode = visible?.nodes.find((node) => nodeKey(node) === selectedNodeKey) ?? null; const selectedEdge = visible?.edges.find((edge) => edge.edge_id === selectedEdgeId) ?? null; - const canLoadNextPage = Boolean(loaded?.next_cursor && accessToken && !provided); + const canLoadNextPage = Boolean(status !== "denied" && loaded?.next_cursor && accessToken && !provided); function resetFocus() { setFocusType(focusNodeType); From c6b272ae7542c1f686a5178259463252c9d7f243 Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 6 Sep 2026 19:30:41 +0900 Subject: [PATCH 2/8] fix(ontology): require replacement data after supplied denial --- ...ntology-denial-repair-desktop-20260906.png | Bin 0 -> 57800 bytes ...ontology-denial-repair-mobile-20260906.png | Bin 0 -> 44592 bytes .../src/components/OntologyExplorer.test.tsx | 27 +++++++++++++++++- frontend/src/components/OntologyExplorer.tsx | 16 +++++++++-- 4 files changed, 39 insertions(+), 4 deletions(-) create mode 100644 docs/screenshots/ontology-denial-repair-desktop-20260906.png create mode 100644 docs/screenshots/ontology-denial-repair-mobile-20260906.png diff --git a/docs/screenshots/ontology-denial-repair-desktop-20260906.png b/docs/screenshots/ontology-denial-repair-desktop-20260906.png new file mode 100644 index 0000000000000000000000000000000000000000..66d5b85bac7260d6da5fa8710a8917768a9d76a3 GIT binary patch literal 57800 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�pch79R#m?W2yBC~7|Lv75`uySw*DiTg!O37zrsCsrc~rZB~~Y8 zdv_6U2wk4%*+s?iv%>V^4)w;t5cca7(sDidp1K3Z|F>`%Da+YXHZ7nwNSzfn5ein8 zb|go|uCpT!BKeF$b~oxt{cJzlynB))h~Hrl>IQ=Vgglv3WS*^E;4|<8#p$~CCjIW{ zp)0%H(G;geqWgGbB9##M{o^?n>K=ltdKSi7@pjk-wQQ1Q`u9!9f)pQ7yY~?tzKxn z14&4d^Be42Nb7nVmDvo$1Lb73$5T)iM=AW4B{rNuu9KH z^}KGDhgaC4!|t|OrqhPn<5fxxHQD!fd%Yllf%M*-qm_>K!&>Wa;+EMD=9(35!NTDyAx9M z615XTD2VFrGuEAZYkQ1Es5X<h9K4kR z?>PnM2ZJ8Qa|LuOZzPozT`94CjcW_7pl%g7N*E%s9Pw1f)-iuz#r1cYLC8`khaG<= z4}3+`Pv~U@%Gkn@yS&U+dxI896iWRp%x}s!c@#s-%0e#Bib+D;ZCm%}z#M(%@0qIc zL6Y!ZB9t{u<{MvGi-qvPameIN0g*}fKD{lKvwh95T?t&;euAvuEp#MnzCnoq zHHr0(?9NwNAyYVEImTQ$xeOO#3nUXV(8Xrf`eD!`=)v1A65jg~_e^TIjLrB^9J<08 zGW27r9|d7#4U^p{^q9;Z&hAMPCFVn+g|?*ftP?_yy{*TjRAe69g84i03P}f;g~;{K zoO(20NoA!yA6TRxqDB~p70_<@+%dl|FBN0xXh`?TxKGNy=fev**-B!Vzh0@0+p^{& zWT?nMBYNo$2=Q9E<(&hmvk(1!w|DxQJ_e5#=s{RV3a}2N$@pYZXXT;4n3N^G#^)}( zV=1rcVoQP{&EJ7nWj|R}XOYZd5{`mguEfov9L%;-($Sq%=T)R)%$*wY%DJAJrH}(> z)=6iQZ|lu4MxQ&1bfmKdfvUUl!`5fDam_@T$P+EotT4Ydck$A_k%4#Ur5aiO~ zviqf*`SJ*9x2fv$-MS*T9S@E5va@vJz{I0fkPHj=u9mzxI-Kx9XwRVeO%8bvWd_$j z^(^Xpcy+zV{kpc4pY`-iQ8GxT#i^f5bjz){VCJS}#)BNrUQf+_m$CuF6_Ba>Fvvz9X`)$I_O3N^yOmnjP(Q{bCH~Y{A~vYU z72LPq_`pV#7w30_-*F|2Sr8^)G%8D3j7*a7E3BM+zrT#m*4(JCF(Q0rj2kc#>!{3$ zDK}zfu7~5-!^;sx{=KoXu(r}yXiov}f#aBJF3lqsGU=d6x5up@5iS^MDH7` zY1quO(wq-ekS3AAju>(SxgwM_x5H6#MbK!S!H%>W*=sS{)hS44fb>$T9V=gVn2tE* zC`{?bE;=W9ojGyBZMnzDu)p6GTFocV=qN#N zT`#tsdQL!wpFS4#rptnsE^OaNE;g6m#&AZtkVlu zR%8)mC!zm(dbcPIQb%&6RP*V~rT8Hq7IJXvHXmx2Do%)#% zioJH2`_#7xjtAjBj3;B|jY4vQUsX8`e|@#%vx&eGFhXc?&avEnwrt3gX0b5UO~Itx-4Ua=#5Z?gjxJoyPDr5$x2e`5D>Q%WG@;ZR)uE(e47jex1t%~~3v z{9ufRjg|@YPC3y|r(RsWaJWZ&aj5bF{|!Q@W3tK}Z*9eq#pF=v+@>A+RnYvEy~a$T zsHrV|h9|^ooi4Tv3J7J*c&+l<80!4$5Tqf@*bcmtflDiAu{eknNyEC~4w_+)Z&3xeiSf zVXhUQlzH1QJr+;}c2{vuj9GmU=j%=90(0!Gh}!{nMLt3Bd$wy9IFnQ67TgaMq}88G zhnxRZk06C71HA-pM6nx*IwMwrAop81Qa>`yd93rfX{YB!a*$?Pw$y~p#&vsfTX!Gh5PAGhdkhhCAk zAk>zx>$3XfJql5C^ERP|%?j?@Or5qJFXOtuADXWC#f-N1qp{;G+d|wT;kGvd7Vu|PaH+}L$m&j_@)yHW8og`*DuGt=wXQKt! zLZ72U5T(s0O@JVv)YARWa=X90V0hO*SG63?2q-ppGk@<>C8b7mZ!?wRRCTAb3~IFK z+KgRd>ZffPvasI_tLjW|^ex*e%2!Fga}dNHLZ({97>E2ux`;~4j+@B{V+t1%O#FmxW}g43{7?dF{PkE z?Hv*hq#$i?5eLQ0MfVk9eIRid$~GwJWb!TtR+z)uajFFr!_|>|J#B}P1mxK-W<9x8 zTXzEDptwo(5?Ah)%`&}4or<+{qV>~AHV|@Z?dMdIysNE&Qw>=4$57E3P4A_~S=S312 z&V!jw!CEdkKDWY@GAXbbeozWoqp8``)99%Y zr^=iYdJUt*k#R_L__tnAK&BvZ<)mOGNNP+9wC%SUwxhOhVqt#(VG+xT5nCQENDpSB zfV%!AMZ4|lJ@uD5)q86iyNB>AqB^Q-Jh!vG_Ua)ap%){5LfM~gp+bLCqswF$A;b0p zR2Ar4S-Om3kBXe4`C9ER2EPQl&Yqr6>=Td|7#Bgb76RNJM_5=RC3q;n9iIT@*o_J}}?eG-; zVqAX-@RLqYR+syV)|bMe;SF2p%w*J|jpn`VJ9sa)V`DYmRVNIUY7(5(Bv|gJ-!JQx z-Gh4L6(P{T!i&^8!gk?)!P4Hjg}Ysh;<4t&da zMrcm3lEX6dB7?^)nwNCmn=`frlrb-yc=lLMW4DpgZ>=mjU#ZM;Yn!#P zP(N}e^HO`(dm)$tr}Gl1 zK-A!tUlR|ui8`pLR`&7ylR;Qg^QnHkrDh8?8A9=!ynZoxtZgerawOl z6|;7!RwDDKt~D0FKFVs9}LSyIc4Fk}@TO7`Yc zpOI}de*QW5Nh3v|cC;RwzBX3b7sSj@q<9%k9WI?bGP&wFEE>bnSFKsLGHmGW_OxGJ zBPz@1$gA~>ka;S=&Epa;qT&!_l~GVk@R}S8EI^VMY!Q{K8Q3H1vg?mfx!ro@m+F3+ zb;guv1UlW(<~V@tx9qU$dyOoGqX^_#^=tFG3?&vl@Xdm7qU6Dtb$)%ZoG;RZL|Gz< zv25_QR`hR2!w?dBEg3*0X?9-QsPCu~H#TWxRP27_g&q{RRJEwd=$?%)%&%h<`W(`@ zl7Y90m$n>Fc!aGZ_9z$&uX`9`Qf9|sY5B&Gw!n`;ZxA6=cWK6F8PeyXWf;xr3eWWt zbZul}ZjsRWPrtPOj;bzOP33;f-A<|W8jklkv{3PiM=p;2S++XF*SRWhXEs@2tm2VD z4Q6ySPPUmcujiD~mNv$gD2I{7tQRJU*n_32_kutRa4)KkmnFfbwOBAOGP+ZnIf)|7 zkFwSl0)B2XAs6I+v-MBTu_C}Ih`wvhseY52CD!+)c!;@ek6y5e{cuYhFJQRrW7o)w z2Sp;{zMJxWuS0ZZSE7vl5N#^Xsf6VK_Z5URTKi4K>7B=R-v#&xR#f5QUl>%&wWFtJ zgnR-LSh>FR0wwdp8GD83gbJH#khhbawmt#~&5U6|%ogLZGH01kFK%f>chS5zKH=bI z%hS|ffY@c-u6PMv^GeUgl=af%DDB;iu#e^mOzU;Xk{uCeIwAsTNHCkl5XpnwV#7(pnq z7|2>@TqWsd1=->7EoG}_O(I-J?MlVVx|-XBiAzous`^&mD|wAM>mJRPAz)A}4U_N- zU_z-_ZqN6-PTpvnctUIwuZ2K2Jn~T~#s$IhFL%2ti-bk24KwnLT<~{;#|}(t0IVR8 zqLv#8AunZvnWZlPqDIU!rq5)t>0WzicD9H8;xq-IpDfAgT)3||70JUN3dsl4Q>uzA^T{n6 zBUsEqBh2XV1cKvkh)^%6gtcT{rFl)9I(VAV?l>-ff&?n8pjaMS^tOhcw(TBnV*(Oz zO^d7qLA;^PEKDqR$0gt1UkC=Z+FPVw6fNa0wGaH8i0ydgX2=``)pd5Ty=EneLmt1dFb77ZeXtKpfQ3_K5o2o!Rw^&eP@5*qv zG@(!KBuzcFC+q3cW<$uUU0VhC+r}4StVkI@CeEsz-v)yOMKX&ed zetfQp6@;D_m&AQ5nEZw^~=#5}QJNvs63 zOR%KI`6Diml?5ZpZAv9{wRX_>rS`tzF56H|d8=TQveW@ElKO>1eq6!IK0g8g zm!j6g0aCp_lUL~t3_ZJf99#Co#jsqsVexh-0+Yhrscl+!hO@?{5|o$g08CU+D=zZz z&kzxTnr(6u@e}@QuppF(k%CmM6Wv?qo5R)|*8&w->OR)NdV3<T^drf&2ldrC+e;=mY&99lsUL)P<;NMuO88vvY`GZxy_P{Q8<)#wxXbWnn zx5lrLqR=8zR8HMS!GOtfS@48^5j5J04&+8TnQg0h_VM`TKBrI?LKPs*C7D63#vXOr~}c&v9~B+0AyK}Z!+kDHjq3?=Tc*1BRz6aTpXJd)XKZ+ z4w8QSb?%Nig34-o@ie5Ndcq+;?H)oX$pxU<)J+2 zr^ZLP+n3q1dgG7^bTD4E_B?m;O_U*kcct>02nFQFjWMn78~1A@N~~M3t7X>19sQ?_ zKY&!yyk5REc0X8xvL-+lqQ?~&mH@5NaVdJG(cD+;sEdlVkp=ea+}xhVE7qDExIh@<>%hHFD)MEewp_k7Dg)-m-_XlnY;A0E*-HaVb%=7_&5fr%P90p(GHxhHYh4;~k=MWTsGH+j8Fm45o zmt*w?>L&kslDokE7e}pNK5}VH^=~H{#O!*{a-8^Rd;(kfES2tw4)2K*FXLrax%rN9 zZh&~#K4Swf{uhYaoV;p4V~*DA$}G-2;mWT^n6dStFr z?ABd<+-n0u!e0#rylBq%CWoc3jz9a(z})>0P>dg?N_%6OabTK)0x z`wN4PnO`xhl}zEe8q2G)OCSREr}M$>2r&U+avz690=#F*;D=gkr4Na)?s$|534c{> z>IrO;vgBSRX~TOCpeh5kW`q0dbAf|?3~<a@3hj@zO6yU0Fwtg2d2gp(-=UWo63|4shXQFPpyHIA@@x&jqFTn5`PICDg2p zEAne(^?};rapm6Hi(_0AmP``KMW8iV=ddfE1cdxkp$D~ky**%S`+x!;lEi@k8H6cf z57hB{5{02Ke{hfuNw|pvmgw7&8B^pOy<>~};y@|!eyZUSawN~7!nA*2-@X7z4B}tx ziU-<5AMIpnE-9mTf_)f431}eg6)rtE#>~FV9_Od}?2DjY#1VjnX<3xf8B@Qh^QwfO z+gTJCE4S4HX7%WZK3E@Qu_p)|H6%`skCLtuOR>1{_9!fvkB!3`Q77&`DfkMqb3;Rl zrTEIw4^0oVDddW&V6INxeF}Vi{>_$AzusNYLS!fh`JtMsI};6RW>a-{sWMm2vEB(o zu&%0iJaq8~Q<)!H$6JPD44#!tHs28?DG#CZ!cCQLz-w z%%>46<}RlnfY93*m4?lKMemfbf+H{}GH&fGsQX5`W)L*RhdQ}#0Ii1~!|Xo3^`c=m zw~kwQ2qHCm+vW@~xw>_tH8h+Be` z9SH7P{((O~h4iI{GS6FYH;}uv7U!%ieK4kN$Ptg6`3YC4#rG(H#it#!!I=t|ChaO7 zx5u<9K|8mWhOITA+hdPXV>N!L@oEbFsrT)=TFew|!x9~AZJqb16o(;lYIt=SWW28zt11rslG+`50+!&T5^wm(w$WPUX#9LU|Sw+{VgO(lDDR2<)WL`Dlr^osiy7de_XZDIrZszKg zr@Tp}0pJhpIhJW>+if*a16;g!1(v+C&D88)jbLQKLZ+?88usHa_B;_@7CyTWrem|8Fjq$AFW4>6sk=Gn>ecV`^W z1AB~G)${Zh646o)L-__E4*KPn-Wj~!%NAvX+@IIjXixN{YBffvSwU4>K^1N$A_Fqj^Sk-e#cn zmTxgf18m>pL;ceewE4M$f#rG+>pwJNYj=`G3y=_}41=*DCqfD*2y@UQcMP z$^$DseB2lCU-57Lzq|J+P;g#UYD~Wb6L>*$e1a!WFcxn$&|^$8z)wy*d!qa}|KaNo F{|6m5(O3Wg literal 0 HcmV?d00001 diff --git a/docs/screenshots/ontology-denial-repair-mobile-20260906.png b/docs/screenshots/ontology-denial-repair-mobile-20260906.png new file mode 100644 index 0000000000000000000000000000000000000000..5c89af3eea3059c22d4ce5eddc356bf8195648f5 GIT binary patch literal 44592 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 literal 0 HcmV?d00001 diff --git a/frontend/src/components/OntologyExplorer.test.tsx b/frontend/src/components/OntologyExplorer.test.tsx index f748681af..9dd9a9b64 100644 --- a/frontend/src/components/OntologyExplorer.test.tsx +++ b/frontend/src/components/OntologyExplorer.test.tsx @@ -266,7 +266,32 @@ describe("OntologyExplorer", () => { expect(screen.queryByText("Demo public post")).not.toBeInTheDocument(); }); - it("denies exports even when a supplied denied state retains an earlier payload", () => { + it.each(["ready", undefined] as const)("does not restore a denied supplied payload on status-only recovery (%s)", async (recoveredStatus) => { + const payload = neighborhood(); + const { rerender } = render( + , + ); + await userEvent.click(screen.getByRole("button", { name: "Select node: Post Demo public post" })); + await userEvent.type(screen.getByLabelText("Search within this neighborhood"), "Demo"); + rerender( + , + ); + expect(screen.queryByRole("complementary", { name: "Node evidence" })).not.toBeInTheDocument(); + rerender( + , + ); + expect(screen.getByRole("button", { name: "Export CSV" })).toBeDisabled(); + expect(screen.getByRole("button", { name: "Export JSON-LD" })).toBeDisabled(); + expect(screen.queryByText("Demo public post")).not.toBeInTheDocument(); + rerender( + , + ); + expect(screen.getByRole("button", { name: "Export CSV" })).toBeEnabled(); + expect(screen.queryByRole("complementary", { name: "Node evidence" })).not.toBeInTheDocument(); + expect(screen.getByLabelText("Search within this neighborhood")).toHaveValue(""); + }); + + it("denies exports when initially supplied a denied payload", () => { render( , ); diff --git a/frontend/src/components/OntologyExplorer.tsx b/frontend/src/components/OntologyExplorer.tsx index 96456f4d2..bad572ce9 100644 --- a/frontend/src/components/OntologyExplorer.tsx +++ b/frontend/src/components/OntologyExplorer.tsx @@ -1,4 +1,4 @@ -import { useEffect, useMemo, useState } from "react"; +import { useEffect, useMemo, useRef, useState } from "react"; import { BackendError, fetchOntologyNeighborhood, @@ -103,6 +103,7 @@ export function OntologyExplorer({ const [cursor, setCursor] = useState(undefined); const [pageRetry, setPageRetry] = useState(0); const [liveFocus, setLiveFocus] = useState(false); + const deniedPayloads = useRef(new WeakSet()); function clearSelection() { setSelectedNodeKey(null); @@ -122,6 +123,14 @@ export function OntologyExplorer({ useEffect(() => { const useProvided = Boolean(provided) && !liveFocus; if (useProvided && provided) { + if (providedStatus === "denied") deniedPayloads.current.add(provided); + // A status change is not a newly authorized projection. + if (deniedPayloads.current.has(provided)) { + setLoaded(null); + clearSelection(); + setStatus("denied"); + return; + } setLoaded(provided); setStatus(providedStatus ?? statusFromPayload(provided, knowledgeCutoff)); return; @@ -165,8 +174,9 @@ export function OntologyExplorer({ }, [accessToken, focusType, focusId, knowledgeCutoff, cursor, pageRetry, provided, providedStatus, liveFocus]); const visible = useMemo( - () => status === "denied" ? null : filterNeighborhood(loaded, query), - [loaded, query, status], + () => status === "denied" || (!liveFocus && providedStatus === "denied") + ? null : filterNeighborhood(loaded, query), + [loaded, query, status, liveFocus, providedStatus], ); const layout = useMemo(() => (visible ? layoutOntologyNeighborhood(visible) : null), [visible]); const selectedNode = visible?.nodes.find((node) => nodeKey(node) === selectedNodeKey) ?? null; From 25688661c05e48f2b95470ce23add24b8827ef30 Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 6 Sep 2026 19:31:36 +0900 Subject: [PATCH 3/8] docs(gap): refresh exact-head review and repair evidence --- docs/product-technical-gap-baseline.md | 65 +++++++++++++++++++++++++- 1 file changed, 63 insertions(+), 2 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index f0fb34a15..8c7f800b6 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1,5 +1,66 @@ # Product & Technical Gap Baseline +## Review repair audit — 2026-09-06 19:20 KST + +This update supersedes queue and acceptance claims in the earlier audit below. +Remote `main` remains `83eba56149eb802cd63642c507c324c9976ec78e`. +The fully paginated inventory has **121 open PRs (114 draft, 7 ready)** and +**16 open issues**. The six previously ready heads listed below are unchanged; +PR #959 entered review at `3db3a477bebd15ca335ec29a0eff65664db613c9`. +REST exact-head checks were re-read for all seven ready PRs. Queued and +cancelled checks are not success. GraphQL CLI quota was exhausted; review +thread lookup through the connector found one unresolved #959 documentation +thread. No new independent approval or protected merge is claimed. +The existing six squash auto-merge settings remain enabled. + +### Selected user-visible repair and evidence boundary + +PR #959's supplied-data path still retained a denied neighborhood, and changing +only its status to ready made the same records exportable again. Two new +rerender regressions reproduced this defect before repair. The component now +discards loaded data and selection/search state, remembers denied object +identities weakly, and requires a replacement projection before showing data +again. The immediate denied-prop render also omits the old projection. No +source record, Voice, inference, API, schema, release version, or owner-engine +contract changes. Existing controls, notices, tokens and Storybook scenes are +reused; fresh projections do not restore a previously selected evidence drawer. + +Implementation commit: `c6b272ae7542c1f686a5178259463252c9d7f243`. +Lint, TypeScript/Vite build, and Storybook build passed. Chromium rendering at +1440px and 390px confirmed disabled CSV/JSON-LD exports, zero old evidence +tables/drawers, and no horizontal overflow; both screenshots were inspected: +[desktop](screenshots/ontology-denial-repair-desktop-20260906.png) and +[mobile](screenshots/ontology-denial-repair-mobile-20260906.png). +The new status-recovery regressions failed twice before repair and passed in +the bounded full-file attempt; that attempt also had six existing UI failures. +Subsequent isolated execution hit test-process startup timeouts under observed +host load averages around 28–36. A separate layout file passed nine tests, but +the combined run had one process-startup error. These are not a green full +suite. No timeout, warning filter, test assertion, or CI gate was weakened. + +The current LineageWeave PRD, ADR 0184 and ADR 0256, and the upstream +contextual-orchestrator product/architecture authority were read before this +repair. Canonical remote names were rechecked: `ContextualWisdomLab/LineageWeave`, +`RankWeave`, `ThreadWeave`, `TEPP`, `contextual-orchestrator`, and lowercase +`ContextualWisdomLab/disksage`. No research-derived policy is added. Context7 +returned a quota error and DeepWiki had no indexed LineageWeave documentation; +neither is presented as verified authority. React's official reference supplied +the effect/ref lifecycle contract. + +All **121 current PR file lists** were retrieved. The eight distinct ADR-number +collisions listed below remain present; no distinct added migration filenames +share a numeric prefix. This is filename/ownership evidence, not complete +cross-branch SQL or API compatibility. Existing Voice/export PRs remain the +owners of their respective changes, and no child was retargeted before its +parent's protected merge. No in-progress repository Actions run was returned, +so no runner job was cancelled. + +The earlier runtime counts and k6 probe below are dated evidence from the +previous candidate, not measurements of this repair. Authenticated PostgreSQL +API/rendered UI acceptance, full asynchronous end-to-end load and saturation, +and all Voice truth/cutoff/PROV-O acceptance remain **unverified**. Synthetic +rendering and local regression tests must not promote those conditions to done. + ## Current audit — 2026-09-06 This section supersedes the dated queue snapshots below. Audited protected @@ -117,8 +178,8 @@ Do not merge these child branches onto an unprotected parent; protect the parent first, retarget, and gather new head/base/review/check evidence. Existing owner PRs remain intact: #780 carries Voice export authority; -#934 singleton JSON-LD page relations; #935 filtered export parity; -#936 correction history; #937 evidence visibility/write admission; #929 +PR #934 singleton JSON-LD page relations; #935 filtered export parity; +PR #936 correction history; #937 evidence visibility/write admission; #929 versioned translations. The denial fix changes `OntologyExplorer.tsx` and its regressions only; shared Storybook/inventory/baseline edits need reconciliation when those PRs reach main. API, schema, ADR identity, and release number are From c2c3c3c4116bb0e609170a8fd56fece3f227ceaa Mon Sep 17 00:00:00 2001 From: Codex Date: Sun, 6 Sep 2026 19:39:19 +0900 Subject: [PATCH 4/8] test(ontology): isolate denial state transitions from typing delays --- docs/product-technical-gap-baseline.md | 16 +++++++++++++++- .../src/components/OntologyExplorer.test.tsx | 8 ++++---- 2 files changed, 19 insertions(+), 5 deletions(-) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 8c7f800b6..d2cbaf9ef 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -36,7 +36,21 @@ the bounded full-file attempt; that attempt also had six existing UI failures. Subsequent isolated execution hit test-process startup timeouts under observed host load averages around 28–36. A separate layout file passed nine tests, but the combined run had one process-startup error. These are not a green full -suite. No timeout, warning filter, test assertion, or CI gate was weakened. +suite. The final state-transition regression uses synchronous click/change +events instead of per-keystroke simulation; its two cases pass in isolation +with every assertion and the original timeout retained. Lint and production +build evidence concerns the unchanged production component. Full-suite +acceptance still requires a clean run. No timeout, warning filter, test +assertion, or CI gate was weakened. + +At remote repair head `25688661c05e48f2b95470ce23add24b8827ef30`, +GitHub's authenticated browser confirmed normal squash auto-merge enabled, +the documentation thread resolved, and independent approval still required. +Fourteen exact-head Checks were queued and two were skipped; none of those +states is terminal success. CLI/connector GraphQL mutations had failed on +quota, so the standard web auto-merge control was used with bypass unchecked. +No merge SHA is claimed. The following test/documentation-only update +requires fresh Checks on its own head; predecessor results do not transfer. The current LineageWeave PRD, ADR 0184 and ADR 0256, and the upstream contextual-orchestrator product/architecture authority were read before this diff --git a/frontend/src/components/OntologyExplorer.test.tsx b/frontend/src/components/OntologyExplorer.test.tsx index 9dd9a9b64..0b9a34055 100644 --- a/frontend/src/components/OntologyExplorer.test.tsx +++ b/frontend/src/components/OntologyExplorer.test.tsx @@ -1,4 +1,4 @@ -import { render, screen, waitFor } from "@testing-library/react"; +import { fireEvent, render, screen, waitFor } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { describe, expect, it, vi } from "vitest"; import { BackendError, fetchOntologyNeighborhood } from "../api"; @@ -266,13 +266,13 @@ describe("OntologyExplorer", () => { expect(screen.queryByText("Demo public post")).not.toBeInTheDocument(); }); - it.each(["ready", undefined] as const)("does not restore a denied supplied payload on status-only recovery (%s)", async (recoveredStatus) => { + it.each(["ready", undefined] as const)("does not restore a denied supplied payload on status-only recovery (%s)", (recoveredStatus) => { const payload = neighborhood(); const { rerender } = render( , ); - await userEvent.click(screen.getByRole("button", { name: "Select node: Post Demo public post" })); - await userEvent.type(screen.getByLabelText("Search within this neighborhood"), "Demo"); + fireEvent.click(screen.getByRole("button", { name: "Select node: Post Demo public post" })); + fireEvent.change(screen.getByLabelText("Search within this neighborhood"), { target: { value: "Demo" } }); rerender( , ); From cb5569b96f124f2789ca80b1ac6c2e996bba5aad Mon Sep 17 00:00:00 2001 From: Seongho Bae Date: Sun, 6 Sep 2026 20:46:30 +0900 Subject: [PATCH 5/8] fix(ontology): restart after continuation denial with refreshed credential --- .../src/components/OntologyExplorer.test.tsx | 30 +++++++++++++++++++ frontend/src/components/OntologyExplorer.tsx | 25 ++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/frontend/src/components/OntologyExplorer.test.tsx b/frontend/src/components/OntologyExplorer.test.tsx index 0b9a34055..40039dd11 100644 --- a/frontend/src/components/OntologyExplorer.test.tsx +++ b/frontend/src/components/OntologyExplorer.test.tsx @@ -266,6 +266,36 @@ describe("OntologyExplorer", () => { expect(screen.queryByText("Demo public post")).not.toBeInTheDocument(); }); + it.each([403, 404])("restarts at the first page after continuation denial and credential refresh (%s)", async (status) => { + const fetchNeighborhood = vi.mocked(fetchOntologyNeighborhood); + fetchNeighborhood.mockReset(); + fetchNeighborhood + .mockResolvedValueOnce(neighborhood({ truncated: true, next_cursor: "page-2" })) + .mockRejectedValueOnce(new BackendError("/api/ontology/neighborhood", status)) + .mockResolvedValueOnce(neighborhood({ next_cursor: null })); + + const { rerender } = render( + , + ); + + await userEvent.click(await screen.findByRole("button", { name: "Load next relation page" })); + expect( + await screen.findByText("Related information is unavailable for this record. Open a visible post next."), + ).toBeInTheDocument(); + await waitFor(() => expect(fetchNeighborhood).toHaveBeenCalledTimes(2)); + + rerender( + , + ); + await waitFor(() => expect(fetchNeighborhood).toHaveBeenCalledTimes(3)); + expect(fetchNeighborhood).toHaveBeenNthCalledWith( + 3, + "synthetic-token-b", + expect.objectContaining({ cursor: undefined }), + ); + expect(await screen.findByRole("button", { name: "Select node: Post Demo public post" })).toBeInTheDocument(); + }); + it.each(["ready", undefined] as const)("does not restore a denied supplied payload on status-only recovery (%s)", (recoveredStatus) => { const payload = neighborhood(); const { rerender } = render( diff --git a/frontend/src/components/OntologyExplorer.tsx b/frontend/src/components/OntologyExplorer.tsx index bad572ce9..adf3a4c95 100644 --- a/frontend/src/components/OntologyExplorer.tsx +++ b/frontend/src/components/OntologyExplorer.tsx @@ -104,6 +104,12 @@ export function OntologyExplorer({ const [pageRetry, setPageRetry] = useState(0); const [liveFocus, setLiveFocus] = useState(false); const deniedPayloads = useRef(new WeakSet()); + const deniedLiveRequest = useRef<{ + accessToken: string; + focusNodeType: string; + focusNodeId: string; + knowledgeCutoff?: string; + } | null>(null); function clearSelection() { setSelectedNodeKey(null); @@ -142,6 +148,17 @@ export function OntologyExplorer({ setStatus(providedStatus ?? "empty"); return; } + const deniedRequest = deniedLiveRequest.current; + if ( + deniedRequest?.accessToken === accessToken && + deniedRequest.focusNodeType === focusType && + deniedRequest.focusNodeId === focusId && + deniedRequest.knowledgeCutoff === knowledgeCutoff + ) { + setLoaded(null); + setStatus("denied"); + return; + } let cancelled = false; setStatus("loading"); fetchOntologyNeighborhood(accessToken, { @@ -152,6 +169,7 @@ export function OntologyExplorer({ }) .then((payload) => { if (cancelled) return; + deniedLiveRequest.current = null; setLoaded((current) => cursor && current ? accumulateNeighborhoodPages(current, payload) : payload, ); @@ -161,6 +179,13 @@ export function OntologyExplorer({ if (cancelled) return; if (!cursor) setLoaded(null); if (error instanceof BackendError && (error.status === 403 || error.status === 404)) { + deniedLiveRequest.current = { + accessToken, + focusNodeType: focusType, + focusNodeId: focusId, + knowledgeCutoff, + }; + setCursor(undefined); setLoaded(null); clearSelection(); setStatus("denied"); From e07821e57e52124f88bbc8f4db1801c04bdc6e6d Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 7 Sep 2026 13:07:53 +0900 Subject: [PATCH 6/8] fix(ontology): retire evidence when request scope changes --- AGENTS.md | 17 +++++++ docs/product-technical-gap-baseline.md | 31 ++++++++++++ .../src/components/OntologyExplorer.test.tsx | 50 ++++++++++++++++++- frontend/src/components/OntologyExplorer.tsx | 11 +++- 4 files changed, 105 insertions(+), 4 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 3af4169bc..1cbef3fcd 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -422,3 +422,20 @@ columns). Do not silently rewrite either historical form. The SHACL shapes graph (`docs/ontology/lineageweave-kg-shapes.ttl`) is the closed-world data-validation boundary for DB-to-RDF projections and is published beside the ontology. + +## Verified maintenance practices + +- Bind authorization-sensitive asynchronous UI results to the request lifecycle, + not token equality alone. Exercise deferred success and failure across A → B → A + and unmounts; retired requests must not update data, errors, loading state, or + trigger follow-up reads. Use behavioral tests rather than source-text guards. +- A test deadline failure is not a causal RED assertion. Record timeouts separately + and diagnose the driver or runtime before claiming a regression is reproduced. +- Validate local login from the documented `http://localhost:15173` origin. An IP + alias can fail the issuer redirect allowlist even when the canonical origin works; + do not broaden redirect permissions to accommodate a test-only alias. +- Release eligible changes through the existing protected owner workflow and its + GitHub Secrets. Verify the revision, checks, approval, published version, and + runtime outcome separately. Inspect secret metadata only; never expose values. + Preserve reusable lessons here as work proceeds, without transient logs or real + source records. diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index d2cbaf9ef..4fccec622 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1136,3 +1136,34 @@ The ONET rows stacked into base branches (#743/#745/#746/#740/#732) reached `main` together through the #759 promotion; their per-base merge records are historical evidence only. The job-architecture artifact ship originally via #749 is now re-verified on `main` from the promotion. + + +### Ontology external scope retirement (2026-09-07, PR #959) + +Changing the credential, cutoff, or external focus while a continuation is pending +left the prior node visible. All four behavioral cases failed the absence assertion +on the prior implementation; earlier deadline-only failures were not counted as +causal reproduction. A guarded input-state reset now discards the loaded projection, +selection, and cursor before committing the changed scope, while preserving the +existing denial bookkeeping. Deferred prior responses remain inadmissible. + +The implementation follows the existing ADR 0124 cursor-scope and ADR 0184 +authorized-projection contracts. React's guarded same-component state adjustment +avoids a stale committed child render without remounting and losing denial state. +Reference: React. (n.d.). *You might not need an Effect*. +https://react.dev/learn/you-might-not-need-an-effect#adjusting-some-state-when-a-prop-changes + +Automatic eligible deployment and continuous AGENTS.md maintenance are now part +of the existing hourly loop. Protected main currently exposes ontology Pages +publication; this Draft UI repair is not a released artifact. The fast-mlsirm +publication workflow consumes `PIPY_TOKEN`; its last observed failed run stopped +at control-plane provenance verification before any package publication. Secret +availability was not established by the repository metadata query, and the +environment metadata endpoint returned 404; neither result establishes missing +organization credentials. No secret value was accessed. + +Validation: all four new scope cases passed after the repair. The complete two-file +Ontology suite included 35 tests: 33 passed and two existing keyboard/Voice cases +exceeded their unchanged five-second deadlines. This is not a green suite or +authenticated runtime acceptance. TypeScript and the production Vite build passed; +the existing 500 kB chunk warning remains. No package or runtime was deployed. diff --git a/frontend/src/components/OntologyExplorer.test.tsx b/frontend/src/components/OntologyExplorer.test.tsx index 40039dd11..36b0d4cb9 100644 --- a/frontend/src/components/OntologyExplorer.test.tsx +++ b/frontend/src/components/OntologyExplorer.test.tsx @@ -1,4 +1,4 @@ -import { fireEvent, render, screen, waitFor } from "@testing-library/react"; +import { act, fireEvent, render, screen, waitFor } from "@testing-library/react"; import userEvent from "@testing-library/user-event"; import { describe, expect, it, vi } from "vitest"; import { BackendError, fetchOntologyNeighborhood } from "../api"; @@ -161,8 +161,54 @@ describe("OntologyExplorer", () => { expect(container.querySelector('polygon[points="0,-16 20,0 0,16 -20,0"]')).not.toBeNull(); }); + it.each([ + ["credential", { accessToken: "token-b" }], + ["cutoff", { knowledgeCutoff: "2026-01-01T00:00:00Z" }], + ["focus", { focusNodeId: EVIDENCE_POST_ID }], + ["focus type", { focusNodeType: "node_person" }], + ] as const)("retires old pages before a changed %s loads", async (_name, change) => { + const fetchNeighborhood = vi.mocked(fetchOntologyNeighborhood).mockReset(); + let releaseOld!: (value: OntologyNeighborhoodPayload) => void; + let releaseCurrent!: (value: OntologyNeighborhoodPayload) => void; + fetchNeighborhood + .mockResolvedValueOnce(neighborhood({ truncated: true, next_cursor: "page-2" })) + .mockImplementationOnce(() => new Promise((resolve) => { releaseOld = resolve; })) + .mockImplementationOnce(() => new Promise((resolve) => { releaseCurrent = resolve; })); + const initial = { + accessToken: "token-a", focusNodeType: "node_post", focusNodeId: POST_ID, + knowledgeCutoff: undefined, + }; + const { rerender } = render(); + fireEvent.click(await screen.findByRole("button", { name: "Select node: Post Demo public post" })); + fireEvent.click(screen.getByRole("button", { name: "Load next relation page" })); + expect(fetchNeighborhood).toHaveBeenCalledTimes(2); + + const current = { ...initial, ...change }; + rerender(); + expect(screen.queryByRole("button", { name: "Select node: Post Demo public post" })).not.toBeInTheDocument(); + expect(screen.queryByRole("heading", { name: "Demo public post" })).not.toBeInTheDocument(); + expect(screen.getByRole("button", { name: "Export CSV" })).toBeDisabled(); + expect(screen.getByRole("button", { name: "Export JSON-LD" })).toBeDisabled(); + expect(fetchNeighborhood).toHaveBeenCalledTimes(3); + expect(fetchNeighborhood).toHaveBeenNthCalledWith(3, current.accessToken, { + focusNodeType: current.focusNodeType, focusNodeId: current.focusNodeId, + knowledgeCutoff: current.knowledgeCutoff, cursor: undefined, + }); + + await act(async () => { releaseOld(neighborhood()); }); + expect(screen.queryByRole("button", { name: "Select node: Post Demo public post" })).not.toBeInTheDocument(); + await act(async () => { releaseCurrent(neighborhood({ + focus_node_id: current.focusNodeId, focus_node_type_code: current.focusNodeType, + nodes: [{ ...neighborhood().nodes[0], node_id: current.focusNodeId, + node_type_code: current.focusNodeType, display_label: "Current scope record" }], + edges: [], exact_value_rows: [], + })); }); + expect(screen.getByRole("button", { name: /Select node: .*Current scope record/ })).toBeInTheDocument(); + expect(screen.getByRole("button", { name: "Export CSV" })).toBeEnabled(); + }); + it("keeps loaded pages visible when a continuation page fails", async () => { - const fetchNeighborhood = vi.mocked(fetchOntologyNeighborhood); + const fetchNeighborhood = vi.mocked(fetchOntologyNeighborhood).mockReset(); let rejectContinuation!: (error: BackendError) => void; fetchNeighborhood .mockResolvedValueOnce(neighborhood({ truncated: true, next_cursor: "page-2" })) diff --git a/frontend/src/components/OntologyExplorer.tsx b/frontend/src/components/OntologyExplorer.tsx index adf3a4c95..bb98b1df8 100644 --- a/frontend/src/components/OntologyExplorer.tsx +++ b/frontend/src/components/OntologyExplorer.tsx @@ -103,6 +103,7 @@ export function OntologyExplorer({ const [cursor, setCursor] = useState(undefined); const [pageRetry, setPageRetry] = useState(0); const [liveFocus, setLiveFocus] = useState(false); + const [inputScope, setInputScope] = useState({ accessToken, focusNodeType, focusNodeId, knowledgeCutoff }); const deniedPayloads = useRef(new WeakSet()); const deniedLiveRequest = useRef<{ accessToken: string; @@ -117,14 +118,20 @@ export function OntologyExplorer({ setQuery(""); } - useEffect(() => { + if ( + inputScope.accessToken !== accessToken || inputScope.focusNodeType !== focusNodeType || + inputScope.focusNodeId !== focusNodeId || inputScope.knowledgeCutoff !== knowledgeCutoff + ) { + setInputScope({ accessToken, focusNodeType, focusNodeId, knowledgeCutoff }); + setLoaded(null); + setStatus("loading"); setFocusType(focusNodeType); setFocusId(focusNodeId); setCursor(undefined); setPageRetry(0); setLiveFocus(false); clearSelection(); - }, [focusNodeType, focusNodeId]); + } useEffect(() => { const useProvided = Boolean(provided) && !liveFocus; From eba5a7224de3c2cee0a2693b2e426213251124c7 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 7 Sep 2026 13:11:32 +0900 Subject: [PATCH 7/8] test(ontology): verify keyboard evidence activation --- AGENTS.md | 5 ++++ docs/product-technical-gap-baseline.md | 29 +++++++++++++++++++ .../src/components/OntologyExplorer.test.tsx | 19 ++++++++---- 3 files changed, 48 insertions(+), 5 deletions(-) diff --git a/AGENTS.md b/AGENTS.md index 1cbef3fcd..963d0d1f2 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -439,3 +439,8 @@ published beside the ontology. runtime outcome separately. Inspect secret metadata only; never expose values. Preserve reusable lessons here as work proceeds, without transient logs or real source records. + +- Keyboard acceptance must send keyboard input to focused controls; a pointer-click + test with a keyboard title proves neither Enter nor Space activation. Keep both + native-button and custom SVG-control activation covered. Programmatic focus in + a unit test does not establish browser Tab-order acceptance. diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index 4fccec622..e6ae4fb60 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1167,3 +1167,32 @@ Ontology suite included 35 tests: 33 passed and two existing keyboard/Voice case exceeded their unchanged five-second deadlines. This is not a green suite or authenticated runtime acceptance. TypeScript and the production Vite build passed; the existing 500 kB chunk warning remains. No package or runtime was deployed. + + +### Keyboard acceptance and publication eligibility follow-up (2026-09-07) + +The ontology test named keyboard acceptance used pointer clicks only. It now +exercises both Enter and Space on focused SVG node/edge controls and their native +evidence buttons, preserving the evidence destination assertions. This proves +activation, not real-browser Tab ordering. The complete two-file suite included +36 cases: 35 passed, including both keyboard cases and the previously timed-out +Voice case; one credential-transition case hit the unchanged five-second limit. +The suite therefore remains non-green. + +A separate diagnostic CPU-profile run of that credential case passed in 1.15 s +(test body; 4.13 s total). Of 4082.7 ms sampled, 475.8 ms was idle, 451.5 ms +readFileUtf8, 423.3 ms module wrapSafe, and 111.8 ms garbage collection. These +process-wide import/runtime samples do not establish the cause of earlier +intermittent timeouts or prove the authenticated page-latency target. No timeout, +assertion, or required test was relaxed. + +Colima still has 14 running containers; the three previously retired duplicate +services have not reappeared. No new stack or service was started. + +The fast-mlsirm v0.9.1 release tag still resolves to +`09f762ded35786dd1078222a4577ff09d649816f` and its GitHub release has no assets. +Publication run 32966867962 stopped because its control-plane revision had moved. +Fresh source checks also contain failed Rust study shards 3, 5, 7, 8, and 9. +Existing release work includes PR #1471 (v0.9.2, Draft) and PR #1692 (SBOM and +provenance); do not create a competing release path or re-dispatch v0.9.1 as +verified merely because core CI passed. No publication was dispatched. diff --git a/frontend/src/components/OntologyExplorer.test.tsx b/frontend/src/components/OntologyExplorer.test.tsx index 36b0d4cb9..1deac8f3b 100644 --- a/frontend/src/components/OntologyExplorer.test.tsx +++ b/frontend/src/components/OntologyExplorer.test.tsx @@ -376,7 +376,8 @@ describe("OntologyExplorer", () => { expect(screen.queryByText("Demo public post")).not.toBeInTheDocument(); }); - it("lets keyboard users open node and edge evidence", async () => { + it.each(["{Enter}", " "])("opens node and edge evidence with %s", async (activationKey) => { + const user = userEvent.setup(); const onSelectPost = vi.fn(); const onOpenEvidence = vi.fn(); render( @@ -394,14 +395,22 @@ describe("OntologyExplorer", () => { expect(screen.getByRole("columnheader", { name: "Valid from" })).toBeInTheDocument(); expect(screen.getByRole("columnheader", { name: "Valid to" })).toBeInTheDocument(); expect(screen.getByRole("columnheader", { name: "Evidence" })).toBeInTheDocument(); - await userEvent.click(screen.getByRole("button", { name: "Select node: Post Demo public post" })); + const nodeButton = screen.getByRole("button", { name: "Select node: Post Demo public post" }); + nodeButton.focus(); + expect(nodeButton).toHaveFocus(); + await user.keyboard(activationKey); expect(screen.getByRole("heading", { name: "Demo public post" })).toBeInTheDocument(); - await userEvent.click(screen.getByRole("button", { name: "Open evidence post" })); + screen.getByRole("button", { name: "Open evidence post" }).focus(); + await user.keyboard(activationKey); expect(onSelectPost).toHaveBeenCalledWith(POST_ID); expect(onOpenEvidence).not.toHaveBeenCalled(); - await userEvent.click(screen.getByRole("button", { name: /Select edge: mentions from/ })); + const edgeButton = screen.getByRole("button", { name: /Select edge: mentions from/ }); + edgeButton.focus(); + expect(edgeButton).toHaveFocus(); + await user.keyboard(activationKey); expect(screen.getByText(/Property IRI/)).toBeInTheDocument(); - await userEvent.click(screen.getByRole("button", { name: `Open evidence: ${POST_ID}` })); + screen.getByRole("button", { name: `Open evidence: ${POST_ID}` }).focus(); + await user.keyboard(activationKey); expect(onOpenEvidence).toHaveBeenCalledWith(POST_ID); expect(screen.queryByRole("img")).not.toBeInTheDocument(); }); From 96ce3de6190f1f66f140663f034427fd4d78d3a4 Mon Sep 17 00:00:00 2001 From: Codex Date: Mon, 7 Sep 2026 13:14:39 +0900 Subject: [PATCH 8/8] test(ontology): preserve current evidence across credential re-entry --- docs/product-technical-gap-baseline.md | 15 +++++++++ .../src/components/OntologyExplorer.test.tsx | 31 +++++++++++++++++++ 2 files changed, 46 insertions(+) diff --git a/docs/product-technical-gap-baseline.md b/docs/product-technical-gap-baseline.md index e6ae4fb60..542e47a22 100644 --- a/docs/product-technical-gap-baseline.md +++ b/docs/product-technical-gap-baseline.md @@ -1196,3 +1196,18 @@ Fresh source checks also contain failed Rust study shards 3, 5, 7, 8, and 9. Existing release work includes PR #1471 (v0.9.2, Draft) and PR #1692 (SBOM and provenance); do not create a competing release path or re-dispatch v0.9.1 as verified merely because core CI passed. No publication was dispatched. + + +### Ontology request re-entry verification (2026-09-07) + +Deferred success and 403 denial from the retired first A request cannot replace +or hide the current authorized projection after A → B → A. Two behavioral +cases now assert the current graph and both exports survive, without another +request. Existing per-request effect cleanup already satisfies this contract; +no second lifecycle mechanism was added. + +The latest complete OntologyExplorer plus stabilization suite passed 38/38 +cases in 16.66 s, with all existing deadlines unchanged. This supersedes the +previous non-green focused-suite result, while preserving its timeout history. +It does not establish a green full frontend suite, browser Tab order, current-head +hosted CI, or authenticated all-page performance. diff --git a/frontend/src/components/OntologyExplorer.test.tsx b/frontend/src/components/OntologyExplorer.test.tsx index 1deac8f3b..d6e1edee6 100644 --- a/frontend/src/components/OntologyExplorer.test.tsx +++ b/frontend/src/components/OntologyExplorer.test.tsx @@ -207,6 +207,37 @@ describe("OntologyExplorer", () => { expect(screen.getByRole("button", { name: "Export CSV" })).toBeEnabled(); }); + it.each(["success", "denial"])("ignores retired %s after credential re-entry", async (outcome) => { + const fetchNeighborhood = vi.mocked(fetchOntologyNeighborhood).mockReset(); + let resolveRetired!: (value: OntologyNeighborhoodPayload) => void; + let rejectRetired!: (error: BackendError) => void; + fetchNeighborhood + .mockImplementationOnce(() => new Promise((resolve, reject) => { + resolveRetired = resolve; + rejectRetired = reject; + })) + .mockImplementationOnce(() => new Promise(() => {})) + .mockResolvedValueOnce(neighborhood()); + const props = { focusNodeType: "node_post", focusNodeId: POST_ID }; + const { rerender } = render(); + rerender(); + rerender(); + expect(await screen.findByRole("button", { name: "Select node: Post Demo public post" })).toBeInTheDocument(); + expect(fetchNeighborhood).toHaveBeenCalledTimes(3); + + await act(async () => { + if (outcome === "denial") { + rejectRetired(new BackendError("/api/ontology/neighborhood", 403)); + } else { + resolveRetired(neighborhood({ nodes: [], edges: [], exact_value_rows: [] })); + } + }); + expect(screen.getByRole("button", { name: "Select node: Post Demo public post" })).toBeInTheDocument(); + expect(screen.getByRole("button", { name: "Export CSV" })).toBeEnabled(); + expect(screen.getByRole("button", { name: "Export JSON-LD" })).toBeEnabled(); + expect(fetchNeighborhood).toHaveBeenCalledTimes(3); + }); + it("keeps loaded pages visible when a continuation page fails", async () => { const fetchNeighborhood = vi.mocked(fetchOntologyNeighborhood).mockReset(); let rejectContinuation!: (error: BackendError) => void;