Commit Graph
127 Commits
Author SHA1 Message Date
teahubxyzandClaude Fable 5.1 060f3a3154 MCP: tests for tea_file_edit (#12)
Replacements apply in order and the answer says what was made; every refusal comes before anything is committed.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SKUMBXauq7XVN4BhTXjCSM
2026-10-16 22:46:02 +00:00
teahubxyzandClaude Fable 5.1 fcd70f294d MCP: tea_file_edit, exact-text replacements in one file (#12)
For a file too long to send whole: the edits apply in order, each old text must occur exactly once in the file as it stands, and the answer gives the new file's size and sha256 to check against the caller's copy. Version 2.3.0.

Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01SKUMBXauq7XVN4BhTXjCSM
2026-10-16 22:43:48 +00:00
teahubxyzandClaude Opus 5.5 f853d7c97a Teahub home-screen icon and link-preview card (#11)
Teahub home-screen icon and link-preview card (#11)

- apple-touch-icon.png: the cup on Teahub green (#2f9e44), opaque 180x180, linked from header.tmpl
- og-card.png: 1200x630 link-preview card (the home page hero), 15 KB
- head_opengraph.tmpl: Gitea 28.0.0's; site pages get the absolute card URL with size and alt,
  and twitter:card summary_large_image
- src/: the HTML the two PNGs are rendered from

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01XvDrpBDoAJjW8z1kaa3GAa
2026-10-16 10:31:26 +00:00
teahubxyzandClaude Opus 5.5 8fb146eef2 decisions: Orgchain v1.14.1, a belt counts only on its seat's sat
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 16:10:50 -07:00
teahubxyzandClaude Opus 5.5 fd4ee9205a decisions: Orgchain v1.14, soulbound belts
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 15:49:26 -07:00
teahubxyzandClaude Opus 5.5 95cfd61da3 decisions: Orgchain v1.13, whole trees change hands
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 14:53:50 -07:00
teahubxyzandClaude Opus 5.5 ee46c41609 decisions: Orgchain v1.12, both sides of a deal and orgs change hands
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 13:37:03 -07:00
teahubxyzandClaude Opus 5.5 1a07c19540 decisions: Orgchain v1.11, charters and agents graduate
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 12:18:01 -07:00
teahubxyzandClaude Opus 5.5 dc2f38e3c3 decisions: Orgchain v1.10, keyrings with a proof from every key
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 10:50:29 -07:00
teahubxyzandClaude Opus 5.5 e1d73ec702 decisions: mdecks prompt for your agent, and SKILL.md
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-15 03:03:29 -07:00
teahubxyzandClaude Opus 5.5 5098aeed44 decisions: mdecks decks travel inside their links
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-15 02:48:34 -07:00
teahubxyzandClaude Opus 5.5 30ac7a212a decisions: mdecks cuts a slide too long even at 70%
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-15 02:16:12 -07:00
teahubxyzandClaude Opus 5.5 71012d5498 decisions: Orgchain v1.9, lineage/v0 as an ordinals metaprotocol on regtest
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 02:05:17 -07:00
teahubxyzandClaude Opus 5.5 3850edd7f2 decisions: mdecks slides shrink to fit
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-15 01:47:46 -07:00
teahubxyzandClaude Opus 5.5 00519aea45 decisions: Orgchain v1.8, belts cross holdings and graduates become holdings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 00:45:31 -07:00
teahubxyzandClaude Opus 5.5 b876f10b71 decisions: AgentLore loads again (old /v/ asset paths on gh-pages)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-15 00:42:02 -07:00
teahubxyzandClaude Opus 5.5 2583cb55be decisions: Orgchain v1.7, items, standing offers and a Mainnet setting
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-15 00:33:37 -07:00
teahubxyzandClaude Opus 5.5 25e72f64b8 mcp 2.2: domain search in chat (tea_domains) and on the dashboard, without a second sign-in
Being signed in to teahub.xyz, or connected to Tea MCP in chat, is the gate,
as the operator put it. This takes out 9fece6d's browser sign-in: GET /domains
is open and bounded again (only teahub.xyz may read it, 8 searches a minute
per client and 20 in all, answers kept ten minutes), and the same search is
the tea_domains tool, behind the connector's sign-in.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-15 00:01:28 -07:00
teahubxyzandClaude Opus 5.5 7e524fd1df decisions: Orgchain v1.6.1, the last act wins a timed beat
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 23:21:53 -07:00
teahubxyzandClaude Opus 5.5 359cc121a4 decisions: Orgchain v1.6, shared mining, gas on every act, sends across holdings
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 23:16:23 -07:00
teahubxyzandClaude Opus 5.5 c0e3ca0138 decisions: Orgchain v1.5, beats pay the holding and test BTC moves down the tree
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 22:27:52 -07:00
teahubxyzandClaude Opus 5.5 9fece6d818 mcp 2.2: domain search needs the MCP's sign-in; the Domains tab sends people through it once
/domains/sign-in and /domains/callback do Tea MCP's own Gitea OAuth (the
Green Tea MCP app) in the browser, keep only the name from Gitea, and leave a
signed, HttpOnly cookie on mcp.teahub.xyz for 30 days. GET /domains wants it
(401 with a sign-in link otherwise) and rate-limits per person. The Domains
tab sends that cookie, offers the sign-in on a 401, and runs the waiting
search on the way back. Tested end to end against a Gitea 28 and Cloudflare.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-14 22:07:03 -07:00
teahubxyzandClaude Opus 5.5 8145b28103 decisions: Teahub's look is back on prod; its domain search waits for the operator
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-14 20:53:46 -07:00
teahubxyzandClaude Opus 5.5 9551a8658a Teahub's look back on prod, and Tea MCP 2.2 for the dashboard's Domains tab
gitea/custom: the old factory's home page and dashboard, ported to Gitea 28.
The signed-out home is Teahub = Git + Tea + Time beside the cup; the
dashboard keeps the feed and puts Domains | Repository | Organization above
the contribution heatmap. Green tea colours for Gitea's light, dark and auto
themes, and the 🍵 mark. gitea/sync-custom.sh puts it on green-tea's volume;
gitea/fly.toml names the site Teahub and sets the meta tags.

mcp 2.2: GET /domains, the old factory's Cloudflare Registrar search (a live
check of the exact names, suggestions, prices). Only GITEA_URL may read it
from a browser; 8 searches a minute per client and 20 in all; answers kept
ten minutes.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-14 20:47:34 -07:00
teahubxyzandClaude Opus 5.5 5e80aa7dd9 decisions: Orgchain layout fix
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 20:31:39 -07:00
teahubxyzandClaude Opus 5.5 6f112ef7ac decisions + lineage: tapkeys listed beside Taproot; Orgchain v1.4 shows secrets
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 20:14:59 -07:00
teahubxyzandClaude Opus 5.5 ea1e6a7898 decisions: prod runs Gitea 28.0.0; rebuild log and AGENTS say where its config lives
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-14 20:01:36 -07:00
teahubxyzandClaude Opus 5.5 1cbe5ba086 decisions + lineage: Taproot and SegWit for every account (key tree, Orgchain v1.3)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 19:50:17 -07:00
teahubxyzandClaude Opus 5.5 40706b8af4 mcp 2.1: Actions runs and job logs, now that prod runs Gitea 28
tea_actions lists runs from /actions/runs (ids, numbers, workflows, conclusions) and tea_action_logs reads one run's jobs, their steps and the last lines of each job's log. Gitea 1.24 had neither endpoint; 28 has both. Tried against a copy of prod's data on 28 before this commit.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-14 19:46:49 -07:00
teahubxyzandClaude Opus 5.5 f24e43077b gitea: prod's Fly config lives here now, pinned to Gitea 28.0.0
green-tea's fly.toml was only on hb-5 (~/green-tea), on the floating
docker.gitea.com/gitea:1.24 tag. It moves here unchanged apart from the
image, which is now an exact release. Deploy from gitea/ after a volume
snapshot.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-15 02:41:29 +00:00
teahubxyzandClaude Opus 5.5 325c7a67d1 decisions + lineage: Orgchain v1.2 (tapkeys and lineage's leaves)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 19:12:29 -07:00
teahubxyzandClaude Opus 5.5 0060ddb771 lineage: Orgchain v1.1 has lineage's keys; decisions receipt
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 18:23:11 -07:00
teahubxyzandClaude Opus 5.5 a5a66885c0 decisions: Tea MCP 2.0 (typed, 29 tools, as the caller); old container stopped; Boring follows it
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-14 18:20:27 -07:00
teahubxyzandClaude Opus 5.5 fbb115923a mcp 2.0.1: tea_issues also takes labels as a comma-separated string
Connectors that were open before 2.0 keep 1.0's tool list, where labels is
one comma-separated string, until they refresh it. That form now works too.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-14 18:18:02 -07:00
teahubxyzandClaude Opus 5.5 f965aa75a4 lineage: Orgchain v1 lives in lineage/orgchain; decisions receipt
docs/lineage.md: "Operate it" replaces "Rehearse it" (Orgchain v1, the
verbs and Time); "Not built yet" names the key layer on branch `tree`.
docs/decisions.md: Orgchain v1, the lineage org, and the token receipt.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 18:10:11 -07:00
teahubxyzandClaude Opus 5.5 fb8acb0af9 mcp: Teahub MCP 2.0, typed and with the tools agents kept asking for
One file, 29 tools, every one acting with the caller's own Gitea token.
Parameters are typed (patterns, ranges, enums), so FastMCP refuses a bad
argument before Gitea is asked anything and publishes the limits in each
tool's schema.

New: tea_pull_get/create/review/merge, tea_labels and tea_label,
tea_commit (up to 50 files, text or base64), tea_branch_create,
tea_repo_edit (including archived), tea_hook_create (one per URL),
tea_secret_set and tea_variable_set.

Fixed:
- unknown labels are refused instead of silently dropped
- a file update is chosen from a 404 on the path, not from matching "404"
  in an error message; paths with spaces are percent-encoded
- tea_org_add_member names its team; there is no default
- org repositories are private by default, like user repositories
- "more" and "truncated" come from X-Total-Count, so they are true
- tea_issue_comments pages client-side: Gitea's endpoint is unpaged
- tea_actions reads /actions/tasks: 1.24 has no /actions/runs, so the
  old tool always got a 404
- a Gitea that does not answer is named as such instead of a masked error

Tests run against a fake Gitea (27). The same code was run against
teahub.xyz with a temporary token in scratch repositories that were then
deleted.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01CYHXFvWMCs1GUmRmpySqQ6
2026-10-14 18:04:07 -07:00
teahubxyz 369bfddaa2 decisions: hb-5 is the shell; Boring shows pictures 2026-10-14 17:05:36 -07:00
teahubxyzandClaude Opus 5.5 4b51ff7c63 decisions: Orgchain at lineage.yolopreneur.lol/orgchain/ (+ token 41 receipt)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 23:10:12 +00:00
teahubxyzandClaude Opus 5.5 2ab5aa2f73 docs/lineage.md: rehearse it at lineage.yolopreneur.lol/orgchain/
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 23:08:58 +00:00
teahubxyz 0dc3bfa949 pages: byte ranges (206/416) and media content types 2026-10-14 15:58:43 -07:00
teahubxyz b3d35aa43b pages: PAGES_HOST (bind address); a private copy on hb-5 serves the maths site 2026-10-14 15:56:46 -07:00
teahubxyz 4576fd8d9a decisions: dead teahub.xyz names removed 2026-10-14 15:41:49 -07:00
teahubxyz 2bbed297b8 pages: _headers support, supertestnet.lol; decisions: domain audit, supertestnet back 2026-10-14 15:33:58 -07:00
teahubxyzandClaude Opus 5.5 f6051c0f76 decisions: one tree — lineage is the factory's shape (#8)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 22:25:07 +00:00
teahubxyzandClaude Opus 5.5 b433a8220c SKILLS.md: belts per seat × skill; belts are badges (#8)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 22:24:09 +00:00
teahubxyzandClaude Opus 5.5 16bac3848e docs/lineage.md: one tree for keys, context and pages (#8)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 22:23:48 +00:00
teahubxyz 298db19e7d decisions: token receipt (35, 36) 2026-10-14 15:22:58 -07:00
teahubxyz 7cd545b2a0 pages: phly.cloud → phly/site; decisions: products in the portfolio, phly.cloud back 2026-10-14 15:22:01 -07:00
teahubxyz a60a9706cc pages: persimmons.app from persimmons/app root, phast.app off pages, extensionless HTML; decisions: phast + persimmons re-ported from canonical 2026-10-14 15:11:17 -07:00
teahubxyzandClaude Opus 5.5 679f74c9b0 decisions: SKILLS.md is the skills contract (#7)
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01H4upF5LVwmPDDqrhdUfnXh
2026-10-14 21:50:33 +00:00