TŌSHI
← 影組 KAGE-GUMI

The Seer. Lift the veil.

Chrome extension · v0.4.88 · WebCenter page inspector

Open Tōshi on any WebCenter page and she names what it's built from: every dashboard, saved search and task, nested as it really is, each one a click from its editor. She reads every attribute label back as the internal name your scripts have to use, reads a workflow canvas into a legible node-link map, and turns a task whose workflow has errored into a support-ready recap in one press. Stop hunting the system to find what's in front of you.

X-ray the whole page map a workflow's canvas recap a workflow error scan-and-download support package
// LIVE

Live: Tōshi at work synthetic data · no customer info

The real extension running on a sample WebCenter project. Everything here is made up (generic names, a demo company), so this is exactly the tool, on nobody's data.

Open Tōshi on any WebCenter page and the panel names what the page is actually built from: every dashboard, saved search and task, nested as they really are, each one a click from its editor. Scoped to this page, not a whole-instance crawl.
Press Names and every attribute label is covered by the name WebCenter addresses it by, the one a script, a rule or an SQL view has to use. Hover a chip to get the rendered label back.
⧉ Workflow Map. A workflow canvas is pixels: a stack of <canvas> layers with no text to select. On the workflow editor one click (or M) reads the topology out of the XML and draws it as a legible node-link map on paper: every node at its real position, typed by ink and shape, every transition labelled. Zoom, pan, ⛶ Maximize, and export to Markdown, JSON or Zuan XML.
◈ Reference graph. The same engine pointed the other way (V): the References tree collapsed into a node-link graph, so a dashboard referenced by two or more parents stops hiding in an indented list and stands out as a hub, ringed and badged with its count. Dangling references are flagged where they break.
⚠ Workflow Error Recap. Open Tōshi on a task whose workflow has errored and one press builds the support-ready recap: the real error message, the node that actually failed (not the handler that caught it), the execution path in readable node names, and a screenshot. Copy as a ticket or download as a bundle.
WebCenter support package, scanned to your window. The branded report.html that leads the bundle, opened in a browser: instance, version, host OS, the window it was scanned with, a colour-coded error count and a deduped error roll-up over the real server logs (server.log, SEVERE.log, catalina.log from the Site Service). Getting here takes three deliberate steps: the Support bundle view opens idle and reads nothing, you set the log window and level, press ▶ Start scan, then press ⤓ Download bundle. Change the window afterwards and the control reads ↻ Re-scan, so the .zip always matches what you asked for.
// WHAT IT IS

What it is & why it exists

A WebCenter page is a stack of nested dashboards, embedded saved searches and task pages, and nothing on screen tells you which is which or where to edit them. The old reflex was to dig through the dashboard manager and guess. Tōshi reads the page you're already on and lays the structure bare, popups included: a task, document or project opened as an in-page modal gets its own dashboards called out under a POPUP divider instead of blending into the page's, and the pinned task header still resolves even when the popup carries none of the usual signals to go on. It goes past layout into behaviour: every dashboard script on the page, named, typed, and pointed at the exact attribute, block or results column it acts on, in either direction. And when a page misbehaves, the same panel exports a support package on your say-so: set a log window, press Start scan, and the environment and the real server logs from WebCenter's Site Service come back as a branded report.

Sees what's in front of you

Scoped to the page you opened it on: the dashboards/searches/task actually rendered, nested by their real DOM structure. Not a whole-instance crawl, just this page.

Every name is a doorway

Each dashboard and search name links straight to its editor (dashboard.jsp?…&edit=1, the saved-search editor, …). See it, click it, edit it.

{} Sees the scripts too

One toggle and every dashboard script on the page shows up nested under its dashboard: display and run scripts, each with its Dashboard Context (Project / Document / Task / My Work) and type (visibility, on change, validation, …). The logic behind the glass, not just the layout. On a page thick with scripts, filter by context and type: the chips start greyed, click one to light it up and the list narrows to just those scripts.

Every script says what it acts on. A field-bound script names the attribute it drives (⊙ Due date) and boxes that one field; a block-level script shows ⊟ and highlights its layout block, so a tab-visibility script lights up just that tab; a saved-search display script shows ⊞ and paints the one results column it renders, header and every value cell, not the whole search. An attribute that is not on the current page is greyed instead of pointed at falsely.

And it runs both ways. The dashboard builder can point from a script to its element, but only while you are inside the builder. With ◎ Pick, click an attribute on any live page and Tōshi lands on every script applied to it, not just one. Type an attribute name in the filter box and the scripts that drive it come to you.

Every window, at once

Open it in two browser windows, ten tabs, whatever. They never collide. Tōshi injects fresh on the page you're looking at and keeps no shared state, so there is nothing to clear, ever. Inspect one project in one tab and another beside it: each reads its own page, with no stale overlay carried over and nothing to reset between them.

// INSTALL

Install

Tōshi is a lean Chrome extension: it injects only when you click its icon (activeTab + scripting, no host permissions).

Add to Chrome from the Web Store →

One click, straight from the Chrome Web Store. No need to ask anyone for a link: add it, pin it from the puzzle-piece menu, then open a WebCenter page and click the icon. Click it again to toggle the panel off.

One small thing. If you install Tōshi, a quick heads-up to me is genuinely appreciated. It is completely optional and not needed to use it, but knowing someone is running it means a lot.

// COMPATIBILITY

Browser compatibility

Tōshi is a Manifest V3 extension built on Chromium APIs: chrome.scripting with a MAIN-world probe and a shadow-DOM panel. The line is simple: any Chromium browser that can install from the Chrome Web Store runs her; Gecko and WebKit would need a port.

BrowserEngineStatusNotes
Google Chrome Chromium · Blink ✓ full Primary target: every build is tested here.
Microsoft Edge Chromium · Blink ✓ full Same MV3 + chrome.scripting + MAIN-world probe, and it installs from the Chrome Web Store. Often the sanctioned Chromium browser on a locked-down corporate laptop.
Brave Chromium · Blink ✓ full Identical engine and APIs, and it installs straight from the Chrome Web Store.
Opera · Vivaldi · Arc Chromium · Blink ◐ works Chromium siblings, all of which can install a Chrome Web Store extension. Not part of the tested set, but no reason she wouldn't run.
Firefox Gecko ✕ not as-is MV3 differs: the browser.* namespace, a non-service_worker background, and newer/limited MAIN-world injection. Would need a port.
Safari WebKit ✕ no Requires converting to a Safari Web Extension via Xcode. Not on the roadmap.

