toga-ai 1.0.900 → 1.0.901
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/knowledge/INDEX.md +1 -1
- package/knowledge/standalone/apps/togatech/INDEX.md +1 -0
- package/knowledge/standalone/apps/togatech/architecture.md +15 -7
- package/knowledge/standalone/apps/togatech/features/seo-aeo-geo-prerender.md +9 -1
- package/knowledge/standalone/apps/togatech/features/talos-product-page.md +58 -0
- package/knowledge/standalone/apps/togatech/workflows/local-dev-and-headless-verification.md +7 -3
- package/package.json +1 -1
package/knowledge/INDEX.md
CHANGED
|
@@ -39,7 +39,7 @@ _Auto-generated by `knowledge.js index`. Do not hand-edit._
|
|
|
39
39
|
|
|
40
40
|
## standalone framework
|
|
41
41
|
|
|
42
|
-
- **togatech** (TOGA Technology Website) —
|
|
42
|
+
- **togatech** (TOGA Technology Website) — 7 doc(s) → [standalone/apps/togatech/INDEX.md](standalone/apps/togatech/INDEX.md)
|
|
43
43
|
- **websocket** (WebSocket Server) — 2 doc(s) → [standalone/apps/websocket/INDEX.md](standalone/apps/websocket/INDEX.md)
|
|
44
44
|
- **forward** (Forwarder) — 3 doc(s) → [standalone/apps/forward/INDEX.md](standalone/apps/forward/INDEX.md)
|
|
45
45
|
- **claude** (Claude Harness) — 8 doc(s) → [standalone/apps/claude/INDEX.md](standalone/apps/claude/INDEX.md)
|
|
@@ -5,5 +5,6 @@
|
|
|
5
5
|
| [TOGA Technology Website Architecture](architecture.md) | Public TOGA Technology marketing site — standalone React/TS SPA (no PHP framework); open for stack, bootstrap, routing, page layout, integrations, build/deploy. |
|
|
6
6
|
| [Careers Section — Live Paylocity Job Openings (About page + /v2/campaigns/jobs proxy)](features/careers-paylocity-job-openings.md) | togatech About page "Join Our Team" section — live Paylocity jobs via unauthenticated `GET /v2/campaigns/jobs` record-script proxy; open for the fetch→proxy→map |
|
|
7
7
|
| [SEO / AEO / GEO — Prerendering, Single-Source Meta & Structured Data](features/seo-aeo-geo-prerender.md) | togatech SEO/AEO/GEO — build-time Puppeteer prerender + single-source per-page meta + JSON-LD; open for the robots-gating de-index bug and Amplify build require |
|
|
8
|
+
| [Talos Product Page (/talos) — ported designer prototype](features/talos-product-page.md) | togatech `/talos` Talos AI product page, ported from a designer HTML/JSX/CSS prototype; open for the design-port CSS approach, lazy-load + prerender rules, page |
|
|
8
9
|
| [Creating Pull Requests on togatech](workflows/creating-pull-requests.md) | Open a PR on `agilantsolutions/togatech` — `gh` CLI lacks `read:org`, so use a raw GitHub REST call with the keychain token; base is `_production`. |
|
|
9
10
|
| [Running togatech Locally & Verifying a Page Without Cypress](workflows/local-dev-and-headless-verification.md) | Get togatech running on a dev machine and verify a data-driven section without Cypress — `npm install` first, `lint` is dead, Cypress 15 fails on Windows. |
|
|
@@ -6,8 +6,8 @@ project: TOGA Technology Website
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: architecture
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-09-
|
|
10
|
-
owners: [jcardinal]
|
|
9
|
+
updated: 2026-09-25
|
|
10
|
+
owners: [jcardinal, tcox]
|
|
11
11
|
files:
|
|
12
12
|
- togatech/src/main.tsx
|
|
13
13
|
- togatech/src/App.tsx
|
|
@@ -17,6 +17,9 @@ files:
|
|
|
17
17
|
- togatech/src/themeConfig/ThemeContext.tsx
|
|
18
18
|
- togatech/vite.config.ts
|
|
19
19
|
- togatech/package.json
|
|
20
|
+
- togatech/src/components/NavV2/navRoutes.ts
|
|
21
|
+
- togatech/src/components/templates/AppLayout/AppLayout.tsx
|
|
22
|
+
- togatech/src/routes.config.json
|
|
20
23
|
related: []
|
|
21
24
|
---
|
|
22
25
|
|
|
@@ -51,7 +54,7 @@ Public-facing TOGA Technology corporate/marketing website. Standalone single-pag
|
|
|
51
54
|
|
|
52
55
|
## Routing
|
|
53
56
|
|
|
54
|
-
`src/routes.tsx` = single `createBrowserRouter`. All routes render under `components/templates/AppLayout` (
|
|
57
|
+
`src/routes.tsx` = single `createBrowserRouter`. All routes render under `components/templates/AppLayout` (NavV2 header + footer chrome); the `/` route group has `ErrorPage` as its `ErrorBoundary`.
|
|
55
58
|
|
|
56
59
|
| Path | Page |
|
|
57
60
|
|---|---|
|
|
@@ -60,11 +63,16 @@ Public-facing TOGA Technology corporate/marketing website. Standalone single-pag
|
|
|
60
63
|
| `/what-we-do` | `pages/WhatWeDo` |
|
|
61
64
|
| `/our-platform` | `pages/OurPlatform` |
|
|
62
65
|
| `/contact` | `pages/Contact` |
|
|
66
|
+
| `/talos` | `pages/Talos` (code-split — see features/talos-product-page.md) |
|
|
63
67
|
| `/privacy-policy` | `pages/PrivacyPolicy` |
|
|
64
68
|
| `/terms-and-conditions` | `pages/TermsAndConditions` |
|
|
69
|
+
| every `STUB_ROUTES` path | `pages/Stub` placeholder (`<StubPage title>`) |
|
|
65
70
|
| `*` | `pages/NotFound` |
|
|
66
71
|
|
|
67
|
-
-
|
|
72
|
+
- **Nav destinations are data** in `components/NavV2/navRoutes.ts`: `LIVE_ROUTES` (real pages) and `STUB_ROUTES` (placeholder until built — delete the line to retire a stub). Blog routes are commented out.
|
|
73
|
+
- **Prerender list:** `src/routes.config.json` lists the static routes to prerender + sitemap. Add every new live route there (rules: features/seo-aeo-geo-prerender.md).
|
|
74
|
+
- Pages are imported eagerly except `/talos` (`React.lazy` + `<Suspense>` inside the route Component — never the router's `lazy`, it breaks hydration).
|
|
75
|
+
- **AppLayout → page contract:** `<Outlet context={{ openTalosChat }} />`; pages read it via `useAppLayoutContext()` (`AppLayout/appLayoutContext.ts`) to open the global Talos chat modal. `ROUTES_WITH_OWN_FOOTER` (only `/talos`) hides the old site footer on pages that render the redesigned one.
|
|
68
76
|
- A Cypress-only test route swaps `WhatWeDoPage` for a throwing component to exercise the error boundary (`VITE_CY_TEST` / `window.Cypress`).
|
|
69
77
|
|
|
70
78
|
## Page structure — MVVM per page
|
|
@@ -85,8 +93,8 @@ pages/Home/
|
|
|
85
93
|
|
|
86
94
|
## Shared layers
|
|
87
95
|
|
|
88
|
-
- `src/components/` — reusable UI (Header, Footer, Hero, Carousel/Swiper wrappers, Modal, TalosChat + TalosChatInput, motion/animation helpers, animated SVGs, etc.).
|
|
89
|
-
- `src/components/templates/` — layout primitives: `AppLayout` (router root chrome), `DefaultContainer`, `MarginContainer`, `GlowingContainer`, `ErrorContainer`.
|
|
96
|
+
- `src/components/` — reusable UI (NavV2 global nav incl. `TalosFab`, Header, Footer, Hero, Carousel/Swiper wrappers, Modal, TalosChat + TalosChatInput, motion/animation helpers, animated SVGs, etc.).
|
|
97
|
+
- `src/components/templates/` — layout primitives: `AppLayout` (router root chrome; Outlet context + `appLayoutContext.ts`), `DefaultContainer`, `MarginContainer`, `GlowingContainer`, `ErrorContainer`.
|
|
90
98
|
- `src/lib/` — data/integration:
|
|
91
99
|
- `api.ts` — `useSendEmail` (contact form) and `postTalosMessage` (AI chat).
|
|
92
100
|
- `contentful.ts` — Contentful delivery client (`createClient`).
|
|
@@ -106,7 +114,7 @@ All via Vite `VITE_*` env vars (values in `.env`, never in repo docs):
|
|
|
106
114
|
|
|
107
115
|
## Build, environments, deploy
|
|
108
116
|
|
|
109
|
-
- `package.json` scripts: `dev`, `togatech` (dev with `--host togatech`), `build` (`tsc && vite build`), `buildBeta` (`--mode beta`), `buildGamma` (`--mode gamma`), `preview`, `lint` (ESLint
|
|
117
|
+
- `package.json` scripts: `dev`, `togatech` (dev with `--host togatech`), `build` (`tsc && vite build`), `buildBeta` (`--mode beta`), `buildGamma` (`--mode gamma`), `preview`, `lint` (ESLint — non-functional: no eslint dependency or config; see workflows/local-dev-and-headless-verification.md). `build` also runs the Puppeteer prerender (see features/seo-aeo-geo-prerender.md).
|
|
110
118
|
- Multi-environment: `development`, `beta`, `gamma`, `production` (Vite modes).
|
|
111
119
|
- Vite `base: "/"`, output to `dist/`, `publicDir: public`. A custom `robotsPlugin` copies `public/robots.prod.txt` or `public/robots.dev.txt` to `dist/robots.txt` at `closeBundle`, depending on prod detection (`NODE_ENV` + `VITE_ENV`).
|
|
112
120
|
- `@` path alias → `./src` (Vite `resolve.alias`).
|
|
@@ -71,7 +71,11 @@ Makes togatech.com visible and citable to search engines **and** AI answer engin
|
|
|
71
71
|
- **🔴 Hosting requirement:** CloudFront/S3 must serve each prerendered `dist/<route>/index.html` for its path; a blanket SPA rewrite to root `index.html` serves the empty shell and defeats the prerender.
|
|
72
72
|
- **og:image dedupe:** static OG/Twitter tags were removed from `index.html` because `<Seo>` emits per-page ones (Helmet appends rather than replacing pre-existing static tags → duplicates otherwise).
|
|
73
73
|
- **Verified data corrections:** real positioning is *integrated IT services + the ERA TOGa Platform*; real socials are LinkedIn `/toga-tech` + YouTube + Instagram (no Twitter/GitHub/Crunchbase); contact is `website@togatech.com` / `+1 (212) 736-0111`; **5** offices. Prior planning docs had several wrong specifics — verify schema/llms.txt against FIELDS before shipping.
|
|
74
|
-
- **Build size:** JS bundle is ~14.8 MB (4.9 MB gzip) — a real CWV/LCP risk
|
|
74
|
+
- **Build size:** JS bundle is ~14.8 MB (4.9 MB gzip) — a real CWV/LCP risk. Only `/talos` is code-split so far.
|
|
75
|
+
- **🔴 Code-split a prerendered route with `React.lazy` + `<Suspense>` inside the route `Component` — never react-router's route `lazy`.** Router `lazy` without a `HydrateFallback` renders blank and throws away the prerendered HTML; a Suspense boundary keeps the server HTML until the chunk arrives. Pattern: `TalosRoute` in `routes.tsx`.
|
|
76
|
+
- **🔴 Hooks must never append child nodes into React-owned elements.** The snapshot captures the appended nodes → hydration mismatch. Render a host element with `dangerouslySetInnerHTML={{__html:""}}` and clear it on start and cleanup.
|
|
77
|
+
- **Prerender UA tag:** `prerender.mjs` sets a user agent containing `TOGAPrerender`. `App.tsx` skips analytics on it; canvas/animation engines must skip start on it too (e.g. `useTalosSparks.ts`).
|
|
78
|
+
- **New route checklist:** add it to `src/routes.config.json` (prerender + sitemap list); a nav destination also moves from `STUB_ROUTES` to `LIVE_ROUTES` in `NavV2/navRoutes.ts` (removing the stub line retires the placeholder page).
|
|
75
79
|
- **FIELDS JSON is component-coupled — no free-prose body slot:** each page's `*FIELDS*.json` is shaped to specific components (hero, cardScroll, businessProblems, kpi, carousel), so there is **no place to drop a long prose block**. An audit's "rewrite to 900 words" is not structurally possible without building new components — you can only sharpen titles/descriptions/keywords/card copy that already have slots. (`/our-platform` was left unchanged: it is already content-dense — 7 app modules + 4 stacks + testimonials + KPIs — and the original audit under-counted because that content is JS-rendered.)
|
|
76
80
|
- **`personSchemas` duplicate guard:** a leader can be in both `boardMembers` and `members` in `ABOUTPAGEFIELDS` — `personSchemas` must de-dup by lowercased trimmed name, or it emits duplicate `Person` nodes.
|
|
77
81
|
- **🔴 Brand name is "TOGA Technology" only — never "Agilant":** an earlier draft adding `alternateName: "Agilant"` / "(formerly Agilant)" to the org schema was explicitly reverted. Do not reintroduce "Agilant" in schema, copy, or meta. (Captured as a team brand standard — see Related docs.)
|
|
@@ -79,4 +83,8 @@ Makes togatech.com visible and citable to search engines **and** AI answer engin
|
|
|
79
83
|
## Related
|
|
80
84
|
|
|
81
85
|
- standalone/apps/togatech/architecture.md (update its Build/deploy section once PR #30 merges — robotsPlugin gating + prerender step).
|
|
86
|
+
- standalone/apps/togatech/features/talos-product-page.md — first code-split + canvas page under prerender.
|
|
82
87
|
- standalone/apps/togatech/workflows/creating-pull-requests.md — how PRs get opened on this repo (gh CLI is unauthenticated; uses curl + osxkeychain token; base `_production`).
|
|
88
|
+
|
|
89
|
+
## Change history
|
|
90
|
+
- 2026-09-25 — Added lazy-route, no-DOM-append, TOGAPrerender UA and new-route rules from the /talos build (tcox)
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
---
|
|
2
|
+
title: Talos Product Page (/talos) — ported designer prototype
|
|
3
|
+
framework: "standalone"
|
|
4
|
+
repo: togatech
|
|
5
|
+
project: TOGA Technology Website
|
|
6
|
+
client: shared
|
|
7
|
+
type: feature
|
|
8
|
+
status: active
|
|
9
|
+
updated: 2026-09-25
|
|
10
|
+
owners: ["tcox"]
|
|
11
|
+
files:
|
|
12
|
+
- togatech/src/pages/Talos/TalosPage.tsx
|
|
13
|
+
- togatech/src/pages/Talos/talos.css
|
|
14
|
+
- togatech/src/pages/Talos/viewModel/useTalosSparks.ts
|
|
15
|
+
- togatech/src/pages/Talos/view/shared/Reveal.tsx
|
|
16
|
+
- togatech/src/routes.tsx
|
|
17
|
+
- togatech/src/components/templates/AppLayout/AppLayout.tsx
|
|
18
|
+
- togatech/src/components/templates/AppLayout/appLayoutContext.ts
|
|
19
|
+
- togatech/src/components/NavV2/view/TalosFab.tsx
|
|
20
|
+
related:
|
|
21
|
+
- ../architecture.md
|
|
22
|
+
- seo-aeo-geo-prerender.md
|
|
23
|
+
---
|
|
24
|
+
|
|
25
|
+
togatech `/talos` Talos AI product page, ported from a designer HTML/JSX/CSS prototype; open for the design-port CSS approach, lazy-load + prerender rules, page-owned footer, and opening the Talos chat from a page.
|
|
26
|
+
|
|
27
|
+
## Summary
|
|
28
|
+
|
|
29
|
+
`/talos` is a 15-section product page (`src/pages/Talos/`) ported from a designer prototype (static HTML + in-browser JSX + CSS; the drop-in at `togatech/_design/talos/` is temporary and never committed). Standard MVVM page layout: `view/sections/<Section>/` (incl. `TalosSparks` canvas backdrop and `TalosFooter`), `view/shared/Reveal.tsx`, `viewModel/use*.ts` hooks, copy in `viewModel/FIELDS/*.json`, images in `public/assets/talos/`. Live route, prerendered, in the sitemap list.
|
|
30
|
+
|
|
31
|
+
## How it works
|
|
32
|
+
|
|
33
|
+
**CSS port (the reusable approach for any designer prototype):**
|
|
34
|
+
- All design CSS is concatenated **in original cascade order** into one plain file, `talos.css`, every selector prefixed `.talosPage `. `:root` / `html` / `body` selectors map to `.talosPage`. Generated by a one-off postcss prefix script (not in `scripts/`) — regenerate the same way if the design CSS changes.
|
|
35
|
+
- **Not a CSS module:** the design JS finds elements by raw class names/ids and sets keyframe names inline; CSS-module hashing breaks all of that. (CTO-reviewed choice.)
|
|
36
|
+
- Design timing workarounds are kept on purpose: IntersectionObserver + rect-poll backstops and `setTimeout` retry chains (rAF / ResizeObserver can go silent on cold load). Animation loops pause off-screen and on hidden tab.
|
|
37
|
+
- `<html>`-level styles (`overflow-x: clip` so `position: sticky` works — never `hidden`; `scroll-behavior: smooth`) are set in `useLayoutEffect` and **removed** on unmount, not "restored" (a prerendered snapshot already carries them, so the "previous" value is wrong).
|
|
38
|
+
|
|
39
|
+
**Code-split + prerender:** `routes.tsx` wraps the page in `React.lazy` + `<Suspense fallback={null}>` inside the route `Component`. Rules for this live in [seo-aeo-geo-prerender.md](seo-aeo-geo-prerender.md) (router `lazy` vs `React.lazy`, no DOM appends into React-owned nodes, `TOGAPrerender` UA skip for canvas engines).
|
|
40
|
+
|
|
41
|
+
**Layout hooks this page uses:**
|
|
42
|
+
- **Opening the Talos chat:** AppLayout owns the global Talos chat modal and passes `<Outlet context={{ openTalosChat }} />`. Pages call `useAppLayoutContext().openTalosChat()` (`AppLayout/appLayoutContext.ts`). Use this — do not mount a second chat.
|
|
43
|
+
- **Own footer:** `ROUTES_WITH_OWN_FOOTER` in `AppLayout.tsx` (only `/talos` today, tcox's call) hides the old site footer (with contact form); the page renders `TalosFooter`. The old footer stays on all other pages until the redesigned footer goes site-wide — then retire the list.
|
|
44
|
+
- **NavV2 floating Talos button** (`TalosFab.tsx`) is a `<button>` that opens the chat (same as the bar pill), not a `Link` to `/talos`; unfocusable while hidden. Styled from the design's `.talos-persist.talos-fab` (light-trail ring, icon-only, 44px, rises 20px on entrance).
|
|
45
|
+
|
|
46
|
+
**Routing:** `/talos` is in `LIVE_ROUTES` (`NavV2/navRoutes.ts`) and `src/routes.config.json`. Sub-pages `/talos/one|flow|engage` are still `STUB_ROUTES`.
|
|
47
|
+
|
|
48
|
+
**Copy:** uses the design's "Katie" copy set (Katie signs off copy). Still placeholder: FAQ answers (`[Answer not written. Needs Jeff.]`), the Voice section quote, and the demo stage (no video).
|
|
49
|
+
|
|
50
|
+
## Gotchas
|
|
51
|
+
|
|
52
|
+
- Design `body{background:transparent}` collapses onto `.talosPage` and wipes the page colour — drop the body background when porting.
|
|
53
|
+
- `.talosPage` needs `isolation: isolate` so negative/low `z-index` backdrop layers paint above its background (it stands in for `<html>`).
|
|
54
|
+
- Site-global `src/styles/index.css` sets `word-spacing: 0.08em` on `p`, `h2`–`h6`, `a`, `li`, `button` — changes line breaks vs the design. Reset to `normal` inside the page.
|
|
55
|
+
- Tailwind preflight is global and can differ from the design's browser defaults — check margins/list/button resets when a section looks off.
|
|
56
|
+
|
|
57
|
+
## Change history
|
|
58
|
+
- 2026-09-25 — Built /talos from the designer prototype; added Outlet context `openTalosChat`, `ROUTES_WITH_OWN_FOOTER`, TalosFab now opens chat (tcox)
|
|
@@ -6,7 +6,7 @@ project: TOGA Technology Website
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: workflow
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-09-
|
|
9
|
+
updated: 2026-09-25
|
|
10
10
|
owners: ["tcox"]
|
|
11
11
|
files:
|
|
12
12
|
- togatech/package.json
|
|
@@ -28,17 +28,21 @@ The gotcha-avoidance path for getting `togatech` up on a dev machine and actuall
|
|
|
28
28
|
1. **`npm install` before anything else, every time you pull.** A stale `node_modules` shows up as a Vite resolve error, not as a missing dependency: `"react-helmet-async" is imported by … but could not be resolved`. Both `react-helmet-async` and `react-google-recaptcha-v3` are declared in `package.json` (added by the SEO work) but absent from an older install, and the site simply will not load.
|
|
29
29
|
2. **Start the dev server** — `npm run dev`, or `npm run togatech` for the `--host togatech` variant (Vite `allowedHosts: ["togatech"]`).
|
|
30
30
|
3. **Clear localStorage before judging any data fetch.** `App.tsx` wraps the app in `PersistQueryClientProvider` with the persister key **`"commerce"`** and a **24h `staleTime`**, so a previously cached query (e.g. `jobPosts`) renders from localStorage with **no network request at all**. Clear the persisted cache **and** `accessToken` / `refreshToken` — a stale public token from `POST /v2/auth/public` will otherwise be reused too.
|
|
31
|
-
4. **Do not expect `npm run lint` to work.** The script is `eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0`, but **`eslint` is not in `package.json` dependencies or devDependencies at all** — there is no local binary, so a clean install cannot lint.
|
|
31
|
+
4. **Do not expect `npm run lint` to work.** The script is `eslint . --ext ts,tsx --report-unused-disable-directives --max-warnings 0`, but **`eslint` is not in `package.json` dependencies or devDependencies at all** — there is no local binary, so a clean install cannot lint. There is also **no ESLint config** — ad hoc `npx eslint` fails with "couldn't find an eslint.config.* file". Type-check with `npx tsc --noEmit -p tsconfig.app.json`; it has **many pre-existing unrelated errors**, so filter the output by the paths you touched.
|
|
32
32
|
5. **If Cypress won't run, verify headlessly with the repo's Puppeteer.** `cypress` 15.11 fails its own binary verification on this Windows machine — `bad option: --smoke-test` — and `npx cypress install` does **not** fix it. Workaround: `puppeteer` is already a dependency, so drive **system Chrome** directly by passing `executablePath` to `puppeteer.launch()`, navigate to the dev-server URL, and assert on the rendered DOM (the section testids, e.g. `job-posting-section` / `job-opening-cards`). Same technique the production build already uses in `scripts/prerender.mjs`.
|
|
33
33
|
|
|
34
34
|
## Gotchas
|
|
35
35
|
|
|
36
36
|
- A Vite "imported but could not be resolved" error almost always means **stale install**, not a missing package — check `package.json` before adding a dependency.
|
|
37
|
-
- `npm run lint` is effectively dead until eslint
|
|
37
|
+
- `npm run lint` is effectively dead until eslint and an `eslint.config.*` are added to the repo; do not treat a lint failure-to-start as a code problem.
|
|
38
38
|
- Cypress specs are still the source of truth for e2e coverage — the Puppeteer route is a *local verification* workaround, not a replacement. Don't delete or rewrite specs because Cypress won't launch locally.
|
|
39
|
+
- `robotsPlugin` writes `robots.txt` to `./dist` even when you build with `--outDir <other>` — a scratch build still touches `dist/`.
|
|
39
40
|
- Watching the network tab is not proof a fetch is broken: see step 3 (persisted query cache).
|
|
40
41
|
|
|
41
42
|
## Related
|
|
42
43
|
|
|
43
44
|
- [togatech architecture](../architecture.md)
|
|
44
45
|
- [Careers Section — Live Paylocity Job Openings](../features/careers-paylocity-job-openings.md)
|
|
46
|
+
|
|
47
|
+
## Change history
|
|
48
|
+
- 2026-09-25 — No eslint config either; `tsc -p tsconfig.app.json` path-filter tip; robotsPlugin ignores --outDir (tcox)
|
package/package.json
CHANGED