specs: the Queen holds the scheduler -- crons and skills as one Inngest app, tool mcp/inngest-dev - #3595
Merged
Conversation
…st app, tool mcp/inngest-dev, Tau TOOLS specs/automation/inngest-queen-scheduler.t27 states the app t27-queen (served by trios/agent-server at /api/inngest): one function per cron/skill card, dispatch derived from HOST (workflow-dispatch | tick-only), skills as queen-issue, THE MOVE order (fire seen -> schedule: removed -> CONTROL = inngest). specs/tools/mcp/inngest-dev.t27 is the tool card from the live tools/list (20 tools). specs/agents/t.t27 TOOLS gains it; catalog.t27 legacy table 63, MCP_CARDS 11. Bootstrap t27c: parse, typecheck, parse-complete ok. Closes #3594
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
…c seal --save) The four gen_hash_* of tools_ToolsCatalog.json described the 62-row catalog; coverage and spec-guards said so. Resealed with t27c v0.2.0; verify: all hashes MATCH; check_seal_currency: STALE 0; check_seal_coverage: OK. Closes #3594
Contributor
|
📓 NotebookLM Notebook linked to this PR
This notebook contains session context, decisions, and artifacts for this work. |
Contributor
PR DashboardGenerated at: 2026-09-13 04:10:47 UTC
Summary
Seal Status
|
gHashTag
pushed a commit
to gHashTag/BrowserOS
that referenced
this pull request
Sep 13, 2026
The Queen's scheduler, as the contract in gHashTag/t27#3595 describes it (specs/automation/inngest-queen-scheduler.t27; tool specs/tools/mcp/inngest-dev.t27, held by agent T). One Inngest function per card under specs/crons and specs/skills, read at start-up with the real compiler (vendored t27_compiler.wasm, sha256 in specs/PIN) and never with a regex. - trios/agent-server/specs: 33 cron cards, 26 skill cards, the contract and the wasm, byte-identical to t27 @ 26294613; scripts/sync-t27-specs.sh refreshes them and rewrites the pin. - apps/server/src/inngest: t27-consts (wasm), spec-catalog (schema, refuse a bad card and serve the rest), plan (pure derivation, every rule a constant of the contract), dispatch (workflow_dispatch on the API's default branch; one open "[skill] <ID>" issue per skill, reused), functions, route, index. - /api/inngest served by inngest/hono (signature = auth, so outside the trusted-origin guard); GET /queen/scheduler is the read-only projection (functions, triggers, reasons, refused cards, WHICH env vars are set). - Derivation, measured: 59 functions, 12 with a cron trigger (all HOST github-actions), 21 tick-only (inngest/timer/railway-cron keep their own schedule, no double fire), 26 skills, 0 refused, 0 dangling RUNS. - The bee brief gains "The Queen's scheduler": the tool is the Queen's, a [skill] issue comes from skill/<ID>.run, WHEN is changed on the card, a bee sends no events and calls no Inngest MCP (no key on the machine). - docs/queen-inngest.md: the app, the env, the three-step move. - tests/api/queen-inngest.test.ts: 9 pass (catalog, refusal, plan, dispatch against a fake GitHub, routes; an unsigned invocation is refused). Measured lenience of the wasm analyzer (`str = ;` and `str = 12` typecheck ok) is recorded in the tests; the schema check is the gate here, t27c is the judge upstream. Two pre-existing tsc errors in queen-tick.ts (lines 2116, 2121) are on the base branch and untouched.
gHashTag
added a commit
to gHashTag/BrowserOS
that referenced
this pull request
Sep 13, 2026
…480) * feat(queen): hold every cron and skill as one Inngest app, t27-queen The Queen's scheduler, as the contract in gHashTag/t27#3595 describes it (specs/automation/inngest-queen-scheduler.t27; tool specs/tools/mcp/inngest-dev.t27, held by agent T). One Inngest function per card under specs/crons and specs/skills, read at start-up with the real compiler (vendored t27_compiler.wasm, sha256 in specs/PIN) and never with a regex. - trios/agent-server/specs: 33 cron cards, 26 skill cards, the contract and the wasm, byte-identical to t27 @ 26294613; scripts/sync-t27-specs.sh refreshes them and rewrites the pin. - apps/server/src/inngest: t27-consts (wasm), spec-catalog (schema, refuse a bad card and serve the rest), plan (pure derivation, every rule a constant of the contract), dispatch (workflow_dispatch on the API's default branch; one open "[skill] <ID>" issue per skill, reused), functions, route, index. - /api/inngest served by inngest/hono (signature = auth, so outside the trusted-origin guard); GET /queen/scheduler is the read-only projection (functions, triggers, reasons, refused cards, WHICH env vars are set). - Derivation, measured: 59 functions, 12 with a cron trigger (all HOST github-actions), 21 tick-only (inngest/timer/railway-cron keep their own schedule, no double fire), 26 skills, 0 refused, 0 dangling RUNS. - The bee brief gains "The Queen's scheduler": the tool is the Queen's, a [skill] issue comes from skill/<ID>.run, WHEN is changed on the card, a bee sends no events and calls no Inngest MCP (no key on the machine). - docs/queen-inngest.md: the app, the env, the three-step move. - tests/api/queen-inngest.test.ts: 9 pass (catalog, refusal, plan, dispatch against a fake GitHub, routes; an unsigned invocation is refused). Measured lenience of the wasm analyzer (`str = ;` and `str = 12` typecheck ok) is recorded in the tests; the schema check is the gate here, t27c is the judge upstream. Two pre-existing tsc errors in queen-tick.ts (lines 2116, 2121) are on the base branch and untouched. * fix(queen): the route-guard gate did not know the scheduler, so it said so CI (Tests / server-api) refused the branch: /api/inngest was an unguarded mount and the pins said 40 mounts, 6 public-read, 18 under /queen. All three were right to fail - a new mount with no guard is exactly what that gate is for. This records why it is allowed: - /api/inngest goes on the reasoned allowlist: Inngest signs every request with INNGEST_SIGNING_KEY and inngest/hono rejects the rest with 4xx before a function runs (queen-inngest.test.ts measures it); a trusted-origin check would only refuse Inngest, which sends no browser Origin. - /queen/scheduler is the seventh public-read - an explicit publicReadCorsMiddleware() on a projection that names which env vars are set and never their values. - Pins re-measured 2026-09-13: 42 mounts, 7 public-read, 19 /queen, seven exceptions without the allowlist. route-guard.test.ts 6 pass; tools/route-guard-audit.mjs: unguardedMounts 0. Tests / server-tools fails on the base as well (Chrome: 'Hidden windows are no longer supported', 3 tests) and is not touched here. --------- Co-authored-by: gHashTag <oxicocicate35@gmail.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
The Queen holds the scheduler
https://t27.ai/#/queencatalogues 33 crons and 26 skills, but nothing the Queen holds can start, list, rerun or cancel them. This PR puts the scheduler into the Queen's hands as specs (the code follows in gHashTag/BrowserOS):specs/automation/inngest-queen-scheduler.t27— one Inngest appt27-queenserved bytrios/agent-serverat/api/inngestagainst the self-hosted Inngest of Railway project 999. One function per card:cron-<slug>/skill-<slug>;cron/<ID>.tickandskill/<ID>.runevents;RUNS_FANOUT. Dispatch derived fromHOST, never from a name:github-actions→workflow-dispatch(ref = default branch as the API reports it);inngest/timer/railway-cron→tick-only(no double fire for the six 999 functions; the 14 timers have no remote handle). Skill =queen-issue([skill] <ID>, Success Criteria + Boundary, reuse open same title). THE MOVE is ordered: fire seen → PR removesschedule:→CONTROL = "inngest". NoCONTROLfield changes here.specs/tools/mcp/inngest-dev.t27— the tool card, written from the livetools/listof the server (20 tools, 4 marked deprecated by the server itself),TRANSPORT = "http",ENV = ["INNGEST_SIGNING_KEY"]. Measured 2026-09-13 without the key:health,get_apps,list_runs→REST API v2 returned HTTP 401;list_docs,grep_docsanswer.specs/agents/t.t27— Tau (Queen)TOOLSgainsmcp/inngest-dev; binding source is the scheduler spec'sOWNER = "T".specs/tools/catalog.t27— legacy table 63 rows,LEGACY_COUNT = 63,MCP_CARDS = 11; README paragraph updated.Evidence
t27cv0.2.0 (this checkout): the changed files parse, typecheck 0 errors,parse-completeconsumes all tokens, ASCII only.tools 92 specs (mcp 11 servers, 255 tools),agents … with tools 5,i18n … tools 92/92with the Russian row (trinity PR follows).tools/check_now_entry_shape.pyOK;tools/published_figures.py --checkexit 0.tools/trinity_tools_registry.py check: one finding,catalog MCP_CARDS is 11, the inventory measures 10—tools_inventory.jsonis deliberately left at its 2026-09-12 measurement becauseinventoryon this host reads the pinned consumer astable 0and would replace a measured file with 54 findings. Recorded in docs/now.Not claimed
No function has synced or fired yet; 3 of the 12 GHA workflows (999 ci/security, t27 formal-mutation) lack
workflow_dispatchand would answer 422 until a PR adds it.Closes #3594