From 922111fa529ae0160080a37846f7d59d6bacc5e6 Mon Sep 17 00:00:00 2001 From: gHashTag Date: Wed, 9 Sep 2026 12:09:47 +0000 Subject: [PATCH] feat(specs): skills and crons as first-class .t27 specs (site generates from them) specs/skills: 26 modules, one per Claude Code skill t27.ai publishes. specs/crons: 33 modules, one per scheduled job (GitHub Actions, Inngest, Railway, in-process timers). Every constant is pub const; the field schema is in each README. Specs are English-only (LANG-EN). Translations are connected through a spec: specs/i18n/agents-ru.t27 (module i18n_agents_ru, KIND "i18n") declares LOCALE, SCOPE (specs/skills, specs/crons), the translatable FIELDS (SUMMARY, NAME), the bundle location (trinity:apps/website/i18n/agents.ru.json, keyed by ID), FALLBACK "en", COVERAGE_REQUIRED false, ORPHANS_ALLOWED false. The Cyrillic payload lives only in that bundle; one contract file per locale, no locale list hardcoded in the site generator. All 60 typecheck ok under the compiler wasm vendored by gHashTag/trinity (sha256 4d9c0447b5ca2887...), nothing discarded; the wasm's typecheck.ok is lenient, so the site generator's schema check is the gate that holds. The site generates public/skills/spec-skills.json and public/crons/spec-crons.json from a vendored, byte-identical copy of these files; this directory is the canonical home. specs/OWNERS.md: skills/, crons/, i18n/ -> T-Queen. docs/now entry added. Site PR: https://github.com/gHashTag/trinity/pull/975 Closes #3544 --- ...ills-and-crons-as-first-class-t27-specs.md | 10 +++ specs/OWNERS.md | 1 + ...ltibots-telegraf-agent-autopilot-L1118.t27 | 26 +++++++ ...tibots-telegraf-bot-owner-billing-L474.t27 | 26 +++++++ ...ltibots-telegraf-check-stuck-trainings.t27 | 25 +++++++ specs/crons/999-multibots-telegraf-ci.t27 | 25 +++++++ ...9-multibots-telegraf-crmProactive-L375.t27 | 26 +++++++ ...multibots-telegraf-daily-sales-advisor.t27 | 25 +++++++ ...-multibots-telegraf-generate-jobs-L164.t27 | 25 +++++++ .../999-multibots-telegraf-health-check.t27 | 24 +++++++ .../999-multibots-telegraf-log-monitor.t27 | 24 +++++++ ...bots-telegraf-notificationHandler-L318.t27 | 26 +++++++ ...bots-telegraf-notificationHandler-L324.t27 | 25 +++++++ ...telegraf-periodic-webhook-health-check.t27 | 24 +++++++ ...tibots-telegraf-production-monitor-L80.t27 | 27 +++++++ ...-telegraf-provider-health-monitor-L344.t27 | 26 +++++++ ...ultibots-telegraf-render-server-L10845.t27 | 25 +++++++ ...multibots-telegraf-render-server-L2301.t27 | 25 +++++++ ...multibots-telegraf-render-server-L2325.t27 | 26 +++++++ ...-multibots-telegraf-render-server-L919.t27 | 26 +++++++ .../crons/999-multibots-telegraf-security.t27 | 25 +++++++ .../999-multibots-telegraf-skill-detector.t27 | 24 +++++++ .../999-multibots-telegraf-taskCache-L27.t27 | 25 +++++++ ...ltibots-telegraf-video-task-store-L156.t27 | 25 +++++++ specs/crons/README.md | 64 +++++++++++++++++ specs/crons/railway-jobsearch-cron.t27 | 27 +++++++ specs/crons/t27-formal-mutation.t27 | 25 +++++++ specs/crons/t27-pr-dashboard.t27 | 24 +++++++ specs/crons/trinity-agent-cron-cleanup.t27 | 24 +++++++ specs/crons/trinity-agent-queue-drain.t27 | 24 +++++++ specs/crons/trinity-brain-ci.t27 | 24 +++++++ specs/crons/trinity-codegen.t27 | 24 +++++++ specs/crons/trinity-discover-callers.t27 | 24 +++++++ specs/crons/trinity-pages-health-check.t27 | 25 +++++++ specs/crons/trinity-signal-health-self.t27 | 24 +++++++ specs/crons/trinity-site-live-gate.t27 | 24 +++++++ specs/i18n/README.md | 71 +++++++++++++++++++ specs/i18n/agents-ru.t27 | 33 +++++++++ specs/skills/README.md | 61 ++++++++++++++++ specs/skills/t27-measure-corpus.t27 | 25 +++++++ specs/skills/t27-phi-loop.t27 | 25 +++++++ specs/skills/t27-tri-pipeline.t27 | 25 +++++++ specs/skills/t27-tri.t27 | 25 +++++++ specs/skills/t27-wave-audit.t27 | 25 +++++++ specs/skills/t27-wrap-up.t27 | 25 +++++++ specs/skills/trinity-blog-post.t27 | 25 +++++++ specs/skills/trinity-board-sync.t27 | 25 +++++++ specs/skills/trinity-cloud.t27 | 25 +++++++ specs/skills/trinity-doctor.t27 | 25 +++++++ specs/skills/trinity-farm-garden.t27 | 25 +++++++ specs/skills/trinity-fpga-synth.t27 | 25 +++++++ specs/skills/trinity-god-mode.t27 | 25 +++++++ specs/skills/trinity-implement-issue.t27 | 25 +++++++ specs/skills/trinity-queen-hive-visuals.t27 | 25 +++++++ specs/skills/trinity-review-code.t27 | 25 +++++++ specs/skills/trinity-run-tests.t27 | 25 +++++++ specs/skills/trinity-scholar.t27 | 25 +++++++ specs/skills/trinity-status.t27 | 25 +++++++ specs/skills/trinity-tech-tree.t27 | 25 +++++++ specs/skills/trinity-tri.t27 | 25 +++++++ specs/skills/trinity-trinity-test.t27 | 25 +++++++ specs/skills/trinity-ux-wave.t27 | 25 +++++++ specs/skills/trinity-vibee-gen.t27 | 25 +++++++ specs/skills/trinity-vsa-verify.t27 | 25 +++++++ specs/skills/trinity-wave.t27 | 25 +++++++ 65 files changed, 1714 insertions(+) create mode 100644 docs/now/2026-09-09-skills-and-crons-as-first-class-t27-specs.md create mode 100644 specs/crons/999-multibots-telegraf-agent-autopilot-L1118.t27 create mode 100644 specs/crons/999-multibots-telegraf-bot-owner-billing-L474.t27 create mode 100644 specs/crons/999-multibots-telegraf-check-stuck-trainings.t27 create mode 100644 specs/crons/999-multibots-telegraf-ci.t27 create mode 100644 specs/crons/999-multibots-telegraf-crmProactive-L375.t27 create mode 100644 specs/crons/999-multibots-telegraf-daily-sales-advisor.t27 create mode 100644 specs/crons/999-multibots-telegraf-generate-jobs-L164.t27 create mode 100644 specs/crons/999-multibots-telegraf-health-check.t27 create mode 100644 specs/crons/999-multibots-telegraf-log-monitor.t27 create mode 100644 specs/crons/999-multibots-telegraf-notificationHandler-L318.t27 create mode 100644 specs/crons/999-multibots-telegraf-notificationHandler-L324.t27 create mode 100644 specs/crons/999-multibots-telegraf-periodic-webhook-health-check.t27 create mode 100644 specs/crons/999-multibots-telegraf-production-monitor-L80.t27 create mode 100644 specs/crons/999-multibots-telegraf-provider-health-monitor-L344.t27 create mode 100644 specs/crons/999-multibots-telegraf-render-server-L10845.t27 create mode 100644 specs/crons/999-multibots-telegraf-render-server-L2301.t27 create mode 100644 specs/crons/999-multibots-telegraf-render-server-L2325.t27 create mode 100644 specs/crons/999-multibots-telegraf-render-server-L919.t27 create mode 100644 specs/crons/999-multibots-telegraf-security.t27 create mode 100644 specs/crons/999-multibots-telegraf-skill-detector.t27 create mode 100644 specs/crons/999-multibots-telegraf-taskCache-L27.t27 create mode 100644 specs/crons/999-multibots-telegraf-video-task-store-L156.t27 create mode 100644 specs/crons/README.md create mode 100644 specs/crons/railway-jobsearch-cron.t27 create mode 100644 specs/crons/t27-formal-mutation.t27 create mode 100644 specs/crons/t27-pr-dashboard.t27 create mode 100644 specs/crons/trinity-agent-cron-cleanup.t27 create mode 100644 specs/crons/trinity-agent-queue-drain.t27 create mode 100644 specs/crons/trinity-brain-ci.t27 create mode 100644 specs/crons/trinity-codegen.t27 create mode 100644 specs/crons/trinity-discover-callers.t27 create mode 100644 specs/crons/trinity-pages-health-check.t27 create mode 100644 specs/crons/trinity-signal-health-self.t27 create mode 100644 specs/crons/trinity-site-live-gate.t27 create mode 100644 specs/i18n/README.md create mode 100644 specs/i18n/agents-ru.t27 create mode 100644 specs/skills/README.md create mode 100644 specs/skills/t27-measure-corpus.t27 create mode 100644 specs/skills/t27-phi-loop.t27 create mode 100644 specs/skills/t27-tri-pipeline.t27 create mode 100644 specs/skills/t27-tri.t27 create mode 100644 specs/skills/t27-wave-audit.t27 create mode 100644 specs/skills/t27-wrap-up.t27 create mode 100644 specs/skills/trinity-blog-post.t27 create mode 100644 specs/skills/trinity-board-sync.t27 create mode 100644 specs/skills/trinity-cloud.t27 create mode 100644 specs/skills/trinity-doctor.t27 create mode 100644 specs/skills/trinity-farm-garden.t27 create mode 100644 specs/skills/trinity-fpga-synth.t27 create mode 100644 specs/skills/trinity-god-mode.t27 create mode 100644 specs/skills/trinity-implement-issue.t27 create mode 100644 specs/skills/trinity-queen-hive-visuals.t27 create mode 100644 specs/skills/trinity-review-code.t27 create mode 100644 specs/skills/trinity-run-tests.t27 create mode 100644 specs/skills/trinity-scholar.t27 create mode 100644 specs/skills/trinity-status.t27 create mode 100644 specs/skills/trinity-tech-tree.t27 create mode 100644 specs/skills/trinity-tri.t27 create mode 100644 specs/skills/trinity-trinity-test.t27 create mode 100644 specs/skills/trinity-ux-wave.t27 create mode 100644 specs/skills/trinity-vibee-gen.t27 create mode 100644 specs/skills/trinity-vsa-verify.t27 create mode 100644 specs/skills/trinity-wave.t27 diff --git a/docs/now/2026-09-09-skills-and-crons-as-first-class-t27-specs.md b/docs/now/2026-09-09-skills-and-crons-as-first-class-t27-specs.md new file mode 100644 index 0000000000..0e22b82fff --- /dev/null +++ b/docs/now/2026-09-09-skills-and-crons-as-first-class-t27-specs.md @@ -0,0 +1,10 @@ +# NOW -- Skills and crons as first-class .t27 specs (2026-09-09) + +## Skills and crons as first-class .t27 specs (Closes #3544) + +- `specs/skills/` (26), `specs/crons/` (33) and `specs/i18n/` (1 contract): one `.t27` module per Claude Code skill and per scheduled job that t27.ai publishes. Every constant is `pub const`; the schema is in each README. Until now both catalogs on the site came only from code scans (`SKILL.md` frontmatter, workflow YAML, `setInterval` sites); the spec now states the thing and the code is its witness. +- The site (gHashTag/trinity#975) vendors a byte-identical copy under `apps/website/public/t27/files/specs/` and generates `public/skills/spec-skills.json` and `public/crons/spec-crons.json` from it through the compiler wasm at build time -- no regex over `.t27`. Duplicate `ID` fails the build; a `RUNS` id with no skill spec is `health: fail`; code with no spec is listed as `code-only`, never invented. +- Measured: **59/59** typecheck ok under the vendored wasm (sha256 `4d9c0447b5ca2887...`), nothing discarded. That `typecheck.ok` is lenient -- it stays true for `str = 5` and for a `u16` of 70000 -- so the schema check in the generator is the gate that holds; typecheck ok is necessary, not sufficient. +- Language: the specs are English-only (LANG-EN). The first cut carried a `SUMMARY_RU` and CI's `bootstrap/build.rs` rejected it. Translations are now connected through a spec: `specs/i18n/agents-ru.t27` (module `i18n_agents_ru`, `KIND = "i18n"`) declares the locale, `SCOPE` (`specs/skills`, `specs/crons`), the translatable `FIELDS` (`SUMMARY`, `NAME`), the bundle location (`trinity:apps/website/i18n/agents.ru.json`, keyed by `ID`), `FALLBACK = "en"`, `COVERAGE_REQUIRED = false`, `ORPHANS_ALLOWED = false`. The Cyrillic payload lives only in that bundle. One file per locale; the site's generator discovers `specs/i18n/*.t27` and hardcodes no locale list. Coverage measured on the site: ru 26/26 skills, 33/33 crons, 0 orphans. +- Not claimed: the bootstrap compiler on `master` had not been run against these files before this PR's CI; every `RUNS` is `[]` with a `RUNS_NOTE`, so no cron-to-skill edge is asserted; `gate-topology` and `untrusted-input` fail on `master` for already-merged PRs #3504/#3506 too and are not addressed here. +- `specs/OWNERS.md` gains the row `skills/`, `crons/`, `i18n/` -> **T-Queen**. diff --git a/specs/OWNERS.md b/specs/OWNERS.md index f03cebbf12..4ede582f8a 100644 --- a/specs/OWNERS.md +++ b/specs/OWNERS.md @@ -19,6 +19,7 @@ | `vsa/`, `nn/` | **N-Numeric** / ML adjacent | Bundles and attention specs | | `demos/`, `sandbox/` | **A-Architect** / **Q-QA** | Examples; not ring gold by default | | `isa/` | **C-Compiler** | Register alphabet | +| `skills/`, `crons/`, `i18n/` | **T-Queen** | Agent skills and scheduled jobs as `.t27` specs, plus the per-locale translation contracts (`i18n/agents-.t27`) that point at the site's text bundles; the site (gHashTag/trinity) generates its catalogs from a vendored copy | Each subtree with substantial churn should keep a local **`OWNERS.md`** (see below). diff --git a/specs/crons/999-multibots-telegraf-agent-autopilot-L1118.t27 b/specs/crons/999-multibots-telegraf-agent-autopilot-L1118.t27 new file mode 100644 index 0000000000..80ee30a651 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-agent-autopilot-L1118.t27 @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-agent-autopilot-L1118.t27 -- cron timer/999-multibots-telegraf/agent-autopilot-L1118 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/agent-autopilot-L1118). +; The schedule was read from 999-multibots-telegraf:apps/vibee-editor/render/scripts/agent-autopilot.ts#L1118. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_agent_autopilot_L1118; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/agent-autopilot-L1118"; +pub const NAME : str = "agent-autopilot-L1118"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "apps/vibee-editor/render/scripts/agent-autopilot.ts:1118"; +pub const SUMMARY_EN : str = "Runs one autopilot cycle -- the generation pass and then the channel tick -- and skips the tick entirely when the previous cycle is still running."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 1800000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "Daemon mode only, under --loop or AUTOPILOT_LOOP=1; AUTOPILOT_INTERVAL_MS overrides the thirty-minute period, with a one-minute floor."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-bot-owner-billing-L474.t27 b/specs/crons/999-multibots-telegraf-bot-owner-billing-L474.t27 new file mode 100644 index 0000000000..7afcf42c31 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-bot-owner-billing-L474.t27 @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-bot-owner-billing-L474.t27 -- cron timer/999-multibots-telegraf/bot-owner-billing-L474 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/bot-owner-billing-L474). +; The schedule was read from 999-multibots-telegraf:src/services/bot-owner-billing.ts#L474. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_bot_owner_billing_L474; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/bot-owner-billing-L474"; +pub const NAME : str = "bot-owner-billing-L474"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/services/bot-owner-billing.ts:474"; +pub const SUMMARY_EN : str = "Recomputes every bot owner's debt from the payments ledger, warns them at the soft, warning and critical thresholds, and disables a bot that stays critical for three days."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 86400000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "The first run after a restart is skipped on purpose, and an owner whose payments cannot be read is left alone rather than accused."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-check-stuck-trainings.t27 b/specs/crons/999-multibots-telegraf-check-stuck-trainings.t27 new file mode 100644 index 0000000000..fe39b39f2f --- /dev/null +++ b/specs/crons/999-multibots-telegraf-check-stuck-trainings.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-check-stuck-trainings.t27 -- cron inngest/999-multibots-telegraf/check-stuck-trainings +; Source of truth for the job card on t27.ai (#/crons?cron=inngest/999-multibots-telegraf/check-stuck-trainings). +; The schedule was read from 999-multibots-telegraf:src/inngest_app/functions/training/checkStuckTrainings.ts#L53. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_check_stuck_trainings; + +pub const KIND : str = "cron"; +pub const ID : str = "inngest/999-multibots-telegraf/check-stuck-trainings"; +pub const NAME : str = "check-stuck-trainings"; +pub const HOST : str = "inngest"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/inngest_app/functions/training/checkStuckTrainings.ts"; +pub const SUMMARY_EN : str = "Finds model trainings still marked pending or processing past the stuck threshold and reconciles them against Replicate."; +pub const SCHEDULE : str = "*/30 * * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "Records whose Replicate id is still a placeholder are skipped, because there is nothing on the provider to ask about."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "inngest-dashboard"; diff --git a/specs/crons/999-multibots-telegraf-ci.t27 b/specs/crons/999-multibots-telegraf-ci.t27 new file mode 100644 index 0000000000..1869ef6d95 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-ci.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-ci.t27 -- cron github-actions/999-multibots-telegraf/ci +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/999-multibots-telegraf/ci). +; The schedule was read from 999-multibots-telegraf:.github/workflows/ci.yml#L10. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_ci; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/999-multibots-telegraf/ci"; +pub const NAME : str = "CI/CD Pipeline"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = ".github/workflows/ci.yml"; +pub const SUMMARY_EN : str = "Runs the whole build, type-check and test pipeline once a day so a dependency that rots without a push still gets caught."; +pub const SCHEDULE : str = "0 2 * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "GitHub Actions on this repository have not run since 2026-06-02 (billing); the schedule stands in the file but does not fire."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-crmProactive-L375.t27 b/specs/crons/999-multibots-telegraf-crmProactive-L375.t27 new file mode 100644 index 0000000000..a2c212bce3 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-crmProactive-L375.t27 @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-crmProactive-L375.t27 -- cron timer/999-multibots-telegraf/crmProactive-L375 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/crmProactive-L375). +; The schedule was read from 999-multibots-telegraf:src/services/crmProactive.ts#L375. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_crmProactive_L375; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/crmProactive-L375"; +pub const NAME : str = "crmProactive-L375"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/services/crmProactive.ts:375"; +pub const SUMMARY_EN : str = "Runs one proactive seller turn for the owner: walks the CRM queue and puts the next draft card in front of them without being asked."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 1800000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "The period is CRM_PROACTIVE_MINUTES from src/index.ts, thirty minutes by default; the first sweep waits two minutes after start."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-daily-sales-advisor.t27 b/specs/crons/999-multibots-telegraf-daily-sales-advisor.t27 new file mode 100644 index 0000000000..17748b4368 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-daily-sales-advisor.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-daily-sales-advisor.t27 -- cron inngest/999-multibots-telegraf/daily-sales-advisor +; Source of truth for the job card on t27.ai (#/crons?cron=inngest/999-multibots-telegraf/daily-sales-advisor). +; The schedule was read from 999-multibots-telegraf:src/inngest_app/functions/analytics/dailySalesAdvisor.ts#L56. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_daily_sales_advisor; + +pub const KIND : str = "cron"; +pub const ID : str = "inngest/999-multibots-telegraf/daily-sales-advisor"; +pub const NAME : str = "daily-sales-advisor"; +pub const HOST : str = "inngest"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/inngest_app/functions/analytics/dailySalesAdvisor.ts"; +pub const SUMMARY_EN : str = "Builds every bot owner a morning report of yesterday's revenue, the week's costs and which services their users actually bought."; +pub const SCHEDULE : str = "0 9 * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "One report per owner across all of their bots, assembled from the payments ledger rather than from a balance column."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "inngest-dashboard"; diff --git a/specs/crons/999-multibots-telegraf-generate-jobs-L164.t27 b/specs/crons/999-multibots-telegraf-generate-jobs-L164.t27 new file mode 100644 index 0000000000..89cfd70d3c --- /dev/null +++ b/specs/crons/999-multibots-telegraf-generate-jobs-L164.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-generate-jobs-L164.t27 -- cron timer/999-multibots-telegraf/generate-jobs-L164 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/generate-jobs-L164). +; The schedule was read from 999-multibots-telegraf:apps/vibee-editor/render/generate-jobs.ts#L164. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_generate_jobs_L164; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/generate-jobs-L164"; +pub const NAME : str = "generate-jobs-L164"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "apps/vibee-editor/render/generate-jobs.ts:164"; +pub const SUMMARY_EN : str = "Sweeps finished generation jobs out of memory an hour after they end, once a caller who lost the connection has had time to collect the result."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 300000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-health-check.t27 b/specs/crons/999-multibots-telegraf-health-check.t27 new file mode 100644 index 0000000000..ba1dd0f4be --- /dev/null +++ b/specs/crons/999-multibots-telegraf-health-check.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-health-check.t27 -- cron inngest/999-multibots-telegraf/health-check +; Source of truth for the job card on t27.ai (#/crons?cron=inngest/999-multibots-telegraf/health-check). +; The schedule was read from 999-multibots-telegraf:src/inngest_app/functions/monitoring/criticalErrorMonitor.ts#L243. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_health_check; + +pub const KIND : str = "cron"; +pub const ID : str = "inngest/999-multibots-telegraf/health-check"; +pub const NAME : str = "health-check"; +pub const HOST : str = "inngest"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/inngest_app/functions/monitoring/criticalErrorMonitor.ts"; +pub const SUMMARY_EN : str = "Probes the main API and the Inngest service every half hour and reports what answered."; +pub const SCHEDULE : str = "*/30 * * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "inngest-dashboard"; diff --git a/specs/crons/999-multibots-telegraf-log-monitor.t27 b/specs/crons/999-multibots-telegraf-log-monitor.t27 new file mode 100644 index 0000000000..5829d6f96d --- /dev/null +++ b/specs/crons/999-multibots-telegraf-log-monitor.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-log-monitor.t27 -- cron inngest/999-multibots-telegraf/log-monitor +; Source of truth for the job card on t27.ai (#/crons?cron=inngest/999-multibots-telegraf/log-monitor). +; The schedule was read from 999-multibots-telegraf:src/inngest_app/functions/monitoring/logMonitor.ts#L360. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_log_monitor; + +pub const KIND : str = "cron"; +pub const ID : str = "inngest/999-multibots-telegraf/log-monitor"; +pub const NAME : str = "log-monitor"; +pub const HOST : str = "inngest"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/inngest_app/functions/monitoring/logMonitor.ts"; +pub const SUMMARY_EN : str = "Reads the application logs once a day, has a model summarise the errors and warnings, and sends the digest to Telegram."; +pub const SCHEDULE : str = "0 10 * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "inngest-dashboard"; diff --git a/specs/crons/999-multibots-telegraf-notificationHandler-L318.t27 b/specs/crons/999-multibots-telegraf-notificationHandler-L318.t27 new file mode 100644 index 0000000000..5072329f65 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-notificationHandler-L318.t27 @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-notificationHandler-L318.t27 -- cron timer/999-multibots-telegraf/notificationHandler-L318 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/notificationHandler-L318). +; The schedule was read from 999-multibots-telegraf:src/handlers/notificationHandler.ts#L318. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_notificationHandler_L318; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/notificationHandler-L318"; +pub const NAME : str = "notificationHandler-L318"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/handlers/notificationHandler.ts:318"; +pub const SUMMARY_EN : str = "Drains the notification queue and delivers the Telegram messages waiting in it."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 60000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "Wrapped in an exclusive tick, so two bot processes cannot deliver the same notification twice."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-notificationHandler-L324.t27 b/specs/crons/999-multibots-telegraf-notificationHandler-L324.t27 new file mode 100644 index 0000000000..1fc9d93dc0 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-notificationHandler-L324.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-notificationHandler-L324.t27 -- cron timer/999-multibots-telegraf/notificationHandler-L324 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/notificationHandler-L324). +; The schedule was read from 999-multibots-telegraf:src/handlers/notificationHandler.ts#L324. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_notificationHandler_L324; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/notificationHandler-L324"; +pub const NAME : str = "notificationHandler-L324"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/handlers/notificationHandler.ts:324"; +pub const SUMMARY_EN : str = "Deletes notification messages old enough that nobody is going to read them."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 3600000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-periodic-webhook-health-check.t27 b/specs/crons/999-multibots-telegraf-periodic-webhook-health-check.t27 new file mode 100644 index 0000000000..15f2a98abe --- /dev/null +++ b/specs/crons/999-multibots-telegraf-periodic-webhook-health-check.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-periodic-webhook-health-check.t27 -- cron inngest/999-multibots-telegraf/periodic-webhook-health-check +; Source of truth for the job card on t27.ai (#/crons?cron=inngest/999-multibots-telegraf/periodic-webhook-health-check). +; The schedule was read from 999-multibots-telegraf:src/inngest_app/functions/webhookHealthGuard.ts#L218. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_periodic_webhook_health_check; + +pub const KIND : str = "cron"; +pub const ID : str = "inngest/999-multibots-telegraf/periodic-webhook-health-check"; +pub const NAME : str = "periodic-webhook-health-check"; +pub const HOST : str = "inngest"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/inngest_app/functions/webhookHealthGuard.ts"; +pub const SUMMARY_EN : str = "Tests both Telegram webhook URLs every hour and sends the admin a critical alarm when neither of them answers."; +pub const SCHEDULE : str = "0 * * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "inngest-dashboard"; diff --git a/specs/crons/999-multibots-telegraf-production-monitor-L80.t27 b/specs/crons/999-multibots-telegraf-production-monitor-L80.t27 new file mode 100644 index 0000000000..e2703a3fca --- /dev/null +++ b/specs/crons/999-multibots-telegraf-production-monitor-L80.t27 @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-production-monitor-L80.t27 -- cron timer/999-multibots-telegraf/production-monitor-L80 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/production-monitor-L80). +; The schedule was read from 999-multibots-telegraf:src/utils/production-monitor.ts#L80. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_production_monitor_L80; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/production-monitor-L80"; +pub const NAME : str = "production-monitor-L80"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/utils/production-monitor.ts:80"; +pub const SUMMARY_EN : str = "Re-runs the container, nginx, port, domain, webhook and system-resource checks, and applies the fixes that are enabled."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 300000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +; Started only by hand (`monitor` argument); the bot's entry point never starts it. +pub const ENABLED : bool = false; +pub const NOTE : str = "Started only by running this module from the command line with the `monitor` argument; the bot's own entry point never starts it."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-provider-health-monitor-L344.t27 b/specs/crons/999-multibots-telegraf-provider-health-monitor-L344.t27 new file mode 100644 index 0000000000..25f0b5092c --- /dev/null +++ b/specs/crons/999-multibots-telegraf-provider-health-monitor-L344.t27 @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-provider-health-monitor-L344.t27 -- cron timer/999-multibots-telegraf/provider-health-monitor-L344 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/provider-health-monitor-L344). +; The schedule was read from 999-multibots-telegraf:src/services/provider-health-monitor.ts#L344. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_provider_health_monitor_L344; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/provider-health-monitor-L344"; +pub const NAME : str = "provider-health-monitor-L344"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/services/provider-health-monitor.ts:344"; +pub const SUMMARY_EN : str = "Checks every AI provider that is not parked and records whether it is currently answering."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 300000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "Providers listed in HEALTH_SKIP_PROVIDERS are deliberately not watched and do not raise the alarm."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-render-server-L10845.t27 b/specs/crons/999-multibots-telegraf-render-server-L10845.t27 new file mode 100644 index 0000000000..7d75c44613 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-render-server-L10845.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-render-server-L10845.t27 -- cron timer/999-multibots-telegraf/render-server-L10845 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/render-server-L10845). +; The schedule was read from 999-multibots-telegraf:apps/vibee-editor/render/render-server.ts#L10845. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_render_server_L10845; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/render-server-L10845"; +pub const NAME : str = "render-server-L10845"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "apps/vibee-editor/render/render-server.ts:10845"; +pub const SUMMARY_EN : str = "Pings every websocket peer and drops the ones that did not answer the previous round."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 30000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-render-server-L2301.t27 b/specs/crons/999-multibots-telegraf-render-server-L2301.t27 new file mode 100644 index 0000000000..3ad171f190 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-render-server-L2301.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-render-server-L2301.t27 -- cron timer/999-multibots-telegraf/render-server-L2301 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/render-server-L2301). +; The schedule was read from 999-multibots-telegraf:apps/vibee-editor/render/render-server.ts#L2301. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_render_server_L2301; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/render-server-L2301"; +pub const NAME : str = "render-server-L2301"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "apps/vibee-editor/render/render-server.ts:2301"; +pub const SUMMARY_EN : str = "Removes render jobs older than an hour from the in-memory job map."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 60000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-render-server-L2325.t27 b/specs/crons/999-multibots-telegraf-render-server-L2325.t27 new file mode 100644 index 0000000000..dd18521e7d --- /dev/null +++ b/specs/crons/999-multibots-telegraf-render-server-L2325.t27 @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-render-server-L2325.t27 -- cron timer/999-multibots-telegraf/render-server-L2325 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/render-server-L2325). +; The schedule was read from 999-multibots-telegraf:apps/vibee-editor/render/render-server.ts#L2325. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_render_server_L2325; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/render-server-L2325"; +pub const NAME : str = "render-server-L2325"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "apps/vibee-editor/render/render-server.ts:2325"; +pub const SUMMARY_EN : str = "Reads the hive journal and delivers the queen's report to the keepers, passing alarms straight through and batching ordinary events."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 600000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "Checks often and writes rarely: the cursor lives in the database, because this Railway project has no volume and a deploy wipes local state."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-render-server-L919.t27 b/specs/crons/999-multibots-telegraf-render-server-L919.t27 new file mode 100644 index 0000000000..14e7f0192e --- /dev/null +++ b/specs/crons/999-multibots-telegraf-render-server-L919.t27 @@ -0,0 +1,26 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-render-server-L919.t27 -- cron timer/999-multibots-telegraf/render-server-L919 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/render-server-L919). +; The schedule was read from 999-multibots-telegraf:apps/vibee-editor/render/render-server.ts#L919. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_render_server_L919; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/render-server-L919"; +pub const NAME : str = "render-server-L919"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "apps/vibee-editor/render/render-server.ts:919"; +pub const SUMMARY_EN : str = "Re-reads the session revocation list from Postgres so a revoked browser session stops being accepted."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 5000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "Only starts when a session signing key is configured; a deployed render server refuses to boot without one."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-security.t27 b/specs/crons/999-multibots-telegraf-security.t27 new file mode 100644 index 0000000000..551c091fb8 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-security.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-security.t27 -- cron github-actions/999-multibots-telegraf/security +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/999-multibots-telegraf/security). +; The schedule was read from 999-multibots-telegraf:.github/workflows/security.yml#L10. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_security; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/999-multibots-telegraf/security"; +pub const NAME : str = "Security Checks"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = ".github/workflows/security.yml"; +pub const SUMMARY_EN : str = "Runs the weekly security sweep: secret detection over the full history, dependency audit and code scanning."; +pub const SCHEDULE : str = "0 3 * * 0"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "GitHub Actions on this repository have not run since 2026-06-02 (billing); the schedule stands in the file but does not fire."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-skill-detector.t27 b/specs/crons/999-multibots-telegraf-skill-detector.t27 new file mode 100644 index 0000000000..38f28c5933 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-skill-detector.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-skill-detector.t27 -- cron inngest/999-multibots-telegraf/skill-detector +; Source of truth for the job card on t27.ai (#/crons?cron=inngest/999-multibots-telegraf/skill-detector). +; The schedule was read from 999-multibots-telegraf:src/inngest_app/functions/analytics/skillDetector.ts#L32. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_skill_detector; + +pub const KIND : str = "cron"; +pub const ID : str = "inngest/999-multibots-telegraf/skill-detector"; +pub const NAME : str = "skill-detector"; +pub const HOST : str = "inngest"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/inngest_app/functions/analytics/skillDetector.ts"; +pub const SUMMARY_EN : str = "Mines successful generations for repeated model and prompt patterns once a day and saves the new ones as reusable skills."; +pub const SCHEDULE : str = "0 10 * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "the \"skills\" it saves are bot prompt patterns, not Claude Code skills; no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "inngest-dashboard"; diff --git a/specs/crons/999-multibots-telegraf-taskCache-L27.t27 b/specs/crons/999-multibots-telegraf-taskCache-L27.t27 new file mode 100644 index 0000000000..9151598133 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-taskCache-L27.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-taskCache-L27.t27 -- cron timer/999-multibots-telegraf/taskCache-L27 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/taskCache-L27). +; The schedule was read from 999-multibots-telegraf:src/modules/videoGenerator/taskCache.ts#L27. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_taskCache_L27; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/taskCache-L27"; +pub const NAME : str = "taskCache-L27"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/modules/videoGenerator/taskCache.ts:27"; +pub const SUMMARY_EN : str = "Drops video-generation cache entries past their fifteen-minute lifetime so a finished task cannot block the next request."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 300000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/999-multibots-telegraf-video-task-store-L156.t27 b/specs/crons/999-multibots-telegraf-video-task-store-L156.t27 new file mode 100644 index 0000000000..f98f5ced27 --- /dev/null +++ b/specs/crons/999-multibots-telegraf-video-task-store-L156.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/999-multibots-telegraf-video-task-store-L156.t27 -- cron timer/999-multibots-telegraf/video-task-store-L156 +; Source of truth for the job card on t27.ai (#/crons?cron=timer/999-multibots-telegraf/video-task-store-L156). +; The schedule was read from 999-multibots-telegraf:src/services/video-task-store.ts#L156. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_999_multibots_telegraf_video_task_store_L156; + +pub const KIND : str = "cron"; +pub const ID : str = "timer/999-multibots-telegraf/video-task-store-L156"; +pub const NAME : str = "video-task-store-L156"; +pub const HOST : str = "timer"; +pub const REPO : str = "999-multibots-telegraf"; +pub const SERVICE : str = "src/services/video-task-store.ts:156"; +pub const SUMMARY_EN : str = "Forgets video tasks older than an hour and rewrites the store to disk when anything was removed."; +; A setInterval inside a long-lived process: a period, not a cron expression. +pub const INTERVAL_MS : u32 = 600000; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "code-only"; diff --git a/specs/crons/README.md b/specs/crons/README.md new file mode 100644 index 0000000000..0f5c957eb1 --- /dev/null +++ b/specs/crons/README.md @@ -0,0 +1,64 @@ +# specs/crons — scheduled jobs as first-class `.t27` specs + +> **Where this lives.** This directory in `gHashTag/t27` is the canonical home of these +> specs — edit them here. `gHashTag/trinity` keeps a vendored copy under +> `apps/website/public/t27/files/specs/crons/` and its build reads that copy through the +> vendored compiler wasm (`t27_compiler.wasm`). The wasm's `typecheck.ok` is necessary, +> not sufficient: it stays `true` for a wrong annotation such as `str = 5`, so the site's +> generator (`scripts/agents-from-specs.mjs`) also checks the field schema below. The +> bootstrap compiler on `master` was not run against these files in the commit that +> added them. + + +One file per scheduled job the site publishes (`apps/website/public/crons/manifest.json`): +GitHub Actions schedules, Inngest functions, Railway cron services and in-process +`setInterval` timers. The `.t27` file is the source of truth for the job card on +t27.ai; `public/crons/spec-crons.json` is generated from it by the real compiler. + +File name: `-.t27`; module name: `cron_`. + +## Schema (every constant is `pub const`) + +| constant | type | meaning | +|-----------------|----------|-------------------------------------------------------------------------------------------| +| `KIND` | `str` | always `"cron"` | +| `ID` | `str` | `//`; must equal the id in the code manifest | +| `NAME` | `str` | display name | +| `HOST` | `str` | `github-actions` \| `inngest` \| `railway-cron` \| `timer` | +| `REPO` | `str` | short repo name | +| `SERVICE` | `str` | workflow file / Inngest function file / Railway service / `file:line` of the timer | +| `SUMMARY_EN` | `str` | what the job does (English) | +| `SCHEDULE` | `str` | cron expression (absent for timers; `""` when only a dashboard holds it, see `SCHEDULE_NOTE`) | +| `INTERVAL_MS` | `u32` | period of an in-process timer (timers only, instead of `SCHEDULE`) | +| `TZ` | `str` | timezone of the schedule | +| `RUNS` | `[N]str` | skill IDs this job launches — **the control link**; only when the source evidently invokes one | +| `RUNS_NOTE` | `str` | why `RUNS` is what it is (e.g. `"no skill invocation found in source"`) | +| `ENABLED` | `bool` | whether the job is meant to fire | +| `NOTE` | `str` | optional caveat carried from the code catalog | +| `ON_FAILURE` | `str` | `issue` \| `log` \| `unknown` | +| `CONTROL` | `str` | `github-actions-dispatch` \| `railway-dashboard` \| `inngest-dashboard` \| `code-only` | + +## Language + +Specs are English-only (t27 `LANG-EN`: `bootstrap/build.rs` fails the build on any +Cyrillic under `specs/`). There is no `SUMMARY_RU`. Translations are connected +through a spec: `specs/i18n/agents-.t27` (see `specs/i18n/README.md`) +declares the locale, the spec directories it covers (`SCOPE`), the fields a bundle +may translate (`FIELDS`: `SUMMARY`, `NAME`) and the bundle file that carries the +text (`BUNDLE_REPO`/`BUNDLE_PATH`, keyed by `ID`). The Russian layer is +`specs/i18n/agents-ru.t27` -> `trinity:apps/website/i18n/agents.ru.json`. The site's +generator discovers every `specs/i18n/*.t27`, loads each bundle, fails on an entry +whose `ID` matches no spec (`ORPHANS_ALLOWED = false`) and emits `summary`/`name` +as `{en, ...}` plus an `i18n` list with the coverage per catalog. A spec +with no translation falls back to English (`FALLBACK = "en"`). + +## Rules the generator enforces + +- duplicate `ID` → build fails; +- a `RUNS` entry that names no skill spec → the job is marked `health: "fail"`; +- an `ID` absent from the code manifest → `witness: "spec-only"` (warn); +- every file must pass `typecheck.ok === true` with nothing discarded by the compiler. + +As of the first commit every `RUNS` is empty: none of the 33 jobs was found to +invoke a Claude Code skill by name (checked in the workflow files and the code +catalog annotations). The link exists so that the day a job does, the spec says so. diff --git a/specs/crons/railway-jobsearch-cron.t27 b/specs/crons/railway-jobsearch-cron.t27 new file mode 100644 index 0000000000..42f08bada9 --- /dev/null +++ b/specs/crons/railway-jobsearch-cron.t27 @@ -0,0 +1,27 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/railway-jobsearch-cron.t27 -- cron railway-cron/999/jobsearch-cron +; Source of truth for the job card on t27.ai (#/crons?cron=railway-cron/999/jobsearch-cron). +; The schedule lives in the Railway dashboard of project 999 and is not in any checkout. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_railway_jobsearch_cron; + +pub const KIND : str = "cron"; +pub const ID : str = "railway-cron/999/jobsearch-cron"; +pub const NAME : str = "jobsearch-cron"; +pub const HOST : str = "railway-cron"; +pub const REPO : str = "railway"; +pub const SERVICE : str = "jobsearch-cron"; +pub const SUMMARY_EN : str = "The scheduled job-search service of the Railway project, reachable at cron.t27.ai."; +; No expression is readable from a checkout; the dashboard holds it. +pub const SCHEDULE : str = ""; +pub const SCHEDULE_NOTE : str = "configured in the Railway dashboard (project 999); not readable from the checkout"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "The schedule is configured in the Railway dashboard for project 999 and is not readable from the checkout; the probe below is what this catalog can verify."; +pub const ON_FAILURE : str = "unknown"; +pub const CONTROL : str = "railway-dashboard"; diff --git a/specs/crons/t27-formal-mutation.t27 b/specs/crons/t27-formal-mutation.t27 new file mode 100644 index 0000000000..a97d5018b2 --- /dev/null +++ b/specs/crons/t27-formal-mutation.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/t27-formal-mutation.t27 -- cron github-actions/t27/formal-mutation +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/t27/formal-mutation). +; The schedule was read from t27:.github/workflows/formal-mutation.yml#L25. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_t27_formal_mutation; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/t27/formal-mutation"; +pub const NAME : str = "formal-mutation"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "t27"; +pub const SERVICE : str = ".github/workflows/formal-mutation.yml"; +pub const SUMMARY_EN : str = "Proves the formal gates actually bite by mutating the generated RTL once a week and requiring each gate to go red for its own mutation."; +pub const SCHEDULE : str = "0 5 * * 1"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "Weekly rather than per-push because a full run costs about thirty yosys invocations."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "github-actions-dispatch"; diff --git a/specs/crons/t27-pr-dashboard.t27 b/specs/crons/t27-pr-dashboard.t27 new file mode 100644 index 0000000000..b77f546b1e --- /dev/null +++ b/specs/crons/t27-pr-dashboard.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/t27-pr-dashboard.t27 -- cron github-actions/t27/pr-dashboard +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/t27/pr-dashboard). +; The schedule was read from t27:.github/workflows/pr-dashboard.yml#L6. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_t27_pr_dashboard; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/t27/pr-dashboard"; +pub const NAME : str = "PR Dashboard"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "t27"; +pub const SERVICE : str = ".github/workflows/pr-dashboard.yml"; +pub const SUMMARY_EN : str = "Rebuilds the pull-request dashboard every hour from the current state of the open pull requests."; +pub const SCHEDULE : str = "0 * * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "github-actions-dispatch"; diff --git a/specs/crons/trinity-agent-cron-cleanup.t27 b/specs/crons/trinity-agent-cron-cleanup.t27 new file mode 100644 index 0000000000..075df9141c --- /dev/null +++ b/specs/crons/trinity-agent-cron-cleanup.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/trinity-agent-cron-cleanup.t27 -- cron github-actions/trinity/agent-cron-cleanup +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/trinity/agent-cron-cleanup). +; The schedule was read from trinity:.github/workflows/agent-cron-cleanup.yml#L4. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_trinity_agent_cron_cleanup; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/trinity/agent-cron-cleanup"; +pub const NAME : str = "Trinity Agent Cron Cleanup"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "trinity"; +pub const SERVICE : str = ".github/workflows/agent-cron-cleanup.yml"; +pub const SUMMARY_EN : str = "Finds agent deployments that got stuck and kills them, every two hours."; +pub const SCHEDULE : str = "0 */2 * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "github-actions-dispatch"; diff --git a/specs/crons/trinity-agent-queue-drain.t27 b/specs/crons/trinity-agent-queue-drain.t27 new file mode 100644 index 0000000000..8d4722f785 --- /dev/null +++ b/specs/crons/trinity-agent-queue-drain.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/trinity-agent-queue-drain.t27 -- cron github-actions/trinity/agent-queue-drain +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/trinity/agent-queue-drain). +; The schedule was read from trinity:.github/workflows/agent-queue-drain.yml#L4. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_trinity_agent_queue_drain; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/trinity/agent-queue-drain"; +pub const NAME : str = "Trinity Agent Queue Drain"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "trinity"; +pub const SERVICE : str = ".github/workflows/agent-queue-drain.yml"; +pub const SUMMARY_EN : str = "Looks for queued issues and free agent slots every five minutes and starts the next agent when there is room."; +pub const SCHEDULE : str = "*/5 * * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "dispatches agent-spawn-pool.yml for a queued issue; no named skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "github-actions-dispatch"; diff --git a/specs/crons/trinity-brain-ci.t27 b/specs/crons/trinity-brain-ci.t27 new file mode 100644 index 0000000000..b7fb20d23a --- /dev/null +++ b/specs/crons/trinity-brain-ci.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/trinity-brain-ci.t27 -- cron github-actions/trinity/brain-ci +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/trinity/brain-ci). +; The schedule was read from trinity:.github/workflows/brain-ci.yml#L11. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_trinity_brain_ci; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/trinity/brain-ci"; +pub const NAME : str = "S³AI Brain CI — \"Functional MRI\" Gate"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "trinity"; +pub const SERVICE : str = ".github/workflows/brain-ci.yml"; +pub const SUMMARY_EN : str = "Runs the weekly brain stress test, the long version of the health gate that every commit already gets."; +pub const SCHEDULE : str = "0 0 * * 0"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "github-actions-dispatch"; diff --git a/specs/crons/trinity-codegen.t27 b/specs/crons/trinity-codegen.t27 new file mode 100644 index 0000000000..aca6d2a285 --- /dev/null +++ b/specs/crons/trinity-codegen.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/trinity-codegen.t27 -- cron github-actions/trinity/codegen +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/trinity/codegen). +; The schedule was read from trinity:.github/workflows/codegen.yml#L10. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_trinity_codegen; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/trinity/codegen"; +pub const NAME : str = "Codegen Validation"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "trinity"; +pub const SERVICE : str = ".github/workflows/codegen.yml"; +pub const SUMMARY_EN : str = "Validates the VIBEE code generator once a day, independently of whether anyone pushed."; +pub const SCHEDULE : str = "0 0 * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "github-actions-dispatch"; diff --git a/specs/crons/trinity-discover-callers.t27 b/specs/crons/trinity-discover-callers.t27 new file mode 100644 index 0000000000..400baeb61e --- /dev/null +++ b/specs/crons/trinity-discover-callers.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/trinity-discover-callers.t27 -- cron github-actions/trinity/discover-callers +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/trinity/discover-callers). +; The schedule was read from trinity:.github/workflows/discover-callers.yml#L16. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_trinity_discover_callers; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/trinity/discover-callers"; +pub const NAME : str = "Discover RTL check callers"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "trinity"; +pub const SERVICE : str = ".github/workflows/discover-callers.yml"; +pub const SUMMARY_EN : str = "Reads GitHub for repositories that run the RTL check, so the gallery counts its own users instead of being hand-written."; +pub const SCHEDULE : str = "41 5 * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "github-actions-dispatch"; diff --git a/specs/crons/trinity-pages-health-check.t27 b/specs/crons/trinity-pages-health-check.t27 new file mode 100644 index 0000000000..be5bb40b1a --- /dev/null +++ b/specs/crons/trinity-pages-health-check.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/trinity-pages-health-check.t27 -- cron github-actions/trinity/pages-health-check +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/trinity/pages-health-check). +; The schedule was read from trinity:.github/workflows/pages-health-check.yml#L17. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_trinity_pages_health_check; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/trinity/pages-health-check"; +pub const NAME : str = "Pages Health Check"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "trinity"; +pub const SERVICE : str = ".github/workflows/pages-health-check.yml"; +pub const SUMMARY_EN : str = "Fetches the published site every fifteen minutes, follows the redirect, and redeploys only when the evidence says the deploy is what broke."; +pub const SCHEDULE : str = "*/15 * * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const NOTE : str = "An earlier version judged a bare status code, failed ninety-six times a day on a site that was up, and dispatched a redeploy each time."; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "github-actions-dispatch"; diff --git a/specs/crons/trinity-signal-health-self.t27 b/specs/crons/trinity-signal-health-self.t27 new file mode 100644 index 0000000000..9bbc99e610 --- /dev/null +++ b/specs/crons/trinity-signal-health-self.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/trinity-signal-health-self.t27 -- cron github-actions/trinity/signal-health-self +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/trinity/signal-health-self). +; The schedule was read from trinity:.github/workflows/signal-health-self.yml#L17. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_trinity_signal_health_self; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/trinity/signal-health-self"; +pub const NAME : str = "Signal health (self)"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "trinity"; +pub const SERVICE : str = ".github/workflows/signal-health-self.yml"; +pub const SUMMARY_EN : str = "Applies the signal-health check to the repository that sells it and writes the numbers into the website data."; +pub const SCHEDULE : str = "23 4 * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "github-actions-dispatch"; diff --git a/specs/crons/trinity-site-live-gate.t27 b/specs/crons/trinity-site-live-gate.t27 new file mode 100644 index 0000000000..28f5e73e5e --- /dev/null +++ b/specs/crons/trinity-site-live-gate.t27 @@ -0,0 +1,24 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/crons/trinity-site-live-gate.t27 -- cron github-actions/trinity/site-live-gate +; Source of truth for the job card on t27.ai (#/crons?cron=github-actions/trinity/site-live-gate). +; The schedule was read from trinity:.github/workflows/site-live-gate.yml#L33. +; A cron CONTROLS skills: RUNS names the skill IDs it launches. It is empty +; unless the source evidently invokes one -- nothing here is inferred from a name. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module cron_trinity_site_live_gate; + +pub const KIND : str = "cron"; +pub const ID : str = "github-actions/trinity/site-live-gate"; +pub const NAME : str = "Site live gate"; +pub const HOST : str = "github-actions"; +pub const REPO : str = "trinity"; +pub const SERVICE : str = ".github/workflows/site-live-gate.yml"; +pub const SUMMARY_EN : str = "Compares the content-hashed entry bundle served at the apex against a build of main, so that 'deployed' means a reader can actually see it."; +pub const SCHEDULE : str = "17 6 * * *"; +pub const TZ : str = "UTC"; +pub const RUNS : [0]str = []; +pub const RUNS_NOTE : str = "no skill invocation found in source"; +pub const ENABLED : bool = true; +pub const ON_FAILURE : str = "log"; +pub const CONTROL : str = "github-actions-dispatch"; diff --git a/specs/i18n/README.md b/specs/i18n/README.md new file mode 100644 index 0000000000..f398c64bd4 --- /dev/null +++ b/specs/i18n/README.md @@ -0,0 +1,71 @@ +# specs/i18n -- translation contracts for the agent specs + +> **Where this lives.** This directory is canonical in gHashTag/t27; gHashTag/trinity +> vendors a byte-identical copy at `apps/website/public/t27/files/specs/i18n/` and the +> bundle files the contracts point to live in trinity only. + +Specs are English-only (t27 `LANG-EN`: `bootstrap/build.rs` fails the build on any +Cyrillic under `specs/`). A translation is therefore never inside a `.t27`. It is +**connected through** a `.t27`: one module per locale under this directory declares +the contract, and a bundle file outside the spec corpus carries the text. + +| File | Module | Locale | Bundle | +| --- | --- | --- | --- | +| `agents-ru.t27` | `i18n_agents_ru` | `ru` | `trinity:apps/website/i18n/agents.ru.json` | + +Add a locale by copying `agents-ru.t27` to `agents-.t27`, renaming the module +to `i18n_agents_` and changing `LOCALE` and `BUNDLE_PATH`. Nothing else knows +the locale list: the site's generator (`apps/website/scripts/agents-from-specs.mjs` +in gHashTag/trinity) discovers every `specs/i18n/*.t27`, so `de`, `es`, `zh` (locales +the site already speaks) are one file each. + +## Schema + +Every constant is required and `pub`. + +| Constant | Type | Meaning | +| --- | --- | --- | +| `KIND` | `str` | Always `"i18n"`. | +| `LOCALE` | `str` | The locale this bundle provides (BCP-47-shaped, e.g. `ru`). | +| `SOURCE_LOCALE` | `str` | Always `"en"`: the specs are the English source. | +| `SCOPE` | `[N]str` | Spec directories whose modules may be translated, e.g. `["specs/skills", "specs/crons"]`. An entry `ID` must resolve to a spec in one of them. | +| `FIELDS` | `[N]str` | Spec fields a bundle entry may carry. `SUMMARY` maps to the spec's `SUMMARY_EN`, `NAME` to `NAME`. Any other key in a bundle entry is a build failure. | +| `BUNDLE_REPO` | `str` | Repository that holds the bundle (`"trinity"`). Only a bundle in the building repository is loaded. | +| `BUNDLE_PATH` | `str` | Repo-relative path of the bundle. | +| `BUNDLE_FORMAT` | `str` | `"json"`. | +| `KEY` | `str` | `"ID"`: bundle entries are keyed by the spec's `ID` constant. | +| `FALLBACK` | `str` | `"en"`: what the site shows for a spec (or a field) with no translation. | +| `COVERAGE_REQUIRED` | `bool` | `true`: every spec in `SCOPE` must have an entry, or the build fails. `false`: missing entries are reported as coverage `n/total`, not failed. | +| `ORPHANS_ALLOWED` | `bool` | `false`: an entry whose `ID` matches no spec in `SCOPE` fails the build. | +| `ENABLED` | `bool` | `false` lists the contract but loads nothing. | + +## Bundle shape + +```json +{ + "$spec": "specs/i18n/agents-ru.t27", + "locale": "ru", + "entries": { + "": { "SUMMARY": "...", "NAME": "..." } + } +} +``` + +`$spec` must name the contract, `locale` must equal its `LOCALE`, and every key of an +entry must be in `FIELDS`. An entry may carry a subset of `FIELDS`; the rest fall +back to English. + +## What the site emits + +`public/skills/spec-skills.json` and `public/crons/spec-crons.json` carry, per entry, +`summary: {en, ...}` and `name: {en, ...}`, and per catalog +`i18n: [{locale, spec, sha256, bundle, enabled, fields, scope, coverage: {n, total}, missing}]`. +The Skill and Cron Explorers read the current locale from `summary`/`name` and the +SPEC panel prints `translations: ru via specs/i18n/agents-ru.t27 (n/total)`. +`npm run check:agents` (`qa/agents-spec-contract.mjs`) checks the contract: the +bundle exists at the declared path, names its contract, matches the locale, has no +orphan entry and no key outside `FIELDS`; coverage is printed. + +Validity: the file must pass `typecheck.ok === true` with empty `discarded` / +`lexerDiscarded` / `swallowed` under the vendored wasm compiler, like every other +spec here. diff --git a/specs/i18n/agents-ru.t27 b/specs/i18n/agents-ru.t27 new file mode 100644 index 0000000000..319ac45615 --- /dev/null +++ b/specs/i18n/agents-ru.t27 @@ -0,0 +1,33 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/i18n/agents-ru.t27 -- translation contract, Russian, for the agent specs +; Specs are English-only (LANG-EN). This module does not carry a single translated +; word: it declares WHICH fields of WHICH specs a bundle may translate, WHERE that +; bundle lives and HOW it is keyed, and what the site must do when a translation +; is missing. The Cyrillic payload is in the bundle file named below, never here. +; One module per locale: copy this file to agents-.t27 and change LOCALE +; and BUNDLE_PATH; the generator discovers every specs/i18n/*.t27 and hardcodes no +; locale list. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module i18n_agents_ru; + +pub const KIND : str = "i18n"; +pub const LOCALE : str = "ru"; +pub const SOURCE_LOCALE : str = "en"; +; Spec directories whose modules this bundle may translate; an entry ID must +; resolve to a spec in one of them. +pub const SCOPE : [2]str = ["specs/skills", "specs/crons"]; +; Spec fields a bundle entry may carry. SUMMARY maps to SUMMARY_EN, NAME to NAME. +pub const FIELDS : [2]str = ["SUMMARY", "NAME"]; +pub const BUNDLE_REPO : str = "trinity"; +pub const BUNDLE_PATH : str = "apps/website/i18n/agents.ru.json"; +pub const BUNDLE_FORMAT : str = "json"; +; Bundle entries are keyed by the spec's ID constant. +pub const KEY : str = "ID"; +; What the site shows when an entry or a field has no translation. +pub const FALLBACK : str = "en"; +; false: a spec with no translation is a warning, not a build failure. +pub const COVERAGE_REQUIRED : bool = false; +; false: a bundle entry whose ID matches no spec in SCOPE fails the build. +pub const ORPHANS_ALLOWED : bool = false; +pub const ENABLED : bool = true; diff --git a/specs/skills/README.md b/specs/skills/README.md new file mode 100644 index 0000000000..877a994615 --- /dev/null +++ b/specs/skills/README.md @@ -0,0 +1,61 @@ +# specs/skills — skills as first-class `.t27` specs + +> **Where this lives.** This directory in `gHashTag/t27` is the canonical home of these +> specs — edit them here. `gHashTag/trinity` keeps a vendored copy under +> `apps/website/public/t27/files/specs/skills/` and its build reads that copy through the +> vendored compiler wasm (`t27_compiler.wasm`). The wasm's `typecheck.ok` is necessary, +> not sufficient: it stays `true` for a wrong annotation such as `str = 5`, so the site's +> generator (`scripts/agents-from-specs.mjs`) also checks the field schema below. The +> bootstrap compiler on `master` was not run against these files in the commit that +> added them. + + +One file per Claude Code skill the site publishes (`apps/website/public/skills/manifest.json`). +The `.t27` file is the source of truth for the skill card on t27.ai; the JSON the site +serves (`public/skills/spec-skills.json`) is generated from these files by the real +compiler (`t27_compiler.wasm`), never by a regex. + +File name: `-.t27`; module name: `skill_`. + +## Schema (every constant is `pub const`) + +| constant | type | meaning | +|---------------|-----------|-------------------------------------------------------------------------| +| `KIND` | `str` | always `"skill"` | +| `ID` | `str` | `/`; must equal the id in the code manifest | +| `NAME` | `str` | display name (frontmatter `name`, else the directory) | +| `REPO` | `str` | short repo name (`t27`, `trinity`, …) | +| `SOURCE` | `str` | the skill file inside its directory (`SKILL.md` / `skill.md`) | +| `SUMMARY_EN` | `str` | one-paragraph summary (English) | +| `COMMAND` | `str` | how it is invoked (`/name argument-hint`); `""` when nothing is declared | +| `SPECS` | `[N]str` | `.t27` paths the skill stands on; `[0]str = []` when none is declared | +| `TAGS` | `[N]str` | short topical tags | +| `ENABLED` | `bool` | whether the skill is offered | +| `TIMEOUT_MIN` | `u16` | budget in minutes (30 = default, nothing declared in SKILL.md) | + +## Witness labels the site derives + +- `spec+code` — a spec here **and** the skill exists in the code manifest. +- `spec-only` — a spec here with no matching skill in code (warn). +- `code-only` — a skill in code with no spec here (listed, not invented). + +A cron spec (`../crons/`) names the skills it launches in its `RUNS`; the site +shows that link in both directions (`runBy` on the skill card). + +## Language + +Specs are English-only (t27 `LANG-EN`: `bootstrap/build.rs` fails the build on any +Cyrillic under `specs/`). There is no `SUMMARY_RU`. Translations are connected +through a spec: `specs/i18n/agents-.t27` (see `specs/i18n/README.md`) +declares the locale, the spec directories it covers (`SCOPE`), the fields a bundle +may translate (`FIELDS`: `SUMMARY`, `NAME`) and the bundle file that carries the +text (`BUNDLE_REPO`/`BUNDLE_PATH`, keyed by `ID`). The Russian layer is +`specs/i18n/agents-ru.t27` -> `trinity:apps/website/i18n/agents.ru.json`. The site's +generator discovers every `specs/i18n/*.t27`, loads each bundle, fails on an entry +whose `ID` matches no spec (`ORPHANS_ALLOWED = false`) and emits `summary`/`name` +as `{en, ...}` plus an `i18n` list with the coverage per catalog. A spec +with no translation falls back to English (`FALLBACK = "en"`). + +Validity: every file must pass `typecheck.ok === true` with empty +`discarded` / `lexerDiscarded` / `swallowed` under the vendored wasm compiler — +the site's `scripts/agents-from-specs.mjs` fails the build otherwise. diff --git a/specs/skills/t27-measure-corpus.t27 b/specs/skills/t27-measure-corpus.t27 new file mode 100644 index 0000000000..8a943e757d --- /dev/null +++ b/specs/skills/t27-measure-corpus.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/t27-measure-corpus.t27 -- skill t27/measure-corpus +; Source of truth for the skill card on t27.ai (#/skills?skill=t27/measure-corpus). +; The skill body lives in gHashTag/t27 at .claude/skills/measure-corpus/SKILL.md +; (vendored copy: apps/website/public/skills/files/t27/measure-corpus/SKILL.md, sha256 b8fb7503f660...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_t27_measure_corpus; + +pub const KIND : str = "skill"; +pub const ID : str = "t27/measure-corpus"; +pub const NAME : str = "MEASURE THE CORPUS"; +pub const REPO : str = "t27"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Pick the right instrument for a claim about the t27 spec corpus, and avoid the specific traps that have produced wrong published numbers. Use before quoting any figure about specs, errors, or gates."; +; The frontmatter name is a display title, not a slash command, so no invocation is declared. +pub const COMMAND : str = ""; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["corpus", "measurement", "honesty"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/t27-phi-loop.t27 b/specs/skills/t27-phi-loop.t27 new file mode 100644 index 0000000000..5483ca7a60 --- /dev/null +++ b/specs/skills/t27-phi-loop.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/t27-phi-loop.t27 -- skill t27/phi-loop +; Source of truth for the skill card on t27.ai (#/skills?skill=t27/phi-loop). +; The skill body lives in gHashTag/t27 at .claude/skills/phi-loop/SKILL.md +; (vendored copy: apps/website/public/skills/files/t27/phi-loop/SKILL.md, sha256 d8af7f6a9cbc...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_t27_phi_loop; + +pub const KIND : str = "skill"; +pub const ID : str = "t27/phi-loop"; +pub const NAME : str = "PHI LOOP"; +pub const REPO : str = "t27"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Execute 9-phase spec-first development workflow (Issue → Spec → TDD → Code → Gen → Seal → Verify → Land → Learn)"; +; The frontmatter name is a display title, not a slash command, so no invocation is declared. +pub const COMMAND : str = ""; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["workflow", "spec-first", "tdd"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/t27-tri-pipeline.t27 b/specs/skills/t27-tri-pipeline.t27 new file mode 100644 index 0000000000..0f7324bcd1 --- /dev/null +++ b/specs/skills/t27-tri-pipeline.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/t27-tri-pipeline.t27 -- skill t27/tri-pipeline +; Source of truth for the skill card on t27.ai (#/skills?skill=t27/tri-pipeline). +; The skill body lives in gHashTag/t27 at .claude/skills/tri-pipeline/SKILL.md +; (vendored copy: apps/website/public/skills/files/t27/tri-pipeline/SKILL.md, sha256 b4bfc290b86a...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_t27_tri_pipeline; + +pub const KIND : str = "skill"; +pub const ID : str = "t27/tri-pipeline"; +pub const NAME : str = "TRI Pipeline"; +pub const REPO : str = "t27"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Execute tri commands (gen, test, verify, seal, verdict) for spec-first development"; +; The frontmatter name is a display title, not a slash command, so no invocation is declared. +pub const COMMAND : str = ""; +; Specs this skill stands on, as declared (frontmatter or the site's bindings.json). +pub const SPECS : [1]str = ["specs/pipeline/e2e_test.t27"]; +pub const TAGS : [3]str = ["tri", "pipeline", "verify"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/t27-tri.t27 b/specs/skills/t27-tri.t27 new file mode 100644 index 0000000000..8443fc51b5 --- /dev/null +++ b/specs/skills/t27-tri.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/t27-tri.t27 -- skill t27/tri +; Source of truth for the skill card on t27.ai (#/skills?skill=t27/tri). +; The skill body lives in gHashTag/t27 at .claude/skills/tri/skill.md +; (vendored copy: apps/website/public/skills/files/t27/tri/skill.md, sha256 8fb4d4796c2d...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_t27_tri; + +pub const KIND : str = "skill"; +pub const ID : str = "t27/tri"; +pub const NAME : str = "tri"; +pub const REPO : str = "t27"; +pub const SOURCE : str = "skill.md"; +pub const SUMMARY_EN : str = "This skill should be used when user asks to \"tri skill begin\", \"PHI LOOP\", \"edit .t27 spec\", \"seal hash\", \"tri gen\", \"tri test\", \"tri verdict\", \"tri experience save\", \"tri notebook query\", \"tri notebook wrapup\", or any task requiring spe..."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/tri"; +; Specs this skill stands on, as declared (frontmatter or the site's bindings.json). +pub const SPECS : [1]str = ["compiler/skill/registry.t27"]; +pub const TAGS : [3]str = ["tri", "workflow", "seal"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/t27-wave-audit.t27 b/specs/skills/t27-wave-audit.t27 new file mode 100644 index 0000000000..200ac93ffb --- /dev/null +++ b/specs/skills/t27-wave-audit.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/t27-wave-audit.t27 -- skill t27/wave-audit +; Source of truth for the skill card on t27.ai (#/skills?skill=t27/wave-audit). +; The skill body lives in gHashTag/t27 at .claude/skills/wave-audit/SKILL.md +; (vendored copy: apps/website/public/skills/files/t27/wave-audit/SKILL.md, sha256 4cd0dd22105a...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_t27_wave_audit; + +pub const KIND : str = "skill"; +pub const ID : str = "t27/wave-audit"; +pub const NAME : str = "Wave Audit — Comprehensive Project Analysis"; +pub const REPO : str = "t27"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Full-spectrum audit of t27 project: GitHub issues analysis, weakness identification, SOTA research review, decomposed plan, and implementation of critical fixes."; +; The skill file has no frontmatter, so it declares no invocation. +pub const COMMAND : str = ""; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["audit", "issues", "plan"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/t27-wrap-up.t27 b/specs/skills/t27-wrap-up.t27 new file mode 100644 index 0000000000..8fed732fd1 --- /dev/null +++ b/specs/skills/t27-wrap-up.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/t27-wrap-up.t27 -- skill t27/wrap-up +; Source of truth for the skill card on t27.ai (#/skills?skill=t27/wrap-up). +; The skill body lives in gHashTag/t27 at .claude/skills/wrap-up/skill.md +; (vendored copy: apps/website/public/skills/files/t27/wrap-up/skill.md, sha256 a4a9b4fd9d02...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_t27_wrap_up; + +pub const KIND : str = "skill"; +pub const ID : str = "t27/wrap-up"; +pub const NAME : str = "wrap-up"; +pub const REPO : str = "t27"; +pub const SOURCE : str = "skill.md"; +pub const SUMMARY_EN : str = "Format and upload session wrap-up to NotebookLM for persistent semantic memory"; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/wrap-up"; +; Specs this skill stands on, as declared (frontmatter or the site's bindings.json). +pub const SPECS : [1]str = ["specs/automation/wrapup-auto.t27"]; +pub const TAGS : [3]str = ["memory", "notebooklm", "session"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-blog-post.t27 b/specs/skills/trinity-blog-post.t27 new file mode 100644 index 0000000000..a51e59eb18 --- /dev/null +++ b/specs/skills/trinity-blog-post.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-blog-post.t27 -- skill trinity/blog-post +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/blog-post). +; The skill body lives in gHashTag/trinity at .claude/skills/blog-post/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/blog-post/SKILL.md, sha256 2cb755fd4a60...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_blog_post; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/blog-post"; +pub const NAME : str = "blog-post"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Write and publish a post to the t27.ai blog. Covers where the blog actually lives (not where it looks like it lives), the Post schema with its required receipts and openQuestions, the honesty rules the data file itself imposes, and the b..."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/blog-post"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["blog", "publish", "website"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-board-sync.t27 b/specs/skills/trinity-board-sync.t27 new file mode 100644 index 0000000000..471f0039f2 --- /dev/null +++ b/specs/skills/trinity-board-sync.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-board-sync.t27 -- skill trinity/board-sync +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/board-sync). +; The skill body lives in gHashTag/trinity at .claude/skills/board-sync/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/board-sync/SKILL.md, sha256 f4bfa63737cf...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_board_sync; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/board-sync"; +pub const NAME : str = "board"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "GitHub Project Board auto-sync — fill empty fields, sync labels with board status, audit field completeness. Keeps board as realtime source of truth."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/board [sync|audit|fix]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["github", "board", "labels"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-cloud.t27 b/specs/skills/trinity-cloud.t27 new file mode 100644 index 0000000000..37299089b4 --- /dev/null +++ b/specs/skills/trinity-cloud.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-cloud.t27 -- skill trinity/cloud +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/cloud). +; The skill body lives in gHashTag/trinity at .claude/skills/cloud/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/cloud/SKILL.md, sha256 53aa338dddc4...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_cloud; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/cloud"; +pub const NAME : str = "cloud"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Show Trinity Cloud Dev dashboard — containers, training farm, issues, PRs, costs. Use when checking agent swarm status, cloud containers, or CI/CD pipeline."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/cloud [status|agents|events|full]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["dashboard", "railway", "agents"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-doctor.t27 b/specs/skills/trinity-doctor.t27 new file mode 100644 index 0000000000..96bdf3a12c --- /dev/null +++ b/specs/skills/trinity-doctor.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-doctor.t27 -- skill trinity/doctor +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/doctor). +; The skill body lives in gHashTag/trinity at .claude/skills/doctor/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/doctor/SKILL.md, sha256 68efdf793010...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_doctor; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/doctor"; +pub const NAME : str = "doctor"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "HEALER — diagnose, heal, commit dirty files, monitor junk & docs & duplicates, report honestly. Every loop = action + proof."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/doctor [quick|full|scan|junk|docs|dupes] [lang:ru|en]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["health", "repo", "report"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-farm-garden.t27 b/specs/skills/trinity-farm-garden.t27 new file mode 100644 index 0000000000..514077e888 --- /dev/null +++ b/specs/skills/trinity-farm-garden.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-farm-garden.t27 -- skill trinity/farm-garden +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/farm-garden). +; The skill body lives in gHashTag/trinity at .claude/skills/farm-garden/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/farm-garden/SKILL.md, sha256 672148988575...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_farm_garden; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/farm-garden"; +pub const NAME : str = "Garden — Quantum Gardener for Trinity Farm"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Autonomous farm population manager. Monitors, evolves, and recycles HSLM training workers."; +; The skill file has no frontmatter, so it declares no invocation. +pub const COMMAND : str = ""; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["farm", "hslm", "workers"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-fpga-synth.t27 b/specs/skills/trinity-fpga-synth.t27 new file mode 100644 index 0000000000..d7d39594f4 --- /dev/null +++ b/specs/skills/trinity-fpga-synth.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-fpga-synth.t27 -- skill trinity/fpga-synth +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/fpga-synth). +; The skill body lives in gHashTag/trinity at .claude/skills/fpga-synth/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/fpga-synth/SKILL.md, sha256 de3915e66cda...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_fpga_synth; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/fpga-synth"; +pub const NAME : str = "fpga-synth"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Run FPGA synthesis pipeline from .tri spec to bitstream. Use when working with Verilog, FPGA, or hardware synthesis."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/fpga-synth "; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["fpga", "verilog", "synthesis"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-god-mode.t27 b/specs/skills/trinity-god-mode.t27 new file mode 100644 index 0000000000..fa7198870e --- /dev/null +++ b/specs/skills/trinity-god-mode.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-god-mode.t27 -- skill trinity/god-mode +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/god-mode). +; The skill body lives in gHashTag/trinity at .claude/skills/god-mode/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/god-mode/SKILL.md, sha256 0c48e328ae4c...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_god_mode; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/god-mode"; +pub const NAME : str = "god-mode"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "GOD MODE — Agent monitoring dashboard. Shows swarm status, task queue, pipeline compliance, circuit breakers, git activity, and rule violations."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/god-mode [status|agents|tasks|violations]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["dashboard", "agents", "monitoring"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-implement-issue.t27 b/specs/skills/trinity-implement-issue.t27 new file mode 100644 index 0000000000..5d0838f2d4 --- /dev/null +++ b/specs/skills/trinity-implement-issue.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-implement-issue.t27 -- skill trinity/implement-issue +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/implement-issue). +; The skill body lives in gHashTag/trinity at .claude/skills/implement-issue/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/implement-issue/SKILL.md, sha256 88ccafaece20...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_implement_issue; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/implement-issue"; +pub const NAME : str = "implement-issue"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Read a GitHub issue, create a branch, implement the solution, and open a PR. Use when given an issue number to implement."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/implement-issue [issue-number]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["github", "issue", "pr"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-queen-hive-visuals.t27 b/specs/skills/trinity-queen-hive-visuals.t27 new file mode 100644 index 0000000000..3f7bff50dd --- /dev/null +++ b/specs/skills/trinity-queen-hive-visuals.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-queen-hive-visuals.t27 -- skill trinity/queen-hive-visuals +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/queen-hive-visuals). +; The skill body lives in gHashTag/trinity at .claude/skills/queen-hive-visuals/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/queen-hive-visuals/SKILL.md, sha256 c6d914dc81c8...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_queen_hive_visuals; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/queen-hive-visuals"; +pub const NAME : str = "queen-hive-visuals"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Maintain QUEEN's floating hive, original point-down TRINITY logo, sharp issue displays and matching camera interactions."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/queen-hive-visuals"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["queen", "ui", "3d"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-review-code.t27 b/specs/skills/trinity-review-code.t27 new file mode 100644 index 0000000000..b4e9b7659f --- /dev/null +++ b/specs/skills/trinity-review-code.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-review-code.t27 -- skill trinity/review-code +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/review-code). +; The skill body lives in gHashTag/trinity at .claude/skills/review-code/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/review-code/SKILL.md, sha256 e5712744615c...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_review_code; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/review-code"; +pub const NAME : str = "review-code"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Review recent code changes for bugs, style issues, and improvements. Use after writing code or before committing."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/review-code [file-or-branch] (optional)"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [2]str = ["review", "quality"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-run-tests.t27 b/specs/skills/trinity-run-tests.t27 new file mode 100644 index 0000000000..3042b92744 --- /dev/null +++ b/specs/skills/trinity-run-tests.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-run-tests.t27 -- skill trinity/run-tests +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/run-tests). +; The skill body lives in gHashTag/trinity at .claude/skills/run-tests/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/run-tests/SKILL.md, sha256 7ead75ab36b8...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_run_tests; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/run-tests"; +pub const NAME : str = "run-tests"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Build the project, check for warnings, run all tests, and report results. Quick health check for the codebase."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/run-tests [module] (optional - all, vsa, vm, bsd, hslm, tri-api)"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["tests", "build", "zig"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-scholar.t27 b/specs/skills/trinity-scholar.t27 new file mode 100644 index 0000000000..75d440fef6 --- /dev/null +++ b/specs/skills/trinity-scholar.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-scholar.t27 -- skill trinity/scholar +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/scholar). +; The skill body lives in gHashTag/trinity at .claude/skills/scholar/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/scholar/SKILL.md, sha256 5c35431008a4...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_scholar; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/scholar"; +pub const NAME : str = "scholar"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Self-Evolving Research Agent — scans web for relevant tech, evaluates findings, proposes improvements. Uses Perplexity Sonar API via MCP."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/scholar [scan|eval|apply|full|report|topic:\"query\"]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["research", "perplexity", "mcp"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-status.t27 b/specs/skills/trinity-status.t27 new file mode 100644 index 0000000000..26e1b22f03 --- /dev/null +++ b/specs/skills/trinity-status.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-status.t27 -- skill trinity/status +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/status). +; The skill body lives in gHashTag/trinity at .claude/skills/status/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/status/SKILL.md, sha256 e4bc75ff45cd...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_status; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/status"; +pub const NAME : str = "status"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Live system dashboard — 12-dimension ouroboros score, verdict v3, agents, build health, recommendations"; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/status [quick|full] [lang:ru|en]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["dashboard", "ouroboros", "verdict"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-tech-tree.t27 b/specs/skills/trinity-tech-tree.t27 new file mode 100644 index 0000000000..dc1e5cddf5 --- /dev/null +++ b/specs/skills/trinity-tech-tree.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-tech-tree.t27 -- skill trinity/tech-tree +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/tech-tree). +; The skill body lives in gHashTag/trinity at .claude/skills/tech-tree/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/tech-tree/SKILL.md, sha256 f84c8ea67ab6...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_tech_tree; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/tech-tree"; +pub const NAME : str = "tree"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Technology dependency tree — shows issue DAG, prereqs, critical path, blocked/ready tasks. Single source of truth for work order."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/tree [next|path|blocked|update]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["issues", "dag", "planning"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-tri.t27 b/specs/skills/trinity-tri.t27 new file mode 100644 index 0000000000..50942355c5 --- /dev/null +++ b/specs/skills/trinity-tri.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-tri.t27 -- skill trinity/tri +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/tri). +; The skill body lives in gHashTag/trinity at .claude/skills/tri/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/tri/SKILL.md, sha256 4c38d1005219...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_tri; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/tri"; +pub const NAME : str = "tri"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "TRI status dashboard — agent thought mode by default, /tri full for visual dashboard"; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/tri [short] [full] [audit] [coverage] [lang:ru|en] [humor|prof|toxic|zen]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["tri", "dashboard", "status"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-trinity-test.t27 b/specs/skills/trinity-trinity-test.t27 new file mode 100644 index 0000000000..6cf8fba212 --- /dev/null +++ b/specs/skills/trinity-trinity-test.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-trinity-test.t27 -- skill trinity/trinity-test +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/trinity-test). +; The skill body lives in gHashTag/trinity at .claude/skills/trinity-test/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/trinity-test/SKILL.md, sha256 648c7f095f0b...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_trinity_test; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/trinity-test"; +pub const NAME : str = "trinity-test"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Run Trinity test suites and analyze results. Use for testing VSA, VM, Firebird, WASM, or full test suite."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/trinity-test [module] (vsa, vm, firebird, all)"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["tests", "vsa", "vm"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-ux-wave.t27 b/specs/skills/trinity-ux-wave.t27 new file mode 100644 index 0000000000..24a3d51309 --- /dev/null +++ b/specs/skills/trinity-ux-wave.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-ux-wave.t27 -- skill trinity/ux-wave +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/ux-wave). +; The skill body lives in gHashTag/trinity at .claude/skills/ux-wave/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/ux-wave/SKILL.md, sha256 9690999e8d1e...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_ux_wave; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/ux-wave"; +pub const NAME : str = "ux-wave"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Autonomous UX improvement waves — launch 4 parallel agents per wave, audit every 5 waves, commit fixes. For Queen UI chat & network polish."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/ux-wave [wave-number] [audit]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["ux", "agents", "queen"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-vibee-gen.t27 b/specs/skills/trinity-vibee-gen.t27 new file mode 100644 index 0000000000..9877c04083 --- /dev/null +++ b/specs/skills/trinity-vibee-gen.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-vibee-gen.t27 -- skill trinity/vibee-gen +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/vibee-gen). +; The skill body lives in gHashTag/trinity at .claude/skills/vibee-gen/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/vibee-gen/SKILL.md, sha256 fc01e69f1395...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_vibee_gen; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/vibee-gen"; +pub const NAME : str = "vibee-gen"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Generate Zig or Verilog code from VIBEE specifications. Use when creating or updating .tri specs and regenerating code."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/vibee-gen "; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["codegen", "zig", "verilog"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-vsa-verify.t27 b/specs/skills/trinity-vsa-verify.t27 new file mode 100644 index 0000000000..cb0783e43e --- /dev/null +++ b/specs/skills/trinity-vsa-verify.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-vsa-verify.t27 -- skill trinity/vsa-verify +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/vsa-verify). +; The skill body lives in gHashTag/trinity at .claude/skills/vsa-verify/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/vsa-verify/SKILL.md, sha256 8b9c4518b1bc...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_vsa_verify; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/vsa-verify"; +pub const NAME : str = "vsa-verify"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Verify VSA (Vector Symbolic Architecture) mathematical proofs and operations. Use for math verification, bind/unbind/bundle testing, phi identity checks."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/vsa-verify [operation or proof to verify]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["vsa", "math", "verify"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30; diff --git a/specs/skills/trinity-wave.t27 b/specs/skills/trinity-wave.t27 new file mode 100644 index 0000000000..489e76ba12 --- /dev/null +++ b/specs/skills/trinity-wave.t27 @@ -0,0 +1,25 @@ +// SPDX-License-Identifier: Apache-2.0 +; specs/skills/trinity-wave.t27 -- skill trinity/wave +; Source of truth for the skill card on t27.ai (#/skills?skill=trinity/wave). +; The skill body lives in gHashTag/trinity at .claude/skills/wave/SKILL.md +; (vendored copy: apps/website/public/skills/files/trinity/wave/SKILL.md, sha256 ecf06fdfa467...). +; The JSON the site serves is generated from this file by the real compiler; +; nothing below is parsed with a regex. +; phi^2 + 1/phi^2 = 3 | TRINITY + +module skill_trinity_wave; + +pub const KIND : str = "skill"; +pub const ID : str = "trinity/wave"; +pub const NAME : str = "wave"; +pub const REPO : str = "trinity"; +pub const SOURCE : str = "SKILL.md"; +pub const SUMMARY_EN : str = "Farm wave management — create Railway accounts, spawn workers, deploy configs, track wave progress. Use for scaling training farm."; +; Invocation, from the skill's own frontmatter (name + argument-hint). +pub const COMMAND : str = "/wave [status|spawn |deploy|progress]"; +; No spec is declared for this skill yet; the Skill Explorer lists it as unbound. +pub const SPECS : [0]str = []; +pub const TAGS : [3]str = ["farm", "railway", "scaling"]; +pub const ENABLED : bool = true; +; Default budget; SKILL.md declares no timeout of its own. +pub const TIMEOUT_MIN : u16 = 30;