refactor!: drop the wiki and page layers

The plugin is issues and nothing else now. `skills/page` (the page-tree
domain) and `skills/wiki` (its bridge to a Gitea wiki) are gone, and
with them the issue domain's `wiki:` field — page titles were the only
thing that tied the two domains together, and a field the tracker has
no column for never came back from a pull anyway.

What is left is the shape AGENTS.md already claimed for the rest of the
repo: one domain, one bridge, one transport. The docs, the plugin
manifest, and tea-runner's skill table now say so too, and
test_payload_root walks the one script directory that remains.

Also removes openspec/config.yaml; nothing in the repo referenced it.

378 tests pass.

Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
This commit is contained in:
naudachu
2026-08-10 22:29:55 +05:00
parent 81119a3bd9
commit 5a8bd1c299
26 changed files with 53 additions and 2551 deletions
+10 -17
View File
@@ -33,8 +33,6 @@ Load the skill, do not remember the flags:
`labels.py`, `evict.py`
- `/tea:issue``issue_check.py`, `issue_tree.py`, `issue_index.py`,
`issue_new.py`, `issue_ac.py`, `issue_evict.py`
- `/tea:wiki``wiki_ls.py`, `wiki_pull.py`, `wiki_push.py`
- `/tea:page``page_import.py`, `page_index.py`, `page_ls.py`
Invoke `Skill` with the one that owns the task at the start, and use the command
table it gives you verbatim. The skill is the single source of
@@ -45,8 +43,7 @@ instead of trying it.
## Hard rules
1. **No raw `tea`.** Every tracker call goes through a script in
`skills/sync/scripts/` or `skills/wiki/scripts/`. The one exception is a
diagnostic the skill itself
`skills/sync/scripts/`. The one exception is a diagnostic the skill itself
documents, written with the literal `--login "$GITEA_LOGIN"` placeholder —
the `tea-guard` hook substitutes the pinned login. Never name a login.
2. **No writing to issue files.** You have no `Edit` and no `Write`. Scripts
@@ -56,25 +53,21 @@ instead of trying it.
only the items the caller named, by the number or the substring the caller
gave. Whether a criterion is actually met is a judgement about content, and
content is never yours.
3. **Push only what you were told to push.** `push.py` and `wiki_push.py`
publish to a tracker other people read, **and `push.py` deletes the local
file on success** — so a widened set is not an over-share, it is somebody
else's working copy gone. Run them with the ids, titles, or filter the
caller named. Never widen the set, never run a bare `push.py` because it
looked like the obvious next step, and never pass `--force` — a validation
failure is a result to report, not an obstacle to route around.
`wiki_push.py` needs `-m`; use the caller's words, never your own summary.
Report the number and URL `push.py` printed; that is now the only address
the issue has.
3. **Push only what you were told to push.** `push.py` publishes to a tracker
other people read, **and it deletes the local file on success** — so a
widened set is not an over-share, it is somebody else's working copy gone.
Run it with the ids, titles, or filter the caller named. Never widen the
set, never run a bare `push.py` because it looked like the obvious next
step, and never pass `--force` — a validation failure is a result to report,
not an obstacle to route around. Report the number and URL `push.py`
printed; that is now the only address the issue has.
4. **Close only the ids the caller named.** Closing is a script now
(`close.py`), so it is yours to run — under the same discipline as push: the
ids the caller named, and no others. Never widen the set, never infer that
an issue is finished because its checkboxes are ticked or its branch is
merged; whether work is done is a judgement about content, and content is
never yours. `--reopen` is the same rule backwards. **Retitling stays
forbidden** on both sides — on the wiki that means no `--retitle`, since
renaming a published page abandons the old one, and deleting anything on a
tracker is never yours either.
forbidden**, and deleting anything on a tracker is never yours either.
Two local deletions are allowed, both only when the caller asked for them:
push's own, on the issue you were told to push, and eviction