toga-ai 1.0.1000 → 1.0.1001
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/standalone/apps/claude/workflows/knowledge-publish-pipeline.md +4 -2
- package/knowledge/standalone/apps/togatech/INDEX.md +1 -1
- package/knowledge/standalone/apps/togatech/features/navv2-global-nav.md +22 -2
- package/knowledge/standalone/apps/togatech/features/talos-product-page.md +12 -3
- package/knowledge/standalone/apps/togatech/workflows/local-dev-and-headless-verification.md +5 -2
- package/package.json +1 -1
|
@@ -6,8 +6,8 @@ project: Claude Harness
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: workflow
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-
|
|
10
|
-
owners: ["jcardinal"]
|
|
9
|
+
updated: 2026-10-12
|
|
10
|
+
owners: ["jcardinal", "tcox"]
|
|
11
11
|
files:
|
|
12
12
|
- claude/knowledge.js
|
|
13
13
|
related:
|
|
@@ -47,6 +47,8 @@ Publish sequence, run inside the team repo clone (`~/toga-tech`):
|
|
|
47
47
|
- **`.claude/settings.json` is tracked in this repo and is edited by the harness itself**, so local drift there is expected and recurring. It was the dirty file that made the failure 100% reproducible on at least one machine. `--autostash` makes publish tolerate it, but the drift still wants a periodic `git diff .claude/settings.json` decision — commit it or revert it. It is also the file most likely to make `npx toga-ai`'s `git pull --ff-only` refuse (see the harness distribution doc).
|
|
48
48
|
- **A `catch` that discards `stderr` disguises a deterministic bug as a flaky one.** This bug went undiagnosed for months purely because `catch (e)` threw git's stderr away while git was naming the exact cause on every single run. Any retry wrapper around a shell command in this repo must surface `e.stderr || e.stdout` on final failure.
|
|
49
49
|
|
|
50
|
+
- **`--mirror` copies the whole KB into `<repo>/.claude/knowledge`** (~784 files in togatech), untracked in app repos. Never commit it to an app repo. Hide it locally with `.git/info/exclude` (add `.claude/knowledge/`) — do not edit the app's `.gitignore` for it.
|
|
51
|
+
|
|
50
52
|
## Related
|
|
51
53
|
|
|
52
54
|
- [Harness Distribution](harness-distribution.md)
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
|-----|---------|
|
|
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
|
-
| [NavV2 Global Nav — menus, scroll reveal, Talos FAB](features/navv2-global-nav.md) | togatech NavV2 header (designer "phase one"): data-driven menus, `data-nav-reveal` scroll hide/show, opt-in `data-nav-
|
|
7
|
+
| [NavV2 Global Nav — menus, panel shell, scroll reveal, Talos FAB](features/navv2-global-nav.md) | togatech NavV2 header (designer "phase one"): data-driven menus, one shared panel shell + WebGL canvas, `data-nav-reveal` scroll hide/show, opt-in `data-nav-pin |
|
|
8
8
|
| [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 |
|
|
9
9
|
| [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, re-porting a new design drop, laz |
|
|
10
10
|
| [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`. |
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
---
|
|
2
|
-
title: NavV2 Global Nav — menus, scroll reveal, Talos FAB
|
|
2
|
+
title: NavV2 Global Nav — menus, panel shell, scroll reveal, Talos FAB
|
|
3
3
|
framework: "standalone"
|
|
4
4
|
repo: togatech
|
|
5
5
|
project: TOGA Technology Website
|
|
@@ -12,8 +12,11 @@ files:
|
|
|
12
12
|
- togatech/src/components/NavV2/view/NavV2.tsx
|
|
13
13
|
- togatech/src/components/NavV2/view/TalosFab.tsx
|
|
14
14
|
- togatech/src/components/NavV2/view/NavDestLink.tsx
|
|
15
|
+
- togatech/src/components/NavV2/view/SilkCanvas.tsx
|
|
15
16
|
- togatech/src/components/NavV2/view/panels/WhatPanel.tsx
|
|
16
17
|
- togatech/src/components/NavV2/view/panels/CompanyPanel.tsx
|
|
18
|
+
- togatech/src/components/NavV2/view/panels/IndustriesPanel.tsx
|
|
19
|
+
- togatech/src/components/NavV2/view/panels/ResourcesPanel.tsx
|
|
17
20
|
- togatech/src/components/NavV2/view/panels/PanelFooter.tsx
|
|
18
21
|
- togatech/src/components/NavV2/navV2.module.css
|
|
19
22
|
- togatech/src/components/NavV2/types.ts
|
|
@@ -26,12 +29,15 @@ files:
|
|
|
26
29
|
- togatech/src/components/NavV2/viewModel/FIELDS/NAVFIELDS.json
|
|
27
30
|
- togatech/src/components/MobileNav/MobileNav.tsx
|
|
28
31
|
- togatech/src/styles/index.css
|
|
32
|
+
- togatech/public/assets/nav/logo-talos-ai.svg
|
|
33
|
+
- togatech/public/assets/nav/logo-toga-platform.svg
|
|
34
|
+
- togatech/tailwind.config.js
|
|
29
35
|
related:
|
|
30
36
|
- ../architecture.md
|
|
31
37
|
- talos-product-page.md
|
|
32
38
|
---
|
|
33
39
|
|
|
34
|
-
togatech NavV2 header (designer "phase one"): data-driven menus, `data-nav-reveal` scroll hide/show, opt-in `data-nav-pinned` for sticky scenes, Talos FAB rules, design-anchor rule. Open before touching the nav or adding a full-screen sticky section.
|
|
40
|
+
togatech NavV2 header (designer "phase one"): data-driven menus, one shared panel shell + WebGL canvas, `data-nav-reveal` scroll hide/show, opt-in `data-nav-pinned` for sticky scenes, Talos FAB rules, design-anchor rule. Open before touching the nav or adding a full-screen sticky section.
|
|
35
41
|
|
|
36
42
|
## Summary
|
|
37
43
|
|
|
@@ -44,6 +50,16 @@ Global header in `src/components/NavV2/` (MVVM: `view/`, `viewModel/`, menu data
|
|
|
44
50
|
- Flat links are `flatLinks[]` (was single `flatLink`): The TOGA Blog → `/blog` stub, Contact.
|
|
45
51
|
- What we do has 2 tabs (Business Units, Platforms). Tab hover switches the tab but never moves keyboard focus (`useRovingTabs`).
|
|
46
52
|
- Company panel and What-we-do share `panels/PanelFooter.tsx`.
|
|
53
|
+
- Platforms tab titles ("Talos AI", "TOGa Platform") show a brand logo on the left: data is `logo: {src, size}` in `NAVFIELDS.json` (`PlatformLogo` in `types.ts`), files in `public/assets/nav/` (Talos 38px, TOGa Platform 32px), 9px gap, class `.platformTitle`.
|
|
54
|
+
|
|
55
|
+
**Panel shell (one for all menus):** `NavV2.tsx` renders the only `.panel` (`hidden={!anyOpen}`) with the only `<SilkCanvas active={anyOpen}/>` + `.panelScrimOverlay`. Panel components (What / Industries / Company / Resources) return just their `.panelPad` div with `id` (the `aria-controls` target) and `data-screen-label`.
|
|
56
|
+
- **Never put a `.panel` shell or a `SilkCanvas` inside a panel component.** Each canvas is a WebGL context; one canvas per panel made a new context on every menu open (Chrome keeps only ~16 live).
|
|
57
|
+
- `.panel[hidden]{display:none}` is required — `.panel{display:flex}` beats the `hidden` attribute.
|
|
58
|
+
- `navPanelIn` slide-in plays on open (display none → flex restarts it); switching menu to menu does not replay it.
|
|
59
|
+
|
|
60
|
+
**Type:** matches the designer type spec (see Gotchas). `navV2.module.css` resets the site-wide word-spacing inside the nav: `.root :where(p,h2,h3,h4,h5,h6,a,li,button){word-spacing:normal}` (same idea as `/talos` — see [talos-product-page.md](talos-product-page.md) Gotchas).
|
|
61
|
+
|
|
62
|
+
**Mobile:** `MobileNav` closes on resize only when width > 1280 (`MOBILE_NAV_MAX_WIDTH_PX`), matching `tailwind.config.js` `md: {max:'1280px'}` (AppLayout: NavV2 `md:hidden`, hamburger `hidden md:block`).
|
|
47
63
|
|
|
48
64
|
**Scroll reveal (`useNavReveal.ts`):** sets `data-nav-reveal = top | hidden | shown` on the **nav root**, not `<html>`.
|
|
49
65
|
- `top` within 80px of page top. Hides after 8px scroll down; shows after 8px scroll up.
|
|
@@ -63,7 +79,11 @@ Global header in `src/components/NavV2/` (MVVM: `view/`, `viewModel/`, menu data
|
|
|
63
79
|
- **Design anchors usually do not exist on our pages.** Use a design link anchor (`#apps`, `#solutions`, `#culture`, `#mission`, `#team`, `#why-us`, …) only if that id exists on the target page; otherwise keep the `navRoutes.ts` route / `/company/*` stub. None of the phase-one anchors exist today.
|
|
64
80
|
- Between ~88px scroll and one screen, neither bar nor FAB shows. Matches the design; open question with tcox — do not "fix" without asking.
|
|
65
81
|
- `/ai-solutions` stub is no longer linked from the nav.
|
|
82
|
+
- **Tailwind screens here are max-width (desktop-first):** `md:` means "≤ 1280px", not "≥ 768px".
|
|
83
|
+
- **Tailwind line-height traps:** `text-xs/sm/base/lg` set their own line-height; `leading-normal` is `1.5`, not CSS `line-height: normal`. When the design says "normal", use `leading-[normal]`.
|
|
84
|
+
- **Set logo size by inline style, not the `height` attribute** — Tailwind preflight `img{height:auto}` overrides it (the TOGa Platform SVG is 98x100, not square).
|
|
66
85
|
- Nav type spec (sizes, weights, spacing, line-height, colour) is `navigation-type-spec.md`, attached to ClickUp TRUE-82043. Check nav type changes against it.
|
|
67
86
|
|
|
68
87
|
## Change history
|
|
88
|
+
- 2026-10-12 — Type spec match, Platforms logos, one shared panel shell + SilkCanvas (WebGL context leak fix), MobileNav closes only above 1280px (TRUE-82042, tcox)
|
|
69
89
|
- 2026-10-05 — Phase-one redesign: 4 → 2 menus, `flatLinks[]`, Platforms/Company panels rebuilt, scroll reveal + `data-nav-pinned`, compact viewport, FAB visibility rules (tcox)
|
|
@@ -6,7 +6,7 @@ project: TOGA Technology Website
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: feature
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-10-
|
|
9
|
+
updated: 2026-10-12
|
|
10
10
|
owners: ["tcox"]
|
|
11
11
|
files:
|
|
12
12
|
- togatech/src/pages/Talos/TalosPage.tsx
|
|
@@ -14,6 +14,9 @@ files:
|
|
|
14
14
|
- togatech/src/pages/Talos/viewModel/useTalosSparks.ts
|
|
15
15
|
- togatech/src/pages/Talos/viewModel/useGlassPanes.ts
|
|
16
16
|
- togatech/src/pages/Talos/viewModel/useTalosPanelSky.ts
|
|
17
|
+
- togatech/src/pages/Talos/viewModel/useTalosSubnav.ts
|
|
18
|
+
- togatech/src/pages/Talos/viewModel/FIELDS
|
|
19
|
+
- togatech/src/pages/Talos/view/sections/TalosChoosing/TalosChoosing.tsx
|
|
17
20
|
- togatech/src/pages/Talos/view/shared/Reveal.tsx
|
|
18
21
|
- togatech/src/pages/Talos/view/sections/TalosHero
|
|
19
22
|
- togatech/src/pages/Talos/view/sections/TalosVoice
|
|
@@ -42,7 +45,8 @@ togatech `/talos` Talos AI product page, ported from a designer HTML/JSX/CSS pro
|
|
|
42
45
|
- After regenerating, re-apply the port edits: add any design token the CSS uses but our copy lacks (the first port missed `--ease-enter`, so `.reveal` / `.tlh-enter` / `.tpl-rev` had no valid transition); drop `.needs-dev*`, `.tvq*`, and design `.talos-fab{display:none !important}` (it is for the design's orb launcher and would hide our NavV2 FAB until the orb is ported).
|
|
43
46
|
- **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.)
|
|
44
47
|
- 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.
|
|
45
|
-
- `<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).
|
|
48
|
+
- `<html>`-level styles (`overflow-x: clip` so `position: sticky` works — never `hidden`; `scroll-behavior: smooth`) are set in `useLayoutEffect` (`useRootStyles` in `TalosPage.tsx`) and **removed** on unmount, not "restored" (a prerendered snapshot already carries them, so the "previous" value is wrong).
|
|
49
|
+
- **Reduced motion:** under `prefers-reduced-motion`, `useRootStyles` skips `scroll-behavior: smooth` and `useTalosSubnav` scrolls with `behavior: "instant"` — `"auto"` inherits the `<html>` smooth setting.
|
|
46
50
|
|
|
47
51
|
**Code-split + prerender:** `routes.tsx` wraps the page in `React.lazy` + `<Suspense fallback={null}>` inside the route `Component`. Rules in [seo-aeo-geo-prerender.md](seo-aeo-geo-prerender.md). Page-specific: `useGlassPanes` `useFitGap` (56px under the lede) skips on the `TOGAPrerender` UA so the snapshot does not bake the crawler-viewport margin.
|
|
48
52
|
|
|
@@ -55,7 +59,11 @@ togatech `/talos` Talos AI product page, ported from a designer HTML/JSX/CSS pro
|
|
|
55
59
|
|
|
56
60
|
**Routing:** `/talos` is in `LIVE_ROUTES` (`NavV2/navRoutes.ts`) and `src/routes.config.json`. Sub-pages `/talos/one|flow|engage` are still `STUB_ROUTES`.
|
|
57
61
|
|
|
58
|
-
**Copy:** the design's default `COPY.katie` set (Katie signs off copy).
|
|
62
|
+
**Copy:** the design's default `COPY.katie` set (Katie signs off copy). Not production-ready yet (new ticket pending, as of 2026-10-12):
|
|
63
|
+
- `TALOSFAQFIELDS.json` — 6 answers are "[Answer not written. Needs Jeff.]"; "Certification three/four" are placeholders.
|
|
64
|
+
- `TALOSVOICEFIELDS.json` — quote still flagged as placeholder.
|
|
65
|
+
- `TalosChoosing` card CTAs ("Book a demo", "See TOGa Platform") are plain spans with no link.
|
|
66
|
+
- Demo stage has no video.
|
|
59
67
|
|
|
60
68
|
## Port status (design drop 2, 2026-10)
|
|
61
69
|
|
|
@@ -76,5 +84,6 @@ Design's `HeroWeave` / `HeroDots` / old Hero are dead code — do not port.
|
|
|
76
84
|
- Tailwind preflight is global and can differ from the design's browser defaults — check margins/list/button resets when a section looks off.
|
|
77
85
|
|
|
78
86
|
## Change history
|
|
87
|
+
- 2026-10-12 — Reduced-motion: no smooth scroll on `<html>`, instant subnav jumps; listed open placeholder copy/CTAs (TRUE-82042, tcox)
|
|
79
88
|
- 2026-10-05 — Design drop 2, batches 1–2: talos.css regen (+`--ease-enter`, `.talos-mark`), Hero "Ask Talos", Voice → `.tproof-*`, FAQ bridge rules, useFitGap prerender skip (tcox)
|
|
80
89
|
- 2026-09-25 — Built /talos from the designer prototype; added Outlet context `openTalosChat`, `ROUTES_WITH_OWN_FOOTER`, TalosFab now opens chat (tcox)
|
|
@@ -6,12 +6,14 @@ project: TOGA Technology Website
|
|
|
6
6
|
client: shared
|
|
7
7
|
type: workflow
|
|
8
8
|
status: active
|
|
9
|
-
updated: 2026-10-
|
|
9
|
+
updated: 2026-10-12
|
|
10
10
|
owners: ["tcox"]
|
|
11
11
|
files:
|
|
12
12
|
- togatech/package.json
|
|
13
13
|
- togatech/cypress.config.ts
|
|
14
14
|
- togatech/src/App.tsx
|
|
15
|
+
- togatech/tsconfig.json
|
|
16
|
+
- togatech/tsconfig.app.json
|
|
15
17
|
related:
|
|
16
18
|
- ../architecture.md
|
|
17
19
|
- ../features/careers-paylocity-job-openings.md
|
|
@@ -28,7 +30,7 @@ The gotcha-avoidance path for getting `togatech` up on a dev machine and actuall
|
|
|
28
30
|
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
31
|
2. **Start the dev server** — `npm run dev`, or `npm run togatech` for the `--host togatech` variant (Vite `allowedHosts: ["togatech"]`).
|
|
30
32
|
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. 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
|
|
33
|
+
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` — **not** `-p .`: root `tsconfig.json` has `"files": []` (references only), so `tsc -p .` and the `tsc` step in `npm run build` check nothing. It has pre-existing errors (13 on 2026-10-12, in Modal.tsx, PinScroll.tsx, TalosChat.tsx, IQ.tsx, OurHistory.tsx, routes.tsx, getFontAwesomeIcon.tsx), so filter the output by the paths you touched.
|
|
32
34
|
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
35
|
|
|
34
36
|
## Gotchas
|
|
@@ -46,5 +48,6 @@ The gotcha-avoidance path for getting `togatech` up on a dev machine and actuall
|
|
|
46
48
|
- [Careers Section — Live Paylocity Job Openings](../features/careers-paylocity-job-openings.md)
|
|
47
49
|
|
|
48
50
|
## Change history
|
|
51
|
+
- 2026-10-12 — Root tsconfig checks nothing (build's `tsc` does not type-check); 13 known errors (tcox)
|
|
49
52
|
- 2026-10-05 — Prod build sends GA hits from localhost; robotsPlugin closeBundle fails without dist/ (tcox)
|
|
50
53
|
- 2026-09-25 — No eslint config either; `tsc -p tsconfig.app.json` path-filter tip; robotsPlugin ignores --outDir (tcox)
|
package/package.json
CHANGED