design(docs): program review of docs.cl8y.com architecture #2
Labels
No labels
agent:implement
agent:research
docs
feature
ready
research
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
code/cl8y-docs#2
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Summary
Program review of the docs.cl8y.com architecture produced by #1. This is a review of the architecture document, not a product implement and not a substitute for later PR review of #3.
Parent spec: PlasticDigits/cl8y-marketing#3.
Sequence: #1 architecture (done on a reviewable PR or
main) → this issue → #3 v0 implement. Do not applyready/agent:implementto #3 until this issue records RECOMMEND: ACCEPT (or FIX items landed and re-reviewed).Current codebase
At filing,
code/cl8y-docsis README-only. Reviewers must wait until #1 landsdocs/ARCHITECTURE.mdandAGENTS.md(AC1–AC4 on #1). If those files are absent, this issue is blocked — comment that and stop. Do not invent an architecture in this ticket.What to review (after #1)
docs/ARCHITECTURE.md— stack, routes, nginx crawl rules, env, headers, CTA, 404, CI, non-goals.AGENTS.md— invariants and the #1 → #2 → #3 gate.README.md— must not claim the site is live.External truth to check against
cl8y-marketing/strategy/technical-architecture.md— one deployable = one repo; Vite → nginx; publicVITE_*only.cl8y-dex-terraclassic/docker/frontend/nginx.conf— SPAtry_filesanti-pattern for crawl files (marketing#2).CL8Y-webprerender +src/blog/SEO.tsx+src/lib/siteOrigin.ts— unique titles/canonicals without copying wagmi/three.js.CL8Y-web/src/content/invariants.ts— DEX originhttps://dex.cl8y.com; banned current-product copy.Duplicates / already implemented
Why the new implementation is needed
A greenfield static host will copy the DEX SPA fallback unless someone independently checks the architecture against the known failure (HTML served as
robots.txt/sitemap.xml) and against marketing#3’s non-root, unique-canonical, and CTA rules.Program review exists so #3 does not start from an unreviewed design. CAC previously queued an implement job on the empty repo; that order is wrong. This issue is the gate.
Constraints and guardrails
ready/agent:implementto this issue or to #3 from this work. Labels:research+agent:research.RECOMMEND: ACCEPT|RECOMMEND: FIX|RECOMMEND: BLOCK. Citedocs/ARCHITECTURE.mdsections. A bare “lgtm” is not ACCEPT.VITE_*, places the app in another repo, or requires wallet/trading UI.strategy/static-content-architecture.mdhere (marketing repo). Do not land DEXSitemap:.Relevant files
docs/ARCHITECTURE.md(after #1)AGENTS.mdREADME.mdcl8y-dex-terraclassic/docker/frontend/nginx.confCL8Y-web/vite.config.ts,src/blog/SEO.tsx,src/lib/siteOrigin.tsCL8Y-web/src/content/invariants.tsRecommended direction
URLSearchParams, HTTPS origins, 404 unknown paths, clickjacking/nosniff).ready.ready+agent:implement— this review must not apply those labels.Acceptance criteria
docs/ARCHITECTURE.mdfrom #1 is reviewable (PR ormain).RECOMMEND: ACCEPT,RECOMMEND: FIX, orRECOMMEND: BLOCK.ready/agent:implementby this work.Test plan (functional paths)
docs/ARCHITECTURE.md+AGENTS.md; else stop (blocked)text/plain; sitemapapplication/xml; missing → 404VITE_DEX_ORIGIN;URLSearchParams; no visitor-query originTest plan (attack, hack, and abuse)
javascript:https://docs.cl8y.comwindow.location.search(open redirect)utm_*/from/towithjavascript:,data:,//evilVITE_*or gitreadySitemap:to docs before live sitemapVerification criteria
git ls-filesstill docs-only if ACCEPT of #1; if #1 already merged app code, BLOCK.ready.Out of scope
First-pass model recommendation
Recommendation: grok-high. Cross-repo security review (crawl cloaking, open redirects, secrets, clickjacking) against a new host. Not Composer.
Gate
Blocked until #1 AC1–AC4. #3 stays blocked until this issue’s AC2 is ACCEPT (or FIX cycle complete).
#1 architecture is on
mainvia merged #4 (8bd03b9). Review targets:docs/ARCHITECTURE.md,docs/INVARIANTS.md,AGENTS.md,README.md. Still no Vite/Docker/nginx/Woodpecker in tree (AC4).This issue is unblocked. Comment a verdict
RECOMMEND: ACCEPT|FIX|BLOCKwith marketing#3 mapping and A1–A15. Do not start #3 and do not applyready/agent:implement.Do not BLOCK #6 for adding
.woodpecker.yaml. The merged #1 text over-blocked CI. Review the architecture document as usual; a pipeline is required (gitleaks + tree now; Node/Playwright still this issue’s gate on #3).RECOMMEND: ACCEPT
Independent program review of
code/cl8y-docsatorigin/mainc296faa(architecture from merged #4, Woodpecker from merged #6). I did not write the architecture, did not implement the app, and did not applyready/agent:implementto #3.Review tree:
git ls-filesonorigin/mainis docs + skills + README + AGENTS +.woodpecker.yaml+.gitleaks.toml+.gitignoreonly. Parent spec: PlasticDigits/cl8y-marketing#3.The document is sufficient for #3 to implement without inventing product policy. It does not contradict marketing#3 on crawl files, unique HTML, env, headers, or repo boundary. No BLOCK vectors (SPA fallback, secrets in
VITE_*, app in another repo, wallet UI required). No required architecture edits.1. Issue #2 AC1–AC7
docs/ARCHITECTURE.mdfrom #1 is reviewableorigin/mainc296faa. Architecture landed via merged #4 (8bd03b9). Woodpecker follow-up via merged #6. Files present:docs/ARCHITECTURE.md,docs/INVARIANTS.md,AGENTS.md,README.md, three skills.RECOMMEND: …package.json/Dockerfile/nginx.conf/ page TSX.ready/agent:implementby this workfeatureonly. This review did not change labels.2. marketing#3 mapping
ARCHITECTURE §15 claims constraints 1–16 match §§3–12. Checked against the parent issue body, not that checkbox.
Repo boundary, crawl, unique HTML, env, headers, CTA
robots.txt(text/plain,User-agent, not HTML shell)robots.txtbody + Content-Type; §7 exactlocation = /robots.txt.sitemap.xml(application/xmlviadefault_type, urlset of docs URLs only)default_type application/xml. Explicitly does not rely on nginx.xml→text/xml.index.htmltry_files $uri =404on exact locations; 404 policy table. INVARIANTS 7.<title>+rel=canonicalper shipped pathindex.htmltitle/canonical.” INVARIANTS 10.VITE_*only; fail closed on missing / non-https://originstest -n \"$VITE_WC_PROJECT_ID\".” INVARIANTS 11. Forbidswindow.locationfor product/canonical origins (§5, §9, §10).X-Frame-Options: DENY,frame-ancestors 'none',nosniffon HTML and crawl filesadd_headeron server + exact crawl locations. MatchesCL8Y-webCLICKJACKING_HEADERS.VITE_DEX_ORIGIN,URLSearchParams, execute ids not tickers, no visitor-query concatutm_campaignset, Forbidden list). Skilldocs-dex-cta.Sitemap:pointer not in this repo / not #3strategy/static-content-architecture.mdnot in this repoConstraints 1–16
code/repo; not marketing / CL8Y-web / DEXFROM node:24-bookworm-slim AS buildernginxinc/nginx-unprivileged:1.27-alpine, listen 8080, do not copy DEXnginx:1.27-alpine./robots.txt//sitemap.xml; sibling paths not HTML 200try_files.text/plain; sitemapapplication/xmlviadefault_typehttps://indexer.dex.cl8y.com.https://dex.cl8y.com;from/toexecute ids;URLSearchParams; nojavascript:/data:////?url=/ visitor query /window.locationoriginuluna+ Terra Classic CL8Y CW20. Docs must not emitexactAmount/exactField. Honest note that DEX dropsutm_*on rewrite./marketsforbids figures.content/guides/; stubs OK/guides; §12; §14Sitemap:gated on live docs crawlnosniffhttps://docs.cl8y.com(no trailing slash on origin); www 301 or unpublishedmarketing#3 AC1–AC12 (architecture coverage, not production proof)
GET /HTML chrome/; §3 stack; §16/robots.txttext/plain/sitemap.xmlapplication/xml@hashed_asset_miss; §8Sitemap:Independently checked siblings:
docker/frontend/nginx.conf: SPAtry_files $uri $uri/ /index.htmlon/; exact-location 404 only for/og-image.png. Architecture copies the 404 idea, forbids the SPA/.CL8Y-web/src/lib/siteOrigin.ts: trailing-slash strip pluswindow.locationfallback. Architecture reuses the bake/strip contract and forbids the fallback.invariants.ts: DEX origin,BANNED_CURRENT_COPY,CLICKJACKING_HEADERSmatch.tokenDirectory.tsaddresses in §4 match.ulunais correctly labeled as DEX swap-layer.3. Attack table A1–A15 (this issue’s numbering)
ARCHITECTURE §18 uses a different A1–A12 numbering. This table is issue #2’s A1–A15.
try_files $uri $uri/ /index.html. Exactlocation =+try_files $uri =404.text/plain)User-agent, must not be<!doctypeor a Vite shell; sitemap rooturlset. §16 names body sniff.locto phishing / DEX /javascript:window.location.search(open redirect)VITE_DEX_ORIGIN.utm_*/from/towithjavascript:,data:,//evilVITE_*or gitVITE_WC_*, LCD, forge, passwords..woodpecker.yamlgitleaks--exit-code 1.USER root.location / { try_files $uri $uri/ =404; }.readySitemap:to docs before live sitemapgit ls-filesonc296faa: no app scaffold..woodpecker.yamlis required CI, not app scaffold.root /usr/share/nginx/html;autoindex off; noalias.4. Functional T1–T10 (this issue)
docs/ARCHITECTURE.md+AGENTS.mdonorigin/main..woodpecker.yamlgitleaks + tree.5.
git ls-files(origin/mainc296faa)Allowed: docs, skills, README, AGENTS, Woodpecker, gitleaks, gitignore.
Absent (required at architecture time):
package.json,Dockerfile,nginx.conf,public/robots.txt,public/sitemap.xml, page TSX.Woodpecker is present and required. Node/Playwright remain #3.
6. #3 labels
#3 is Open, label
featureonly. Noready, noagent:implement. This review did not add them.7. README must not claim the site is live
PASS.
README.md: “Status: architecture only. This repository has no application source yet. The hostname is not a shipped first-party static site.”8. No credentials or unverified performance numbers as facts
PASS. No WalletConnect ids, LCD keys, forge tokens, or operator passwords. §12 forbids fee/TVL/volume/ranking/“best DEX.”
FIX items
None. No required edits to the architecture document.
Non-blocking notes for #3 implementers (not architecture defects):
.woodpecker.yaml” line is stale: gitleaks + tree already exist. #3 should extend that file with Node 24 + Playwright 5 workers, including crawl body sniff.dexHrefshould emit only the named default pair and closed campaign set. Do not put the pair contract, BSC, or MegaETH addresses infrom/to.Verdict
RECOMMEND: ACCEPT.
#3 may be labeled
ready+agent:implementby a human after this comment. This review does not apply those labels and does not start #3.