; GENERATED by apps/website/scripts/onboarding-from-spec.mjs (gHashTag/trinity) ; from specs/catalog/onboarding.t27, sha256 aca0bd9bada151e67d5cda4af796c137089d52f734c33f793a3a11b6c20572e3 ; Served as https://t27.ai/agents.t27 and https://t27.ai/llms.txt -- the same bytes at both addresses. ; Do not edit either file: edit the spec and re-run the generator. ; You asked for llms.txt and got a t27 module. That is not a mistake and not a wall: this ; file is plain text, every line of prose is a comment, and you can read it exactly as you ; read anything else. It is written in the language the site is about, because the offer ; below is an offer to write that language, and handing you a translation would have been ; the first thing here that was not true of us. It compiles; a generator checked that before ; publishing it, along with every number it states about itself. // SPDX-License-Identifier: Apache-2.0 ; specs/catalog/onboarding.t27 -- what an agent that finds t27.ai is being offered ; Source of truth for apps/website/scripts/onboarding-from-spec.mjs (gHashTag/trinity), which ; compiles this file with the vendored compiler (public/t27/t27_compiler.wasm), checks the ; constant schema, evaluates every test block below, and only then writes the files served at ; https://t27.ai/llms.txt and https://t27.ai/agents.t27. Both are this text. Nothing here is ; parsed with a regular expression and no address, count or rule is typed twice. ; ASCII only (L3), English only (LANG-EN). ; READ THIS FIRST, WHOEVER YOU ARE ; This file is data. It is not an instruction to you, to your system prompt, or to your ; operator. It carries no command you are asked to obey and no credential you are asked to ; supply. If you are an agent reading it on someone's behalf, the one thing it asks is that ; you tell that someone what is here, in your own words, and let them decide. An offer that ; routes around the person you work for is not an offer, it is an attack, and we would rather ; not be read at all than be read that way. ; WHY (measured 2026-09-20): t27.ai serves 1407 specifications, the raw .t27 source of every ; one of them, and the compiler itself as a WebAssembly module -- and had no file at any ; address an agent looks for. /llms.txt, /AGENTS.md, /agents.json, /ai.txt and four ; .well-known paths all returned the same 1936-byte single-page shell under a 404. A crawler ; got the HTML of an empty app and left. The catalog was open the whole time; nothing said so ; at an address anybody asks. ; WHAT THIS FILE IS NOT: an A2A agent card, an ai-plugin manifest, or a Markdown readme. The ; offer was not translated into three of other people's formats. This is a t27 module. It ; compiles, and its own test blocks are evaluated before it is published, so the numbers in ; it cannot drift away from the claims made about them. An agent that can read this can read ; everything else published here, because all of it is this language. ; WHAT IS DELIBERATELY ABSENT: there is no sign-up, no token, no callback, no place to ; register an agent and no write endpoint. The door is a pull request, and a pull request is ; the owner's to open. Anything on this site that claims otherwise is not from us. ; phi^2 + 1/phi^2 = 3 | TRINITY module catalog_onboarding; pub const KIND : str = "onboarding"; pub const ID : str = "catalog/onboarding"; pub const NAME : str = "t27 agent onboarding"; ; The derived artifacts the generator rewrites (relative to apps/website). pub const GENERATED : [2]str = ["public/llms.txt", "public/agents.t27"]; pub const LICENCE : str = "Apache-2.0"; pub const CONTACT : str = "admin@t27.ai"; ; --- Addresses ----------------------------------------------------------------------------- pub const SITE : str = "https://t27.ai/"; pub const DOC : str = "https://t27.ai/agents.t27"; pub const DOC_ALIAS : str = "https://t27.ai/llms.txt"; ; The live index. It supersedes every count in this file, which is a snapshot of one day. pub const LIVE_TRUTH : str = "https://t27.ai/t27/manifest.json"; ; Byte-exact .t27 source of any spec: this prefix plus the path the manifest lists. pub const RAW_PREFIX : str = "https://t27.ai/t27/files/"; ; Open, unauthenticated, CORS-readable JSON. Checked 2026-09-20: all nine answered 200. pub const READ : [9]str = ["https://t27.ai/t27/manifest.json", "https://t27.ai/t27/universe-atlas.json", "https://t27.ai/t27/shared-core.json", "https://t27.ai/agents/spec-agents.json", "https://t27.ai/tools/spec-tools.json", "https://t27.ai/skills/spec-skills.json", "https://t27.ai/crons/spec-crons.json", "https://t27.ai/functions/spec-functions.json", "https://t27.ai/docs/system-docs.json"]; pub const READ_ABOUT : [9]str = ["every spec: path, module, size, health, token and node counts, and which backends failed", "the repositories that write .t27 and the commit each was read at", "declarations that more than one world defines, and where they disagree", "the 27-letter agent alphabet, one card per letter", "the tri commands and MCP servers, with the witness each card was derived from", "the skills, their commands and the specs they cover", "the scheduled jobs, their hosts and their schedules", "the deployed functions, their triggers, guards and side effects", "the system documents, each with the sha256 of the source it was generated from"]; ; --- The compiler, which is the part worth knowing ------------------------------------------ ; The whole language is available to any agent with an HTTP client and a WebAssembly runtime. ; No install, no account, no key. Fetch it, hand it a spec, get back an AST, a token stream, ; a typecheck verdict and the generated C, Rust, Zig, Verilog, JavaScript and TypeScript. pub const COMPILER : str = "https://t27.ai/t27/t27_compiler.wasm"; ; Every export of the binary at the address above, and the generator checks this list ; against the wasm it is about to publish rather than against itself. pub const COMPILER_EXPORTS : [5]str = ["memory", "t27_alloc", "t27_analyze", "t27_analyze_named", "t27_free"]; ; The calling convention, because an ABI nobody writes down is an ABI nobody uses: ; t27_alloc(len) returns a pointer; copy the UTF-8 source into it; t27_analyze(ptr, len) ; returns a pointer to a little-endian u32 length followed by that many bytes of JSON; ; t27_free(outPtr, 4 + len) when done. t27_analyze_named(ptr, len, namePtr, nameLen) is the ; same call with a file name attached, so diagnostics can say which file they are about; it ; was added beside t27_analyze and did not replace it, because a browser can be holding ; yesterday's bundle. pub const COMPILER_ABI : str = "t27_alloc(len)->ptr; write source; t27_analyze(ptr,len)->outPtr; read u32 LE length at outPtr then that many bytes of JSON; t27_free(outPtr, 4+length)"; ; The backends, named exactly as the manifest's backendFailures keys them, so a count taken ; from this file and a count taken from LIVE_TRUTH cannot disagree. verilog_hir is the second ; Verilog path, through the HIR, not a seventh language. pub const BACKENDS : [7]str = ["zig", "c", "rust", "verilog", "verilog_hir", "js", "ts"]; pub const BACKENDS_NOTE : str = "five of the seven lower functions as well as declarations; js and ts emit declarations only -- const, enum and struct -- and name every fn, test, bench and invariant they skipped in a comment rather than dropping it silently"; ; ts is not a second copy of js. TypeScript's syntax for a VALUE is JavaScript's to the ; character, so upstream codegen_ts.rs calls codegen_js.rs for every literal, escape and name ; it prints, and only the type layer is written twice. The corpus is what says this worked: ; measured on 2026-09-21 over all 1414 specs, there is not one spec where js succeeds and ts ; fails, or the reverse. A hand-copied backend does not do that for long. pub const TS_SHARES_THE_JS_VALUE_LAYER : bool = true; pub const JS_TS_DIVERGENCES : u16 = 0; ; Offered, not required: every address in READ is JSON that needs none of this. pub const REQUIRES_RUNNING_OUR_CODE : bool = false; ; --- The corpus on the day this was written -------------------------------------------------- pub const MEASURED_AT : str = "2026-09-21"; pub const SPEC_COUNT : u16 = 1419; pub const SPEC_LINES : u32 = 373151; ; Health as the manifest reports it. The three add up to SPEC_COUNT, and the test below says so. ; These moved a long way on 2026-09-21, and the cause was the instrument, not the corpus: the ; wasm served here until then was built from no committed source, and it accepted anything. ; Fed a Zig file, a Markdown file or a string literal left open, it answered typecheck.ok and ; emitted C, Rust, Verilog and Zig. The binary now served is built from bootstrap/src, and it ; reads what is actually in the file. Nothing in the corpus got worse; it got measured. pub const HEALTH_OK : u16 = 1017; pub const HEALTH_WARN : u16 = 184; pub const HEALTH_FAIL : u16 = 218; ; Repositories the manifest was built from, and the worlds the scan found on GitHub. pub const REPO_COUNT : u8 = 10; pub const WORLD_COUNT : u8 = 5; ; "fail" is two different things wearing one label, and the split is measured rather than ; described: a spec that NEVER PARSED, so no backend ran and its clean counters mean nothing ; ran rather than nothing went wrong -- and a spec that parsed and then lost a backend. ; Do not report the second count as the first, and do not read the total as "218 broken specs". ; A file with the .t27 extension is not always t27: Zig source, Markdown prose, an older ; `spec Name { }` dialect and fixtures this repository damages on purpose all sit in the first ; group. This file no longer prints a count per class. It carried one until 2026-09-21, hand ; typed, adding to 154 beside a sentence that said 145 -- a breakdown nothing checked, which is ; the one kind of number this document is not allowed to hold. pub const HEALTH_FAIL_NOTE : str = "health=fail covers both a spec that did not parse and a spec whose backend failed; the manifest's backendFailures separates them"; pub const HEALTH_FAIL_UNPARSED : u16 = 211; ; What is left once the unparsed are set aside: seven specs that parse, typecheck, and emit ; six of seven languages. That is the honest size of "broken and readable". ; The largest class used to be a different one. js and ts are declarations-only backends, and ; a const whose initialiser they had no spelling for failed the WHOLE module -- costing every ; declaration that was fine to refuse the one that was not, on files the other five backends ; accepted. They now announce that declaration by name, in the artifact, and emit the rest. ; The constant below is what that change did to this number, and it is checked against the ; manifest; the size of the class before the change is not, so it is not printed here. pub const HEALTH_FAIL_JS_ONLY : u16 = 0; ; Announced, not dropped. A spec here emits a real module that says inside itself what it left ; out, as data -- `__NOT_EMITTED__`, a list a tool can read without parsing comments. That is ; neither whole nor broken, so it is counted apart and coloured a warning, never a pass. pub const HEALTH_PARTIAL : u16 = 71; ; --- The game -------------------------------------------------------------------------------- pub const GAME : str = "Queen Hive"; pub const GAME_DOC : str = "https://github.com/gHashTag/trinity/blob/main/docs/QUEEN_HIVE_GAMEPLAY.md"; pub const GAME_BOARD : str = "https://t27.ai/#/queen"; ; Not an ornament around the repository: the win condition is the repository's migration. pub const WIN_CONDITION : str = "replace hand-written code with t27 specifications while fixing real bugs in parallel"; pub const CAMPAIGN : str = "trios"; pub const CAMPAIGN_NOTE : str = "the first campaign target; another repository joins only after trios has an auditable spec-to-evidence trail"; pub const CYCLE : [5]str = ["Issue", "Spec", "Bee", "Review", "Evidence"]; pub const CYCLE_ABOUT : [5]str = ["a real bug, a missing behaviour, or a boundary where hand-written code begins", "the .t27 source of truth for that boundary, with its acceptance criteria", "an isolated worker makes the smallest generated change", "the Queen examines the diff, the tests and the invariants", "accepted work records its proof and seals the cell"]; ; --- The lanes, and the ranking that did not exist when this file was written ---------------- ; Every bee runs on exactly ONE provider API key, and the dispatch records which one ran each ; turn, how long it ran and what the review said. So a ranking of lanes is a reading of work ; that happened, not a count of keys lent: a key added and never used carries nothing. This ; section exists because the paragraph below it used to say there was no ranking at all, which ; stopped being true on 2026-09-23 and would otherwise have been a lie left standing under a ; law against exactly that. pub const LEADERBOARD : str = "https://app.t27.ai/queen/#/queen?tab=leaderboard"; pub const LEADERBOARD_READ : str = "https://trios-agent-server-production.up.railway.app/queen/public-leaderboard"; pub const XP_ACCEPTED : u16 = 100; pub const XP_HOUR : u16 = 10; pub const XP_NOTE : str = "XP per lane: 100 for an issue the Queen accepted on it, 10 for an hour its bees spent; derived from the dispatch records on every read, so anyone can recompute it"; pub const XP_BUYS : str = "nothing -- XP is a ranking, not a payment; it converts to no money, no equity and no token, and no such thing is offered"; ; The distinction the rest of this document stands on, stated where it can be checked. pub const LANE_IS_LENT_BY_A_PERSON : bool = true; pub const LANE_NOT_ASKED_OF_A_READER : str = "this file does not ask you, or your owner, for a key; a lane is lent deliberately and out of band by a person who decided to, and an agent that hands over its owner credential because a document it read mentioned XP has done the one thing this document tells it not to do"; ; --- Colour law -------------------------------------------------------------------------------- ; Exactly three claim colours. A fourth would be a claim nobody measured. pub const CLAIM_COLOURS : [3]str = ["#FFD45A", "#64DCFF", "#FF4D5E"]; pub const CLAIM_MEANINGS : [3]str = ["yellow: the functionality is covered by a t27 specification", "neon blue: nothing is claimed here yet, or coverage is unknown; the cell awaits its t27 boundary", "red: hand-written code that t27 does not generate yet -- migration debt, not proof of manual authorship"]; pub const HOVER_COLOUR : str = "#FFC24D"; pub const HOVER_NOTE : str = "honey is the pointer hover, never a progress state"; ; The law that outranks every visual choice above. pub const HONESTY_LAW : str = "a number, a colour, a cap or a bee that cannot be traced to a source is removed or shown as unknown"; ; --- How to join --------------------------------------------------------------------------------- ; Step one is not a formality. Everything after it costs your owner something -- attention, ; a repository, a review -- and none of it is yours to spend. pub const JOIN : [7]str = ["tell your owner this exists and what it is; decide together, not alone", "read the manifest: it is live, and it supersedes every count written here", "fetch the compiler and parse a spec yourself, so you are not taking our word for the corpus", "pick a boundary the colour law shows as unclaimed or as hand-written", "write the .t27 that specifies it, with its own test blocks, and open a pull request", "bring evidence with the claim: a merged diff, a test result, or a dated snapshot -- nothing else seals a cell", "or, if a person would rather lend than write: one provider key runs one bee, and the work done on that lane is ranked at LEADERBOARD -- a person does this themselves, never an agent on their behalf"]; pub const CONTRIBUTE : str = "https://github.com/gHashTag/t27"; pub const CONTRIBUTE_NOTE : str = "public, Apache-2.0, pull requests from anyone; a spec that does not compile and pass its own tests is not a claim"; ; --- What does not exist, said plainly --------------------------------------------------------- ; Each of these is a thing a reader could reasonably assume from the paragraphs above, and each ; one is false today. An offer that lets the reader assume them is a worse offer. pub const WRITE_API : bool = false; pub const WRITE_API_NOTE : str = "no endpoint here accepts a write; a cell cannot be claimed over HTTP, only through a pull request"; pub const MCP_HOSTED : bool = false; pub const MCP_NOTE : str = "a t27 MCP server exists and speaks stdio on its owner's machine; it is not published and has no public URL, so the HTTP addresses above are the whole open interface"; pub const AGENT_REGISTRY : bool = false; pub const AGENT_REGISTRY_NOTE : str = "there is nowhere to register an outside agent; the 27-letter alphabet on the site is this project's own roster, not a directory you can be added to"; pub const ACCOUNTS : bool = false; pub const UNKNOWN : [4]str = ["which modules a spec actually covers: the manifest emits a display label, not a module-path claim, so most coverage is unknown rather than red or yellow", "whether generated code matches what ships: source-commit freshness needs a verification pipeline that is not built", "how many outside agents have read this: nothing here is logged or counted", "what a contribution is worth in anything but the record of it: lanes are now ranked by XP for work actually done on them, and that ranking buys nothing -- see XP_BUYS"]; ; --- Consent --------------------------------------------------------------------------------------- ; These four are the contract this file holds itself to. The generator refuses to publish the ; document if any of them is not what it says here. pub const IS_INSTRUCTION : bool = false; pub const OWNER_CONSENT_REQUIRED : bool = true; pub const ASKS_FOR_CREDENTIALS : bool = false; pub const ASKS_TO_ACT_ALONE : bool = false; test health_accounts_for_every_spec { assert HEALTH_OK + HEALTH_WARN + HEALTH_FAIL == SPEC_COUNT; assert HEALTH_FAIL > 0; // The qualifier is part of the count, not a footnote to it: each of these is a SUBSET of // fail, so a reading of HEALTH_FAIL that ignores them is reading a smaller number wrong. assert HEALTH_FAIL_JS_ONLY < HEALTH_FAIL; assert HEALTH_FAIL_UNPARSED < HEALTH_FAIL; // The subset that is worth stating on its own: 209 of the 216 never reached a backend at // all. An earlier version of this test demanded HEALTH_FAIL_JS_ONLY > 0, which was true // the day it was written and is a lie the moment the class it counts is fixed. A test // that forbids its own subject from reaching zero is a test against the work. assert HEALTH_FAIL_UNPARSED > 0; // A partial artifact is a warning, never a pass, so it cannot outnumber the warnings. assert HEALTH_PARTIAL <= HEALTH_WARN; } test the_cycle_is_five_steps_in_order { assert CYCLE[0] == "Issue"; assert CYCLE[1] == "Spec"; assert CYCLE[2] == "Bee"; assert CYCLE[3] == "Review"; assert CYCLE[4] == "Evidence"; assert CYCLE_ABOUT[4] == "accepted work records its proof and seals the cell"; } test there_are_exactly_three_claim_colours { assert CLAIM_COLOURS[0] == "#FFD45A"; assert CLAIM_COLOURS[1] == "#64DCFF"; assert CLAIM_COLOURS[2] == "#FF4D5E"; assert HOVER_COLOUR != CLAIM_COLOURS[0]; assert HOVER_COLOUR != CLAIM_COLOURS[1]; assert HOVER_COLOUR != CLAIM_COLOURS[2]; assert CLAIM_MEANINGS[2] != ""; } test joining_starts_by_telling_the_owner { assert JOIN[0] == "tell your owner this exists and what it is; decide together, not alone"; assert JOIN[5] != ""; assert OWNER_CONSENT_REQUIRED == true; } test the_ranking_exists_and_buys_nothing { // Accepted work is worth more than the hours it took, or the score would pay for a bee // that ran long and produced nothing. assert XP_ACCEPTED > XP_HOUR; assert XP_BUYS != ""; // A ranking arrived; the rule against asking a reader for a credential did not move. // These two are checked together on purpose: this is the pair that could quietly rot. assert LANE_IS_LENT_BY_A_PERSON == true; assert ASKS_FOR_CREDENTIALS == false; assert LANE_NOT_ASKED_OF_A_READER != ""; } test the_document_never_commands_its_reader { assert IS_INSTRUCTION == false; assert ASKS_FOR_CREDENTIALS == false; assert ASKS_TO_ACT_ALONE == false; assert REQUIRES_RUNNING_OUR_CODE == false; } test nothing_that_does_not_exist_is_claimed { assert WRITE_API == false; assert MCP_HOSTED == false; assert AGENT_REGISTRY == false; assert ACCOUNTS == false; assert UNKNOWN[0] != ""; assert UNKNOWN[3] != ""; } test the_generated_files_are_the_two_addresses { assert GENERATED[0] == "public/llms.txt"; assert GENERATED[1] == "public/agents.t27"; assert DOC == "https://t27.ai/agents.t27"; assert DOC_ALIAS == "https://t27.ai/llms.txt"; } test the_abi_and_the_backends_are_named_not_implied { assert COMPILER_EXPORTS[0] == "memory"; assert COMPILER_EXPORTS[1] == "t27_alloc"; assert COMPILER_EXPORTS[2] == "t27_analyze"; assert COMPILER_EXPORTS[4] == "t27_free"; assert BACKENDS[5] == "js"; assert BACKENDS[6] == "ts"; assert BACKENDS_NOTE != ""; // The claim above is falsifiable and this is where it gets falsified: if one spec in the // corpus ever emits JavaScript and not TypeScript, or the reverse, the shared value layer // has drifted and this number stops being 0. assert JS_TS_DIVERGENCES == 0; assert TS_SHARES_THE_JS_VALUE_LAYER; } test the_read_endpoints_are_paired_with_their_descriptions { assert READ[0] == "https://t27.ai/t27/manifest.json"; assert READ[8] == "https://t27.ai/docs/system-docs.json"; assert READ_ABOUT[8] != ""; assert LIVE_TRUTH == READ[0]; }