Rule of thumb. If the browser can install from the Chrome Web Store, Tōshi runs: that's every Chromium browser. Where Chrome itself is locked down on a corporate machine, that usually means Edge, which installs Web Store extensions once you allow it.

// THE CONTROLS

The controls: four zones

The panel reads top to bottom in four zones: a title bar (identity + panel chrome), a slim instance bar, then the view switch, a filter + Pick band, and a Show strip (above the tree). Each control is a single, focused action; active toggles glow blue.

View switch On page · Support bundle · References
A three-way segmented switch picks what fills the panel: On page (the page as rendered), Support bundle (the diagnostics export: set a window, then Start scan), or References (the deep dependency graph). The active view glows blue.
Type-to-filter filter…
A prominent filter box in the primary band narrows a busy tree by name or id. The matched text is highlighted on the hits; ancestor rows stay for context. Persistent: it survives a re-scan.
Pick & locate ◎ Pick
The labelled Pick button beside the filter: click any element on the page → Tōshi finds it, scrolls to its row, and marks it. Both the row and the element keep a persistent blue glow until you pick another.
{}
Scripts Show
A Show-strip toggle: the scripts attached to each dashboard: display and run scripts (with their type: visibility, on change, validation, …), read from the dashboard's config and nested under it. A counter at the top tallies how many were found, and a (N) badge flags any script attached more than once. Turning it on reveals a disclosure box of context/type chips to narrow the list. Hover a script → its place on the page highlights in violet. Like the dashboard builder's Behavior panel, a script bound to one attribute (marked ⊙ field) lights up that precise field, a layout-block script (⊟ block) its tab, and a saved-search display-script (⊞ column) the one results column it paints; anything unresolved keeps the whole-section highlight as a fallback. Full-page sections are outlined (see-through), not washed, so the page stays readable.
#
IDs Show
A Show-strip toggle: show / hide the [bracketed] ids. Off by default: you rarely need them while scanning. Filtering still matches ids even when hidden.
aA
Names Show · K
A Show-strip toggle: on a project dashboard, a task execution page or a document info block, every rendered attribute label is covered by the internal name WebCenter addresses that attribute by. The page says Material level 2; your dashboard script, rule action, SDK call and list SQL all have to say typeOfMaterialGroup, and nothing on screen ever said so. Hover a chip to get the covered label back, with the attribute's type, its i18n label key and its id. One page can carry several sets of attributes at once, a task's own specifications, the project attributes surfaced onto it, and the attributes of each document version shown on it, and every label is joined against the set it actually belongs to. Three shapes of label are covered: a field header, the frame title of a block whose only content is a DocumentReference rendered as a table of documents, and every column header inside such a table. An attribute that cannot be named is greyed rather than left showing its own label, so a normal-looking label is never mistaken for the real name, and a reference table that nothing on the page captions gets no chip rather than a guessed one. One member-level call per object, only for objects something will actually be painted from, cached, read-only. The classic non-dashboard attribute tabs (projdetailsattrs.jsp, docdetailsattrs.jsp) emit no such marker and are not covered.
Reveal all Show
A Show-strip toggle: outline every element on the page at once (each name a clickable link to its editor) and stash the panel: the whole page X-rayed, a launchpad. Labels nudge apart so nested ones never hide each other.
Support bundle middle view · L
The middle segment of the view switch. Gather the reachable WebCenter diagnostics on your current session: a health battery (the troubleshooting tests: DB, disk, app-server round-trip, workflow engine, CAD-X), system info, host OS and system history, plus the real server logs (server.log, SEVERE.log, catalina.log) from WebCenter's Site Service. Pick a log window (15 min to all, by level) and Tōshi trims them client-side, merges them into one chronological incident.log, and leads with a branded report.html (the read-first page, with a deduped error roll-up), all inside one version-stamped .zip, built with the browser's own compression. No upload, no login, no extra permission. L.
References right view · G
The third segment: switch from the on-page view to the deep LOADDASHBOARD graph: every dashboard each one links to (sub / button / task / approval + embedded searches), with DELETED flags. G flips On page ↔ References.
Skip dashboard project / task page · B
A thin amber strip that appears on a project's dashboard landing page and on a task execution page: one click (or B) takes you into the project past the dashboard. From a landing page it reloads with skipDashboard=1, every other parameter kept; from a task page it opens the task's own project (projdetails.jsp?skipDashboard=1, rebuilt from the task's projectID and menu_file), dashboard skipped. It hides once you've skipped, or on any other page, so it's never in the way.
Project history project / task page
A thin strip on a project page or a task execution page. The strip itself is a plain link straight to WebCenter's own history.jsp: click it, or middle-click / Ctrl-click for a new tab. A second, lighter ▤ In panel button beside it reads that same audit trail into Tōshi instead (every event, who and when, newest first, collapsed behind one disclosure you open on demand), in a filterable table. WebCenter serves that history 200 rows at a time; Tōshi follows the page's own load-more path first, so what lands in the panel is the whole trail. The walk is bounded, and if it cannot finish the panel says how many of how many it is showing rather than passing a part off as the whole. Narrow it by free text over every column or by category chips (approval / document / task / status / member / attribute, each counted, positive selection); every search hit is highlighted wherever it lands. When the trail is long, ⛶ Maximize takes it to the whole viewport with a sticky header row and the Comment column at full width, search and chips in the top bar, both surfaces sharing one filter. Then ⤓ Export the filtered rows as a titled Markdown handover doc, or Shift for JSON, whether or not the table is expanded. Read-only; the only write is the export.
Expand all history history page
On a WebCenter history page, one click gives you the whole thing. Two truncations stack there: the list stops at 200 rows behind a "Load all results" link, and then each long entry hides behind a ... toggle. Tōshi loads every result first, then expands every toggle, including the ones on the rows that were not there a moment ago, so the full audit trail is readable and copyable in a single action.
Export footer
A footer button: copy the whole structure to your clipboard as a Markdown outline, ticket / handover ready. Shift-click for JSON.
Re-scan title bar
In the title bar: re-read the page (after it changes, or you navigate within it).
Dock side title bar
Flip the panel to the other edge when it's covering something you need to see.
-
Collapse title bar
Slide Tōshi off to a thin grip tab so the whole page is clear. Click the tab to bring her back.
Copy row
Hover a row → copies its name [id].
Keyboard shortcuts ?
Every control here has a single-key shortcut while the panel is focused: P pick, A reveal all, / filter, E export (Shift for JSON), Esc cancel/close, and more. Press ? for the cheat-sheet. Toggle Tōshi itself from anywhere with Alt+Shift+T, rebindable at chrome://extensions/shortcuts. Single letters stay scoped to the panel, so they never clash with WebCenter or the browser.
// FEATURES

Features, shown

The same visual language you'll see in the panel.

Workflow error, recapped in one click

Open Tōshi on a task whose workflow went into error and press Build recap. She assembles it all at member level, no admin: the actual error message read from the workflow token audit (e.g. Template with name _ProjTmp not found), the failed node in plain terms (e.g. Create Project) with its internal id kept for support, the full execution path in human-readable node names, and the error-minute timeline from project history (status changes, the failing rule / JS action, attribute writes), plus a screenshot. Then Copy ticket for a paste-ready summary, or Download bundle for report.html + screenshot + recap.json. Detection is precise: a normal task, or a rule-engine failure that never touched the workflow, is not flagged.

errorTemplate with name _ProjTmp not found
Failed node · Create Project named + id
Execution path · readable names done
Error-minute timeline · screenshot built
Copy ticket · Download bundle paste-ready

The Map: topology on paper, drawn two ways, handed to Zuan Experimental · prerelease

On the task type's workflow editor (a built-in WebCenter page, never a project home or dashboard page), press Workflow map (or M). The canvas is pixels (a stack of HTML5 <canvas> layers whose node model the page never exposes), so Tōshi goes to the source: it fetches the workflow XML (DownloadWorkflowXML.jsp) on your session and parses the topology: nodes, transitions and their real editor coordinates. It draws an SVG map (no libraries) on a paper canvas, in the same block language as Zuan, KG web's own workflow editor: every node a lifted card at its true position with a type-coloured accent bar, and the shape carrying the role: Start and End as pills, Router and Approval Stage as diamonds, Error / System-error dashed, Auto task dotted, Sub-workflow double-framed. Transitions are labelled arrows, error routes dimmed, any dangling or foreign node flagged; each transition label is drawn above the boxes on a chip cut from the paper and nudged clear of them, so no label is ever half-eaten. Hover a node to light its links. Scroll to zoom, drag to pan, ⤢ Fit to frame the shape, and ⛶ Maximize takes the map onto the whole viewport, on its own isolated layer over the page, where a real workflow is finally readable (Esc closes). Then Export a Markdown / JSON handover (a node table + a transition table).

The same engine draws the References view as a node-link graph (toggle Tree ↔ Graph, key V), so it gets the same paper canvas, the same blocks and the same zoom / pan / Maximize: each dashboard, saved search and task / approval dashboard a node, references the edges. A dashboard referenced by 2+ parents reads as a shared hub (an emphasis ring and a ×N badge over a clean layered layout, the one thing the tree can't show), with deleted / dangling references flagged in dashed crimson. And on the workflow map, ◈ Zuan exports the raw workflow XML itself, banner-stamped with the same provenance, ready to paste straight into Zuan's Import XML box in KG web. Zuan is still under development and is not ready for use yet. This is a handoff for when it is. Read-only on WebCenter: the only write is the export.

start → auto → user task
approval → end
Reference graph · shared hub ×3 ringed
⛶ Maximize · zoom + pan full viewport
Export · Markdown / JSON / Zuan XML handover

The page, nested as rendered

Dashboards (blue) and searches (green), nested by their real structure. Names link to editors.

dashStartPage
dashLHD_CreateProject
searchMy Projects
dashProject_Details

Which instance, always

A slim bar under the header reads the live WebCenter version and host of the instance you're on, so you always know which environment you're inspecting. Read once, from your own session.

 WebCenter 26.03 · acme-dev.esko-saas.com

Filter that shows its work

Type and the matched text lights up on the actual hits: ancestors stay dim for context, so you see exactly what matched.

dashStartPage
dashLHD_CreateProject
dashLHD_ProjectCreationHeader

Pick & locate: both ways

Click an element on the page; its row is marked in the list and the element keeps a blue glow on the page. One selection, persistent.

dashProject_Details
Project_Details… the element, lit on the page

Reveal all: the X-ray

Outline everything at once, panel stashed. Every label is a link (↗) to its editor: the map doubles as a launchpad.

StartPage ↗ 
My Projects ↗ 

Task pages, named by type

On a task page Tōshi shows a single pinned TASK row at the top of the panel: it names the task type and links straight to its task type page, so you know at a glance what task page you're on. The type is resolved via GetProjectTasks (the same call the WCR Inspector used); the task itself isn't outlined on the page. Works on the modern task execution page (wctaskexecutionpage.jsp), where there is no task form: the id is read from the page URL, and, as a last resort, when a task opens as an in-page popup and carries none of those signals at all, from WebCenter's own Sahi test-automation instrumentation inside the modal.

taskSTY_ProvideSustainabilityData ↗

Popups, called out

A task, document or project opened as an in-page WebCenter modal used to blend straight into the page underneath: its dashboards mixed into the tree with nothing marking them, and the pinned TASK row went missing entirely. Tōshi now badges the modal's own items under a POPUP divider with a gold accent bar (the existing DOM-nesting stays exactly as rendered, this is a marker, not a re-parenting), and splits the header counter to name the subset, e.g. 9 dashboards (5 in popup). Context-agnostic: the same badge shows up for a document or project popup too, not only a task.

3 dashboards (3 in popup)
dashTask_Header

Keyboard-driven

Every action has a key while the panel is focused. Press ? for the cheat-sheet; toggle Tōshi from anywhere with Alt+Shift+T (rebindable). Single letters stay scoped to the panel, so they never clash with WebCenter or the browser.

Pick element P
Reveal all A
Filter /
Export · JSON E Shift+E

A WebCenter support package, scanned to your window

The Support bundle view (key L) exports a complete support package for the session, and it reads nothing until you tell it to. Opening the view is inert: every source sits idle. You set the log window (15 minutes to all, filtered by level) first, then press ▶ Start scan, and only then does Tōshi read a health battery (WebCenter's troubleshooting tests: DB, disk, app-server round-trip, workflow engine, CAD-X), system info, host OS and system history, plus the real server logs from WebCenter's Site Service (siteconfig.jsp / DownloadLogfiles.jsp): server.log, SEVERE.log and catalina.log, the large ones (SEVERE.log can run to hundreds of MB) linked and the rest embedded. Every log is trimmed client-side to the window you set (anchored to each log's newest line, so timezones never matter), merged into one chronological incident.log, and led by a branded report.html: instance, version, a colour-coded error count and a deduped error roll-up, the read-first triage page support opens in any browser. The sources resolve on screen as they land, and when the scan is done ⤓ Download bundle arms: one version-stamped .zip, built with the browser's own compression. Widen the window afterwards and the control reads ↻ Re-scan, so what you downloaded always matches what you asked for. No upload, no login, no extra permission.

Log window · level, then ▶ Start scan you
Health battery done
System info · host OS done
System history done
Server logs (Site Service) bundled + linked
// THREE VIEWS

Three views: one switch

A three-way segmented switch at the top of the controls picks what fills the panel. On page is the default (what's in front of you); Support bundle is the diagnostics export you arm yourself (set a log window, press Start scan); References is the deep dependency map.

default

ON PAGE

The dashboards, searches and task page actually rendered on this page, nested by DOM containment: a parent is the nearest ancestor that's also inspectable. When the task's workflow has errored, a workflow-error recap pins to the top of the panel. No network calls. Scoped to what you can see.

▤ support bundle

SUPPORT BUNDLE

The middle segment, and it opens idle: nothing is read until you say so. Set a log window and level, press ▶ Start scan, and Tōshi gathers the reachable WebCenter diagnostics on your current session: health battery, system info, host OS and history, and the real server logs, trimmed to that window. Then ⤓ Download bundle writes a branded report.html inside one version-stamped .zip. Read-only on WebCenter.

⤷ references

REFERENCE GRAPH

Walks each on-page dashboard's full LOADDASHBOARD config: every dashboard it links to, recursively (sub / button / task / approval + embedded searches), cycle-safe, with DELETED dashboards flagged. The deep dependency map. Opt in when you want it.

// TIPS

Good to know

// WHAT'S NEW

What's new

The recent releases, most recent first. Tōshi tells you in-panel when she updates, and this page is where that link lands.

v0.4.88
2026-09-03

A task's own specifications were being filed under the project's category. Open Tōshi on a Page Builder task page and the attribute tree now carries a Task Specifications row beside the project's categories, holding the fields the task type itself declares rather than the ones the project lent it. This page said in v0.4.87 that those were unreachable, because asking WebCenter for them answered "043 No Attributes were found". That was a true negative read as a broken selector: the sample task's type declares zero specification attributes, so every query had to come back empty. A sweep of all 155 task types on the reference instance found 63 that do carry specs, and on one of those the same call answers immediately. The correction matters more than a missing row suggests, because the old join was wrong rather than absent. A task page stamps two kinds of attribute marker and they differ by a single infix: one is a project attribute surfaced onto the task, the other is the task's own specification. Reading only the id throws that distinction away, and on the measured task the field sampleNeededComment is carried by both the task's spec layout and the project's sustainability catalog, so it was filed under the project's category and read as though it belonged there. Two traps are pinned down rather than papered over. The id WebCenter returns for that category is the task type's, not an attribute category's, so the row links to the task type's specifications page; the obvious link would have opened the wrong object, or nothing. And the parameter that looks like it should scope the call to one task is worse than ignored: alone it answers 043, and paired with the project id it returns the project's whole catalog under a clean HTTP 200, which is a confident answer about the wrong object. Where a task page renders no specification marker at all, no row is invented. Measured live across four task pages: 90 assertions green, with the Page Builder suite from v0.4.87 unmoved beside it. The support bundle opens idle now, and you decide when it reads. It used to start reading WebCenter the instant you switched to the Support bundle view: a gather nobody asked for, which on a slow System history could sit there for thirteen seconds, and a log window you could only apply after the fact. It now opens idle and reads nothing at all. You set the log window and level first, press ▶ Start scan, watch each source resolve, then press ⤓ Download bundle; widen the window afterwards and the control reads ↻ Re-scan, so the .zip you save always matches the window you asked for. The same pass made System history bounded, so an empty one exits in about a second instead of burning the full timeout. The prose caught up too: this page, the Chrome Web Store listing and the README all still promised the whole package for a single tap, which is the kind of stale claim that makes someone open the panel and think it is broken. All three now describe the real sequence, live-gallery caption included.

v0.4.87
2026-09-01

Reveal all was never showing you the scripts. The panel lists every dashboard script on a page and paints each one violet, and hovering a row boxes the thing that script drives. Turn on Reveal all, which exists to outline everything at once so you can read the page as WebCenter assembles it, and the scripts were simply absent: dashboards, saved searches and attribute categories were outlined, and the whole violet layer was missing. The cause is worth stating plainly, because it is why nobody noticed for a long time. A script has no element of its own. It points at whatever it drives, a bound field, a layout block, one column of a results table, or, when it drives none of those, the section it sits in. That resolution lives on the panel row and nowhere else, and Reveal all was built from a separate sweep of the page that never asked the rows where they point. Display scripts were the worst hit, and they are the ones you look for: a display script paints a whole item display rather than one field, so it carries no precise target at all, and it was the only kind of script with nothing to fall back on. Reveal all now paints every script the panel is showing, in the same violet, with the same link into the script manager, on the same element the hover box would have drawn. Measured on the demo page: eleven outlines before, seventeen scripts added on top, all four display scripts among them. Two details keep it readable rather than merely correct. Several scripts routinely land on the same element, because every display script on a dashboard falls back to that dashboard's own section, so the rectangle is outlined once and each script contributes only its own label; stacking one tint per script turned a section into a solid violet block. And Reveal all shows what the panel shows: narrow the tree with the filter box or the context and type chips and the outlines narrow with it, so you can light up just the validation scripts, or just one script's name, and see only those on the page. One smaller fix travelled with it. Drilling an attribute category into its document references and clicking one drew that reference in the house blue, the colour that means a dashboard, instead of the plum every other part of the attribute drill wears. It takes the category's own ink now, so a reference reads as part of what it hangs under. Names reaches the pages where an attribute actually lives. The Names toggle covers every rendered attribute label with the internal name WebCenter addresses it by, and it covered project dashboards, task execution pages, document blocks and results tables. It covered nothing on the two classic attribute tabs: a project's Attributes tab and a document's. Those are the pages you open when you want the whole set rather than whatever a dashboard chose to show, so they were the ones most worth reading and the ones that read as plain human labels. The reason is structural rather than an oversight: the marker every other page family is found by, db_attr, appears zero times in the entire HTML of either page. They are a second family and they needed a locator of their own. Two traps had to be measured rather than guessed, and both are the kind that ship green. WebCenter puts the attribute id on the label, but it puts the same id on the type hint beside the field and on the dropdown caret, so the obvious selector matches 134 elements on a page that has 53 labels and would have painted eighty-one chips over WebCenter's own furniture. Narrowing it by class fixes that and introduces the opposite fault, which is worse because it is invisible: a database-lookup attribute renders its label with no link to its field at all, so Business unit, Module status, Risk class and twelve others were silently left showing their human text under an active toggle, which is the one thing this feature promises never to do. It reads the row now, and the row carries the id whatever kind of attribute it holds. Measured live: 68 of 68 and 145 of 145 on a project's Attributes tab, 145 of 145 on a document's, none greyed, none left uncovered, and no chip on a type hint. The five dashboard and task-page checks ran in the same pass and did not move. Worth recording honestly: the first run of this reported 53 of 53 and zero uncovered on the page where fifteen labels were plainly bare on screen, because it counted the labels the new code had found rather than the labels the page has. And a Page Builder page no longer reports "0 attr cats". Tōshi reads attribute categories off a live JavaScript object the page hangs on a div. Classic attribute pages expose it; Page Builder pages and the modern project page expose none at all, so the pages Lindt actually builds on listed their dashboards and showed no attribute content whatever. The identity is on those pages, on a different marker, and it carries the same trap the rest of this release is made of: the obvious pattern for that marker matches zero on a Page Builder page and reads as "the feature is absent" rather than "the pattern is wrong". Where the live object is missing, Tōshi now reconstructs the categories from what the page renders, joined to their names through the same attribute call the reference drill already makes, and gives each one the same coral row, the same hover box and the same working link into the category editor. Under it sit the fields that page renders, by internal name and by the label beside it. Measured live: 5 of 5 markers joined on a task execution page, 7 of 7 and 22 of 22 on project pages, each row pointing at a real sized element rather than the marker itself, which collapses to nothing whenever the attribute has no value (21 of those 22 did). Two limits are kept rather than papered over. Page Builder has no on-page category grouping at all, so what is drawn is one row per category with its rendered fields under it, not a panel that does not exist. And a task type's own specification attributes are not covered: there is no verified way to ask for them, every field on the sample task belonged to the project, and guessing is how you get a confident answer about the wrong object. Where the live object is present the original path is what runs, untouched.

v0.4.86
2026-08-29

The whole audit trail, not WebCenter's first 200 lines of it. WebCenter renders a project's history 200 rows at a time. It says so, quietly, above the table: "Warning: list truncated from 591 to 200", with a link to load the rest. Tōshi read the table and stopped there, so the trail she pulled into the panel, filtered, and exported as a handover document was the newest 200 events and nothing older, presented as if it were everything. On a busy project that is most of the history missing, with no sign anything was cut. She now follows the page's own load-more path before she reads: ◷ Project history in the panel returns the full trail, and the Expand all history strip on a history page loads every result first and only then opens every truncated "..." entry, so what you expanded is the whole list rather than the first page of it. Measured on a live project of 591 events: 200 before, 591 after, in the panel and on the page alike. Bounded and honest at every edge. The walk stops when WebCenter's own counter says the list is complete, and it is capped in time and in rows so an enormous trail cannot hang the panel. A project with fewer than 200 entries does no extra work at all. If the list will not extend, for any reason, the rows already loaded stay on screen and the panel says how many of how many it is showing instead of quietly presenting a part as the whole; the export carries the same two numbers. One quieter fix travelled with it: while a list is truncated WebCenter parks its own "Load more results" control in a table row, and that row was being read as a history entry, which is why a 200 row page reported 201.

v0.4.85
2026-08-18

It was never the attribute, it was the row. A results table's column header carries no object of its own, so Tōshi read one off a body cell of that same column: sensible, and wrong in one case that turns out to be common. An empty cell emits no marker at all. A column whose sampled row simply had nothing in it therefore found nothing, greyed, and sat there next to a column that named perfectly, which reads as "this field has no internal name", the one thing that is never true. On a personal dashboard Business unit greyed while Module resolved beside it, and the same Business unit column named fine on the other saved search on the same page, where that row happened to be filled. The column was innocent; the row it sampled was blank. Tōshi still asks the column's own cell first, because that is the exact answer, and now falls through to any cell in the same table when that cell is empty: every row of one results table is the same kind of object, so any of them identifies it just as well. Proven by blanking each column in turn on live tables, sixteen of them across a dashboard and a task page: the old lookup returns nothing every time, the new one still names the column. A second, quieter change. When a field's own object does not list an id, the name is now borrowed from a catalog already loaded for this page, at no extra call, and the chip's hover says which object it was read from so nobody mistakes it for proof that this object carries that attribute. Its own object always wins. It is safe because an attribute id maps to one internal name system wide: censused across every catalog the six verified pages load, 291 ids, 160 of them in two or more catalogs, zero disagreements, and the check now runs on every verification pass so the claim cannot quietly go stale. Marked honestly: on those six pages the borrow fired zero times. It is a guard against a case measured to be possible, not one measured to happen. Nothing else moved: all six page families still cover every label, and no label is ever handed back.

v0.4.84
2026-08-18

A document reference finally says its own name. A DocumentReference does not always render as a labelled field. Very often it renders as a table of linked documents, and in that shape WebCenter emits no field label at all, so the one thing you came for, the internal name a script has to use, appeared nowhere on the page. Tōshi now covers the caption such a block does carry: the framed dashboard block's own title. On a document info block, 3D photo/image reads docRef_3DPhoto. The guard matters as much as the feature. That title is taken only when the block holds nothing but the reference table, so a block titled for a group of fields is left alone, and a reference table that no caption introduces gets no chip at all rather than an invented one. Inside those tables every column header is an attribute label too, and none of them were ever covered: on a live task page thirteen of them, Weight tolerance (g/m2) and its neighbours, now read weightToleranceGramPerSquareMeter and the rest. A column's set is found from the row it heads, so a table that is present but empty costs no call and greys. Same plum chip throughout, and the same rule: what cannot be named is greyed, never handed back its human label. The other half of the release is the document info block itself. Its fields carry no letter prefix naming their object; they carry an encoded context, and Tōshi read straight past it, took the surrounding project's attributes and greyed every field on the block. She decodes it now and asks for the document version the block is showing. Measured live: that block goes from one named field to six of six, a mixed task page from three to sixteen of sixteen, and that page reads three attribute sets where it used to read four, because a set nothing will be painted from is no longer fetched at all.

v0.4.83
2026-08-18

Names works on a task page, which is where you needed it. A task execution page is where a dashboard script is actually written, and it was the one page the Names toggle could not read. Two things were wrong. WebCenter marks a project attribute surfaced onto a task's page as db_attr_ext_…, with an extra ext_ in the middle, and Tōshi's match wanted a digit immediately after db_attr_: every project field on a task page therefore read as "not an attribute at all" and was skipped entirely, left showing its rendered label under an active toggle, which is the one thing this feature promises never to do. The second went deeper. Tōshi resolved one object for the whole page, from the first field she found, and joined everything against that single set. A task page carries two: the task's own specifications, and the project attributes surfaced onto it. Whichever of the two the first field named, the other could never be named. Each field now joins against its own object's set, so a task page reads two catalogs instead of one, still one call per object and never one per field, and the button's tooltip reports what actually resolved rather than only lit or hollow. Measured on a live task: before, one chip out of three with two project attributes left showing their labels; after, three of three, and no label left uncovered on any page family.

v0.4.82
2026-08-17

The badge loses its chip and gets its size back. Tōshi sat in the toolbar as a small eye inside a dark rounded tile, and the tile was the problem: its ground is the same slate the rest of the product is built on, which on a dark browser toolbar is within a few shades of the toolbar itself. So the chip was invisible and the only thing anyone saw was the eye inside it, filling 63% of the icon's height while every neighbouring extension filled about 90% of theirs. Two releases of tightening the margin could not fix that, because the margin was already one pixel. At 16 and 32, the sizes the toolbar actually uses, the tile is gone: the eye is drawn on transparency, edge to edge, and it now spans the full width and 75% of the height. 48 and 128 keep the tile, because those are the extensions page and the Web Store, where the mark sits on a light card and the slate chip is what gives it a body. The drawing itself did not change, and the lid tips are still whole: an eye is wider than it is tall, so the rest of that height is the shape, not the sizing.

v0.4.81
2026-08-17

A pick keeps the colour it was hovered in. Every kind of thing Tōshi finds has its own colour, and a dashboard script is violet wherever it appears: the tag on the row, the row's own tint, the box it draws on the page as you sweep past it. Clicking the row then drew that same element in the house blue instead, so the one colour telling you this is a script and not an attribute category or a saved search was dropped at exactly the moment you committed to one. The pick box now takes the colour of whatever you picked, and what marks it as picked is the heavier ring it already wore. Nothing else about picking changed.

v0.4.80
2026-08-17

A reference points at something. Now the panel points there too. Drilling an attribute category into its document references gave you the list but not the place: hovering a reference lit up the whole category, which on a project attributes page is the entire screen, so the box told you nothing you did not already know. Each reference now boxes its own attribute row on the page, the label, the Upload/New/Link controls and the documents linked under it, and hovering one of those documents boxes that document's row inside the reference table. It reads the attribute id WebCenter already stamps on the reference's document table, so nothing is matched on a label and a relabelled site behaves the same as any other. A reference that this page does not render keeps the category box, and a reference belonging to some other document you drilled into never claims a row here, which is the case where a guess would have quietly pointed at the wrong attribute.

v0.4.79
2026-08-17

The badge reads at the size it is actually drawn. The toolbar icon was built at one size and scaled down, so at 16 and 32 pixels the eye sat small inside its tile with air all around it and lost against every other button in the row. It is drawn to one fill ratio across every size now, and 32 is a real 32 rather than a resample of a larger tile. The panel is untouched: this release is the badge only.

v0.4.78
2026-08-17

The name your code has to use. A WebCenter page shows you Material level 2. Every dashboard script, rule action, SDK call and scriptable-list query that touches that field has to say typeOfMaterialGroup instead, and nothing on the page has ever told you so. On a site that has relabelled its categories you cannot even guess. The new Names toggle in the Show strip (or K) covers every rendered attribute label on a project dashboard page with the internal name WebCenter actually addresses it by, so the page reads the way your code has to write it. Hover a chip and it hands the label back, with the attribute's type, its i18n label key and its id. The join is the marker WebCenter already emits on every field, so nothing is guessed: an attribute the object's own set does not name is greyed rather than left showing its label, and the toolbar button goes hollow when nothing could be read at all. A normal-looking label under an active toggle would read as "this one has no internal name", which is never true. One member-level call per object, cached for the page, and it writes nothing.

v0.4.77
2026-08-16

The console look, and the kanji stop being wallpaper. Kage-gumi dropped its costume back in August: the warm graphite ground, the neon accents, the glow behind everything. Tōshi had kept hers. This page and the panel now read off the product's own values instead: a slate ground, one accent and it is the house blue the mark itself is drawn from, Inter for text and IBM Plex Mono for data, and nothing glows anywhere. Every halo is gone; where one marked a state, a hairline ring marks it now. The kanji went the same way. A glyph is a seal, not a second name for something already labelled, so the ornamental ones are simply deleted: the hero watermark, the ten section numerals, the roadmap's numbering, the prefixes glued to English labels, and the 新 stamp in the release-notes bar. What survives is Tōshi's own 透, in the title bar and on the grip, where it is the only thing naming her. Nothing in how the panel works changed.

v0.4.76
2026-08-16

The eye gains depth. The previous release put the eye on the toolbar, but it was a flat drawing: an outline, a filled pupil, and only two of Kage-gumi's three blues. It is a lens now. The two lids take opposite ends of the house-blue ramp, so the mark is lit from above and the deepest blue finally appears on the icon at all; a shadow falls from the brow down the far wall; the pupil sits deep inside a mid iris with a single glint on it. The gaze moved down and to the left, for a plain reason: the button sits at the top right of the browser, so the page it inspects is below it. And the brow is half lidded, holding a band of unlit socket over the iris, which is where the quiet in it comes from. Nothing glows. The light is inside the lens, clipped to it, never bleeding onto the toolbar. The sides stopped being cut off, too: the mark is now sized from its own drawn extent, stroke included, so it cannot run off the edge of the tile again the next time a weight moves. This page's header wears the same drawing. Nothing in the panel changed: this release is the badge and the store artwork only.

v0.4.75
2026-08-16

A new face on the toolbar. Tōshi's button carried the 透 stamp on a dark green ground. At 16px, which is the only size a toolbar icon is ever seen at, ten strokes collapse into a smudge, and the ground fought every Chrome theme it sat on. The extension now wears the eye, the mark that has sat in this page's header since the first release, on the Esko-SaaS slate the rest of Kage-gumi moved to: an almond lid, a filled pupil, house blue, nothing glowing. The Web Store artwork was recut to match. 透 keeps its place as the seal. Nothing inside the panel changed: this release is the badge and the store listing only.

v0.4.74
2026-08-15

These release notes, inside the panel. This page is where Tōshi pointed after every update, and on a corporate network that filters the open web it was simply unreachable. The whole section now ships inside the extension: click the build stamp in the title bar (or press N) and the notes open on their own full-screen layer, drawn as a timeline with a version rail, month dividers and one card per release. The build you are actually running is marked YOUR BUILD in place and scrolled to on open, which is the one thing a published page cannot tell you. No network, nothing to reach. The deck stays the single source: a generator lifts this very section into the extension at build time, so the two cannot drift.

v0.4.73
2026-08-15

Project history, actually readable. The in-panel audit trail was trapped in a 480px column: four columns squeezed into one narrow strip, with the Comment (the part that carries the meaning) wrapping to shreds. ⛶ Maximize now takes it to the whole viewport, the same way it already did for the workflow map: the full table on an isolated opaque layer, a sticky header row so a long trail keeps its column labels, and the search box and category chips lifted into the top bar. And searching finally shows its work: every hit is highlighted, in every column it lands in, case-insensitively, in the panel and full-screen alike. It stays one filter across both surfaces, so typing in either narrows the other and ⤓ Export still hands over exactly what is on screen. Esc clears the search first, a second Esc closes.

v0.4.71
2026-08-04

The scan tells you it is running. Turning on { } Scripts fires one fetch per dashboard on the page, and until they all land the header carried a dim grey "scanning scripts…" that was easy to miss: the panel simply looked idle. It now pulses in the script violet, wearing the same { } glyph as the pill you just pressed, and gives way to the real count the moment the scan finishes.

v0.4.70
2026-08-04

Which script is on this attribute? WebCenter can answer that inside the dashboard builder, with a locator that points from a script to the element it is bound to. Outside the builder, on the page a user actually sees, there was nothing. Tōshi now carries both directions. A field-bound script row names the attribute it drives (⊙ Due date) instead of a bare "field", read off the rendered page, and an attribute that is not on the current page is greyed rather than pointed at falsely. Turn on ◎ Pick and it runs in reverse: click an attribute and you land on every script applied to it, not just one. Under this, the bound field is now resolved through the marker WebCenter actually emits, so the ⊙ highlight boxes the field itself, and keeps boxing it after you pick, instead of falling back to the whole dashboard.

v0.4.69
2026-08-03

Popups, called out. A task, document or project opened as an in-page WebCenter modal used to blend straight into the page underneath: its dashboards mixed into the tree with nothing marking them, and the pinned TASK row went missing entirely (no form, no hidden field, no URL param to read). Tōshi now badges the modal's own items under a POPUP divider with a gold accent bar, the existing DOM-nesting untouched, and splits the header counter to name the subset, e.g. 9 dashboards (5 in popup). And the TASK row is restored: as a last resort, Tōshi reads the popped task's id off WebCenter's own Sahi test-automation instrumentation inside the modal.

v0.4.68
2026-08-03

The full-screen map, made honest. ⛶ Maximize used to sit on a translucent backdrop, so the WebCenter page behind it (wordmark, nav row) and Tōshi's own panel read straight through the map. The overlay is now fully opaque edge to edge: header bar, hint strip and the gutter around the paper, with nothing of the page or the panel showing through anywhere. And transition labels no longer lose a fight with the boxes: they are painted above the nodes on a chip cut from the paper itself, and each one is nudged along or off its own transition until it clears every node and every other label. A label that read pletec now reads Completed.

v0.4.67
2026-08-03

The map, on paper, and full-screen. The Workflow Map and the Reference graph are redrawn on a paper canvas in the same block language as Zuan, KG web's own workflow editor: lifted cards with a type-coloured accent bar, and the shape carrying the role (Start and End as pills, Router and Approval Stage as diamonds, error paths dashed, Auto task dotted, Sub-workflow double-framed). And because a real workflow never fitted a 480px panel, ⛶ Maximize lifts either view onto the whole viewport: cursor-anchored scroll to zoom, drag to pan, double-click or ⤢ Fit to frame the graph, Esc to drop back. Its own isolated layer over the page, so nothing leaks either way.

v0.4.62
2026-07-22

Project history, in the panel. The ◷ Project history strip now does more than link out: a plain click pulls the project's whole audit trail straight into Tōshi: every event, who did it and when, newest first. Filter by free text over every column, or by category chips (approval / document / task / status / member / attribute, each counted, positive selection), then ⤓ Export the currently-filtered rows as a titled Markdown handover doc (project, host, WebCenter version, capture time, the table, the active filter), or Shift for JSON. What you see is what you hand over. Read-only on WebCenter; the strip still opens WebCenter's own history in a new tab on a middle / Ctrl-click.

v0.4.61
2026-07-17

Support-bundle logs tail-capped. Each log file the Support bundle reads is now capped to its last 4 MB before trimming: a very large SEVERE.log can no longer balloon a single pull. The window filter (15 min to all, by level) still runs on top, anchored to the newest line.

v0.4.60
2026-07-14

Project-history quick link. On a project page or a task execution page, a thin strip now links straight to that project's history (history.jsp?type=project, targeted by the page's own projectID), a real link, so middle / Ctrl-click opens it in a new tab.

v0.4.59
2026-07-14

Expand all history. On a WebCenter history page, one click opens every truncated ... entry at once, so the full audit trail is there to read or copy in a single action, replacing the old bookmarklet.

v0.4.58
2026-07-13

Workflow Error Recap. Open Tōshi on a task whose workflow went into error and press Build recap: she assembles (all at member level, no admin) the real error message from the workflow token audit, the failed node in plain terms (id kept for support), the full execution path in legible node names, an error-minute timeline from project history and a screenshot, then Copy ticket or Download bundle (report.html + screenshot + recap.json). Detection is precise: a normal task, or a rule-engine failure that never touched the workflow, is not flagged.

v0.4.56
2026-07-13

Skip-dashboard from a task page too. The skip-dashboard strip (and the B key) now also fires on a task execution page: it opens the task's own project with the dashboard skipped, rebuilding the project link from the task's own parameters. On a project landing page it works exactly as before.

v0.4.55
2026-07-13

Skip-dashboard jump. On a project's dashboard landing page a thin amber strip (or the B key) takes you straight into the project, past the dashboard: it only shows on that landing page and steps out of the way once you've skipped.

v0.4.52
2026-07-09

The in-panel What's New strip itself. A quiet one-line strip at the top of the panel after an auto-update, with a short highlight of what changed and a link to this page. Dismissible, silent on first install, and shown once per version.

v0.4.51

The Support bundle skips the slow login-tracking step on prod.

v0.4.50

The Support bundle view decluttered, with the filter, pick and show controls hidden while a bundle is gathering.

// ROADMAP

Roadmap: where the eye is going

Tōshi grows on her own track (I to XII), from "sees this page" to "reads any WebCenter and hands you the map nobody wrote down." What's live today, and what's next.

Last updated: 2026-08-17

0born · 27 feb 2026

The eye first opened

I✓ shipped

Page Inspector

The base: the on-page tree, the ⤷ refs reference graph, every name a link to its editor. The CLI, the KG-web TŌSHI panel, and this extension.
II✓ shipped

Highlight & Locate

Devtools-grade: hover to highlight the real block on the page, ◎ pick to locate any element in the tree, type-to-filter, copy, export. The overlay layer.
III✓ shipped

Full Surface

Live WebCenter version in the header, plus a MAIN-world probe that surfaces attribute categories and names the task type + links its execution page (via GetProjectTasks), each one click from its editor. The Names toggle (key K) covers every rendered attribute label on a project dashboard or a task execution page with the internal name WebCenter addresses it by, hover a chip for the label it covers.
IV✓ shipped

Linked Surface

Drill into the references. Every attribute category expands to its document references; each reference to its linked documents, and each document to its own attribute categories, one click from the editor. The deep content map a project's references actually form, surfaced in place. Hovering a reference boxes that attribute's own row on the page (and a linked document, its row in the reference table), so the map and the page stay pointed at the same thing.
V✓ shipped

WebCenter Support Package

The headline: the Support bundle view exports a complete support package for the session. It opens idle and reads nothing; you pick a log window (15 min to all, by level) and press ▶ Start scan, and it reads a health battery, system info, host OS and system history, plus the real server logs (server.log, SEVERE.log, catalina.log) from WebCenter's Site Service. Every log is trimmed client-side to that window (anchored to its newest line, so timezones never matter), merged into one chronological incident.log, and led by a branded report.html: instance, version, a colour-coded error count and a deduped error roll-up, the read-first page support opens in any browser. ⤓ Download bundle arms when the scan lands; change the window and the control becomes ↻ Re-scan. No Markdown, no upload, no extra permission. Turns a ticket's worst step ("get me the logs and the environment") into two presses you control. Pairs with Mei for first-pass triage.
VI✓ shipped

Project History

From a project page or a task execution page, the ◷ Project history strip is a plain link straight to WebCenter's own history page. A second, lighter ▤ In panel button beside it reads that same audit trail into the panel instead (status changes, document versions, approvals, task actions, member and attribute edits), read from the project's own history, newest first, and collapsed behind one disclosure until you open it. Narrow it by a free-text filter over every column or by category chips (approval / document / task / status / member / attribute, each counted, positive selection), with every hit highlighted in whichever column it falls. A long trail does not belong in a narrow column, so ⛶ Maximize takes the table full-screen (sticky header, the Comment column at full width, search and chips in the top bar) on its own opaque layer; the two surfaces share one filter, so narrowing either narrows both. Then export the filtered rows as a titled Markdown handover artifact, or Shift for JSON. WebCenter itself renders only the newest 200 events and offers a link for the rest, so Tōshi follows that link before she reads: the trail in the panel is the complete one, not its first page. That walk is bounded in time and in rows, a project under 200 entries does no extra work, and when it cannot finish the rows already loaded stay on screen under a note giving how many of how many, with both figures carried into the export. Read-only on WebCenter; the only write is the export. The story of how the project got to now, one click away in either direction.
VII✓ shipped

The Map

Inbound: on the task type's workflow editor (a built-in WebCenter page, not a project home or dashboard page), one click (or M) reads the whole topology into a legible node-link map: Tōshi fetches the workflow XML (DownloadWorkflowXML.jsp) and draws an SVG graph on a paper canvas in Zuan's block language, every node at its real editor position, typed by ink and by shape, transitions labelled, error routes dimmed, dangling / foreign nodes flagged. Scroll to zoom, drag to pan, and ⛶ Maximize onto the full viewport. Outbound: the References reference graph renders as the same node-link diagram on the same canvas (toggle V) where a dashboard referenced by 2+ parents stands out as a shared hub (ring + ×N badge); and on the workflow map, ◈ Zuan exports the raw workflow XML, banner-stamped with provenance, ready to paste into Zuan's Import XML box in KG web Experimental · prerelease. Zuan itself is still under active development and not ready for use yet: a handoff for when it is, not a production path today. A deliverable, not just a debug view.
VIII✓ field + block/tab + column shipped

Pinpoint

Highlight precision: a script bound to one attribute lands on that exact field, a script attached to a layout block lands on that block (so a tab-visibility script highlights just the tab it hides), and a saved-search display-script lands on the one results column it paints (header and every value cell), not the whole search. Found by reading what the script's config names (the attribute, the block id, or the column id/label) and matching it in the rendered DOM, mirroring the builder's Behavior panel. The eye, surgical.
IXplanned

See → Act

Hand any node to the crew: "document this" (Haku writes the spec) or "ask about this" (Mei for a support answer). Recon becomes the first step of a build.
Xplanned

Dashboard Atlas

The whole instance, not one page: the entire dashboard forest, with orphans, dead references and circular refs flagged. An architecture-review artifact for inheriting or migrating a solution.
XIplanned

Time Machine

Snapshot a reference graph, re-run later, diff it: added / removed / newly-deleted. "What changed since the handover or the migration?"
XIIplanned

Diagnose & Propose

The support package stops being a hand-off. Tōshi parses the exported logs in place, ships the error signatures to the KG AI server (Cloudflare-tunnelled, per-customer token) and gets back a diagnosis plus a concrete, reviewable fix: the corrected script body or config change, not a hint. Surfaced as a one-click "Apply fix" that a human confirms and pushes through the existing sync tooling (drift guard and backup-before-clobber intact). Detect → diagnose → propose; never a silent write to a live customer system.