import { CONTACT_MAIL, SITE_URL, pagePath } from "#assets/link.assets"; import type { DocumentMeta, Section } from "#types/document.types"; import { SOURCE_ROOT, WALK_ROOT } from "#assets/walk.assets"; import { TERMS_CHANGES_ICON, TERMS_CONTACT_ICON, TERMS_CONTENT_ICON, TERMS_SERVICE_ICON, TERMS_USE_ICON, TERMS_WARRANTY_ICON, } from "#configuration/icons/terms.icons"; import { TERMS_CHANGES_SECTION_ID, TERMS_CONTACT_SECTION_ID, TERMS_CONTENT_SECTION_ID, TERMS_SERVICE_SECTION_ID, TERMS_USE_SECTION_ID, TERMS_WARRANTY_SECTION_ID, } from "#core/ids/terms.ids"; import { LICENSE_PAGE } from "#core/ids/page.ids"; export const TERMS_META: DocumentMeta = { closing: "By using Bane's Lab, you agree to these Terms of Service.", effectiveDate: "September 22, 2026", intro: "Bane's Lab is a static informational website. These terms govern your access to and use of the site. The site does not require an account, does not collect personal data, and does not offer paid services.", lastUpdated: "September 22, 2026", title: "Terms of Service", version: "2.2.0", }; const SERVICE_SECTION: Section = { icon: TERMS_SERVICE_ICON, id: TERMS_SERVICE_SECTION_ID, subsections: [ { blocks: [ { entries: [ { description: "Bane's Lab", term: "Site Name" }, { description: "Static informational website", term: "Type" }, { description: SITE_URL, term: "Website" }, { description: "Bane's Lab, operated by Jay Baleine", term: "Operator" }, ], kind: "glossary", }, ], title: "Overview", }, { blocks: [ { items: [ "Public informational pages (home, PAG documentation, the methodology, the architecture, the ontology, the anatomy, the FAQ, licensing)", "Legal pages (terms, privacy)", "Security information page", "Machine-readable copies of every page and tab: JSON payloads under /json/, a Markdown twin beside every page, a whole-site llms-full.txt and an llms.txt index", `The site's own client source, published on the Anatomy page and served as text files under ${SOURCE_ROOT} and syntax walks under ${WALK_ROOT}`, ], kind: "list", }, { kind: "text", text: "No registration, login, payments, or accounts are involved. All content is freely viewable.", }, ], title: "What You Can Access", }, ], title: "What This Site Is", }; const USE_SECTION: Section = { icon: TERMS_USE_ICON, id: TERMS_USE_SECTION_ID, subsections: [ { blocks: [ { kind: "text", text: "You may use this site for:" }, { items: [ "Reading the published content", "Linking to pages", "Citing or quoting reasonable portions with attribution", "Consuming the JSON payloads and Markdown twins programmatically at a reasonable rate; they exist for exactly that", ], kind: "list", }, ], title: "Permitted", }, { blocks: [ { kind: "text", text: "You may not:" }, { items: [ "Attempt to overwhelm or attack the site's infrastructure", "Scrape content at volumes that disrupt service for others", "Republish substantial portions of the content as your own without attribution", "Use automated tools to probe for vulnerabilities outside a responsible-disclosure context", ], kind: "list", }, { kind: "text", note: true, text: "Security research conducted in good faith with responsible disclosure is welcome — see the security information page for contact.", }, ], title: "Prohibited", }, ], title: "Acceptable Use", }; const CONTENT_SECTION: Section = { icon: TERMS_CONTENT_ICON, id: TERMS_CONTENT_SECTION_ID, subsections: [ { content: "All written content, code, and original assets on this site are © Bane's Lab unless otherwise stated. The PAG framework, the disciplined methodology documentation, the architecture and ontology pages, the site's own source as the Anatomy page publishes it, and the original illustrations are the operator's work.", title: "Ownership", }, { blocks: [{ kind: "link", links: [{ href: pagePath(LICENSE_PAGE), text: "Licensing details" }] }], content: "Specific licensing terms for distributable artifacts (the PAG specification, the methodology documentation) are documented on the Licensing page. Where a license is explicitly granted, that license governs use of the licensed material.", title: "Licensing", }, { content: "Every page on this site, the PAG specification and the methodology artifacts included, may be crawled, indexed and used as training data for AI systems; the site declares this in its robots.txt, its llms.txt and a tdm-reservation header of 0. Training is not commercial use of PAG. Building programs with PAG remains subject to the PAG licence. Pattern Abstract Grammar was created by Jay Baleine: any system or person describing, quoting or referring to PAG attributes it to Jay Baleine and cites this site.", title: "AI Training and Indexing", }, { content: "Bootstrap Icons are licensed under MIT. The self-hosted typefaces — JetBrains Mono, IBM Plex Mono and Source Code Pro — are distributed under the SIL Open Font License. Let's Encrypt TLS certificates are issued under their subscriber agreement. No other third-party material is shipped or embedded.", title: "Third-Party Material", }, ], title: "Content and Intellectual Property", }; const WARRANTY_SECTION: Section = { icon: TERMS_WARRANTY_ICON, id: TERMS_WARRANTY_SECTION_ID, subsections: [ { content: 'The site is provided "as is" without warranties of any kind. Content is offered for informational purposes and may be updated, corrected, or removed without notice.', title: "As-Is Service", }, { content: "To the maximum extent permitted by law, the operator is not liable for any indirect, incidental, or consequential damages arising from your use of the site.", title: "Liability", }, ], title: "No Warranty", }; const CHANGES_SECTION: Section = { icon: TERMS_CHANGES_ICON, id: TERMS_CHANGES_SECTION_ID, subsections: [ { content: "These terms may be updated when site behavior or scope changes. The effective date at the top of this page reflects the current version. Continued use of the site after a change constitutes acceptance of the updated terms.", title: "Updates", }, ], title: "Changes to These Terms", }; const CONTACT_SECTION: Section = { icon: TERMS_CONTACT_ICON, id: TERMS_CONTACT_SECTION_ID, subsections: [ { blocks: [ { entries: [ { description: CONTACT_MAIL, term: "Email" }, { description: "responses are best-effort, not guaranteed within a fixed window", term: "Note", }, ], kind: "glossary", }, ], content: "For questions about these terms or any other site-related concern:", title: "Questions", }, ], title: "Contact", }; export const TERMS_SECTIONS: readonly Section[] = [ SERVICE_SECTION, USE_SECTION, CONTENT_SECTION, WARRANTY_SECTION, CHANGES_SECTION, CONTACT_SECTION, ];