bvandeusen and Claude Opus 5
4e4020c040
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 10s
CI & Build / integration (push) Successful in 54s
CI & Build / TypeScript typecheck (push) Successful in 55s
CI & Build / Python tests (push) Successful in 1m41s
CI & Build / Build & push image (push) Successful in 33s
feat(rules): move a rule between global and project scope, keeping its id, history, areas and edges ( #4063 )
...
A rule's home is its reach: a rulebook topic makes it global, a project makes it
that project's. There was no way to change one, so a project rule decided to be
global could only be recreated and the original trashed — losing the id every
record cites, its edit history, its area tags and its relations.
- services.rulebooks.move_rule(rule_id, user_id, topic_id= | project_id=):
exactly one destination (the model's CHECK), owned by the caller, not the
rule's current home. A topic already holding a live rule with the same title
is refused with a message naming that rule, instead of uq_rule_per_topic
failing the commit. Someone else's rule reads as not found.
- Deliberately NOT done, and said in the docstring: no version (a version is
what a rule said, milestone 323 decision 4), no duplicate gate (nothing new
enters the corpus), no re-embed (retrieval reads the home at query time).
- Both doors: MCP move_rule, REST POST /api/rules/<id>/move (rule 33).
- UI: RuleHomePicker, one component in the rule editor (a global rule) and a
project's rules tab (a project rule), so the two cannot drift on what a
destination is.
- using-scribe names move_rule under "Where a new rule goes". Plugin
2026.09.15.1626.
Milestone 414 step 3.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com >
Claude-Session: https://claude.ai/code/session_01821k5B3Ysecp9fNYs92Kuy
2026-09-15 12:26:39 -04:00
..
2026-05-27 22:39:50 -04:00
2026-03-08 18:46:54 -04:00
2026-09-14 08:43:04 -04:00
2026-09-11 16:22:17 -04:00
2026-08-23 11:05:42 -04:00
2026-08-21 12:34:28 -04:00
2026-07-31 14:52:06 -04:00
2026-08-08 23:51:01 -04:00
2026-09-14 08:33:56 -04:00
2026-08-21 11:13:17 -04:00
2026-08-03 11:37:20 -04:00
2026-08-21 11:13:17 -04:00
2026-08-07 13:01:45 -04:00
2026-08-31 08:09:09 -04:00
2026-06-03 16:16:44 -04:00
2026-08-21 11:03:48 -04:00
2026-09-02 14:59:41 -04:00
2026-09-14 22:04:38 -04:00
2026-09-14 18:54:49 -04:00
2026-05-27 22:39:50 -04:00
2026-09-15 12:20:57 -04:00
2026-09-14 13:29:34 -04:00
2026-08-28 15:22:50 -04:00
2026-09-02 16:55:22 -04:00
2026-09-11 16:22:17 -04:00
2026-08-21 11:03:48 -04:00
2026-08-31 08:09:09 -04:00
2026-08-21 11:03:48 -04:00
2026-09-14 22:04:38 -04:00
2026-09-15 12:20:57 -04:00
2026-08-21 11:03:48 -04:00
2026-09-14 08:43:04 -04:00
2026-09-14 08:43:04 -04:00
2026-09-10 21:14:29 -04:00
2026-09-15 12:26:39 -04:00
2026-09-15 12:06:34 -04:00
2026-09-15 12:20:57 -04:00
2026-09-11 16:22:17 -04:00
2026-08-29 23:46:15 -04:00
2026-08-23 21:30:21 -04:00
2026-08-21 11:13:17 -04:00
2026-08-27 15:55:04 -04:00
2026-08-28 12:06:43 -04:00
2026-08-21 11:20:36 -04:00
2026-06-03 15:48:35 -04:00
2026-06-03 15:48:35 -04:00
2026-08-24 01:28:07 -04:00
2026-08-17 12:54:58 -04:00
2026-09-14 08:33:56 -04:00
2026-09-14 22:04:38 -04:00
2026-09-15 12:20:57 -04:00
2026-08-30 13:17:52 -04:00
2026-09-15 12:20:57 -04:00
2026-08-21 11:13:17 -04:00
2026-09-15 12:20:57 -04:00
2026-09-14 17:43:16 -04:00
2026-09-15 12:26:39 -04:00
2026-09-15 12:06:34 -04:00
2026-08-30 13:17:52 -04:00
2026-08-26 13:02:09 -04:00
2026-08-21 11:13:17 -04:00
2026-08-27 15:55:04 -04:00
2026-08-21 11:13:17 -04:00
2026-08-21 11:13:17 -04:00
2026-09-15 12:20:57 -04:00
2026-09-02 18:05:00 -04:00
2026-08-21 11:13:17 -04:00
2026-08-23 21:27:27 -04:00
2026-09-02 00:38:50 -04:00
2026-09-02 00:15:45 -04:00
2026-09-10 21:59:23 -04:00
2026-08-06 08:51:21 -04:00
2026-08-30 13:10:04 -04:00
2026-08-28 16:01:28 -04:00
2026-09-14 18:37:13 -04:00
2026-09-14 10:06:45 -04:00
2026-09-11 20:11:43 -04:00
2026-08-21 11:13:17 -04:00
2026-06-03 15:48:35 -04:00
2026-06-14 17:53:24 -04:00
2026-08-21 11:13:17 -04:00
2026-06-03 15:48:35 -04:00
2026-09-15 12:26:39 -04:00
2026-07-28 18:42:29 -04:00
2026-06-13 23:14:54 -04:00
2026-06-03 15:48:35 -04:00
2026-06-03 15:48:35 -04:00
2026-09-04 20:11:42 -04:00
2026-09-11 14:07:32 -04:00
2026-09-11 16:22:17 -04:00
2026-09-15 12:20:57 -04:00
2026-06-03 15:48:35 -04:00
2026-08-28 12:06:43 -04:00
2026-09-15 12:22:31 -04:00
2026-08-26 12:31:18 -04:00
2026-08-27 18:43:45 -04:00
2026-08-21 11:13:17 -04:00
2026-08-21 11:13:17 -04:00
2026-08-21 11:03:48 -04:00
2026-08-19 11:23:22 -04:00
2026-08-28 12:06:43 -04:00
2026-08-21 11:03:48 -04:00
2026-08-28 16:59:41 -04:00
2026-08-21 11:03:48 -04:00
2026-08-28 15:42:12 -04:00
2026-08-08 23:47:34 -04:00
2026-09-14 08:43:04 -04:00
2026-09-15 12:20:57 -04:00
2026-09-14 22:04:38 -04:00
2026-09-14 22:04:38 -04:00
2026-09-14 08:33:56 -04:00
2026-09-14 17:43:16 -04:00
2026-06-10 01:33:58 -04:00
2026-09-14 18:34:46 -04:00
2026-09-09 21:24:32 -04:00
2026-08-26 15:00:49 -04:00
2026-09-02 23:06:40 -04:00
2026-09-15 12:20:57 -04:00
2026-07-28 18:42:29 -04:00
2026-08-21 11:13:17 -04:00
2026-08-26 13:02:09 -04:00
2026-09-15 12:20:57 -04:00
2026-09-09 00:04:33 -04:00
2026-09-11 20:30:06 -04:00
2026-08-23 21:27:27 -04:00
2026-08-21 11:13:17 -04:00
2026-08-21 11:13:17 -04:00
2026-08-16 13:05:00 -04:00
2026-08-09 10:33:11 -04:00
2026-08-23 22:36:04 -04:00
2026-08-21 15:14:34 -04:00
2026-08-21 11:13:17 -04:00
2026-08-28 15:42:12 -04:00
2026-08-21 11:03:48 -04:00
2026-08-21 11:13:17 -04:00
2026-08-21 11:03:48 -04:00
2026-07-30 12:53:57 -04:00
2026-08-21 11:13:17 -04:00
2026-09-11 11:48:14 -04:00
2026-06-03 15:48:35 -04:00
2026-06-03 15:48:35 -04:00
2026-08-29 00:10:43 -04:00
2026-08-31 00:45:22 -04:00
2026-08-21 11:13:17 -04:00
2026-08-21 11:14:44 -04:00
2026-06-03 15:48:35 -04:00
2026-09-02 11:23:43 -04:00
2026-09-11 14:36:18 -04:00