rename(547): what people read says Grimoire
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 12s
CI & Build / TypeScript typecheck (push) Successful in 52s
CI & Build / integration (push) Successful in 1m1s
CI & Build / Python tests (push) Successful in 1m55s
CI & Build / Build & push image (push) Successful in 36s
CI & Build / Python lint (push) Successful in 3s
CI & Build / Plugin hooks (push) Successful in 12s
CI & Build / TypeScript typecheck (push) Successful in 52s
CI & Build / integration (push) Successful in 1m1s
CI & Build / Python tests (push) Successful in 1m55s
CI & Build / Build & push image (push) Successful in 36s
Step 1 of the Scribe -> Grimoire rename: every capitalised "Scribe" in prose
becomes "Grimoire" ("Fabled Scribe" -> "Fabled Grimoire") across the UI,
the PWA manifest and page title, the MCP instructions and tool docstrings,
hook and skill text, docs and README, with the tests that assert on that
prose moving with it. Old migrations keep their wording.
Identifiers are untouched here: the package, plugin name, MCP server key,
hook file names, env vars, the .scribe marker and FabledScribe repo/image
names move in steps 2 and 3, along with prose that quotes them.
The sweep matched "Scribe" only as a whole word, so describe/subscribe and
friends are untouched. The longer name took the MCP instructions one
character over their 1,600 budget; two phrases are shortened to fit.
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
@@ -39,7 +39,7 @@ router.afterEach(() => {
|
||||
<!-- Left: brand -->
|
||||
<router-link to="/" class="nav-brand">
|
||||
<AppLogo :size="34" />
|
||||
<span class="brand-text">Scribe</span>
|
||||
<span class="brand-text">Grimoire</span>
|
||||
</router-link>
|
||||
|
||||
<!-- Center: primary navigation (desktop) -->
|
||||
|
||||
@@ -189,7 +189,7 @@ async function backUpNow() {
|
||||
<p class="intro">
|
||||
Each run adds one dated file, <code>scribe-<date>.tar</code>, holding every table
|
||||
as plain lines. It is not compressed, so a deduplicating tool such as restic stores only what
|
||||
changed since the day before. Scribe never deletes old backups — the destination keeps and
|
||||
changed since the day before. Grimoire never deletes old backups — the destination keeps and
|
||||
thins the history. Sharing, API keys and forge connections are not included.
|
||||
</p>
|
||||
|
||||
@@ -223,7 +223,7 @@ async function backUpNow() {
|
||||
<span>Folder</span>
|
||||
<input v-model.trim="form.folder_path" class="fs-input" placeholder="/backups" />
|
||||
<span class="field-hint">
|
||||
A path inside the Scribe container — usually a share mounted there that a backup
|
||||
A path inside the Grimoire container — usually a share mounted there that a backup
|
||||
service watches.
|
||||
</span>
|
||||
</label>
|
||||
|
||||
@@ -153,7 +153,7 @@ onMounted(() => store.load(true));
|
||||
v-for="a in actionsFor(m.name)"
|
||||
:key="`${a.via}:${a.tool}:${a.match}`"
|
||||
:class="['action-chip', { 'is-install': a.via === 'install' }]"
|
||||
:title="a.via === 'install' ? 'Added on this install' : 'Ships with Scribe'"
|
||||
:title="a.via === 'install' ? 'Added on this install' : 'Ships with Grimoire'"
|
||||
>
|
||||
<code>{{ actionLabel(a) }}</code>
|
||||
<button
|
||||
|
||||
@@ -15,7 +15,7 @@
|
||||
* someone changes the shared value and half the components don't move.
|
||||
*
|
||||
* SCOPE, and it is a limit rather than an omission: this reads RECORDED code —
|
||||
* snippets — because that is the code Scribe holds. A repository's own sources
|
||||
* snippets — because that is the code Grimoire holds. A repository's own sources
|
||||
* are checked where they live, by that project's CI.
|
||||
*/
|
||||
import { onMounted, ref, watch } from "vue";
|
||||
|
||||
@@ -49,7 +49,7 @@ const label = (s: string) => LABELS[s] ?? s;
|
||||
Measured worst-case over raised and hover in both modes: active 4.82:1,
|
||||
paused 4.63:1, completed 4.78:1, archived 4.84:1.
|
||||
No new design tokens: four values used by one component are the kind of
|
||||
growth Scribe's own design-system note warns about ("if this system grows
|
||||
growth Grimoire's own design-system note warns about ("if this system grows
|
||||
past a handful of tokens, that is worth noticing rather than
|
||||
accommodating"). The derivation is stated once, here. */
|
||||
.project-status--active {
|
||||
|
||||
@@ -6,7 +6,7 @@ import type { RulePreset } from "@/api/rulebooks";
|
||||
import RuleEditorSlideOver from "@/components/rules/RuleEditorSlideOver.vue";
|
||||
|
||||
/**
|
||||
* The reply shapes Scribe ships, and the operator's adjustments to each
|
||||
* The reply shapes Grimoire ships, and the operator's adjustments to each
|
||||
* A shape is product, so its text is read-only here;
|
||||
* what the operator owns is the preferences mounted on the shape's moment,
|
||||
* which arrive beside it and win where they differ. "Adjust this" opens the
|
||||
@@ -39,7 +39,7 @@ const delivered = computed(() =>
|
||||
const verdict = computed(() => {
|
||||
if (!data.value) return "";
|
||||
const n = shapes.value.length;
|
||||
const parts = [`${n} ${n === 1 ? "shape ships" : "shapes ship"} with Scribe`];
|
||||
const parts = [`${n} ${n === 1 ? "shape ships" : "shapes ship"} with Grimoire`];
|
||||
parts.push(adjusted.value
|
||||
? `${adjusted.value} adjusted by your preferences`
|
||||
: "none adjusted — the defaults stand");
|
||||
@@ -126,7 +126,7 @@ onMounted(load);
|
||||
</button>
|
||||
|
||||
<div v-if="open === s.key" :id="`shape-${s.key}`" class="shape-body">
|
||||
<h4 class="body-label">Ships with Scribe · at <code>{{ s.moment }}</code></h4>
|
||||
<h4 class="body-label">Ships with Grimoire · at <code>{{ s.moment }}</code></h4>
|
||||
<div class="shape-text">{{ s.text }}</div>
|
||||
|
||||
<h4 class="body-label">Your adjustments</h4>
|
||||
|
||||
@@ -1,6 +1,6 @@
|
||||
<script setup lang="ts">
|
||||
/**
|
||||
* What Scribe has changed about how it works with you.
|
||||
* What Grimoire has changed about how it works with you.
|
||||
*
|
||||
* THE RISK THIS EXISTS FOR. A preference is the one record
|
||||
* kind the agent rewrites on its own, mid-work, without asking — which is
|
||||
@@ -78,7 +78,7 @@ onMounted(() => store.fetchDrift());
|
||||
<header>
|
||||
<h2>Recent changes</h2>
|
||||
<p class="sweep-lede">
|
||||
Preferences Scribe rewrote while working, most recently changed first. A
|
||||
Preferences Grimoire rewrote while working, most recently changed first. A
|
||||
preference is how you want work done, so sessions keep it current
|
||||
without asking — this is where you see what they decided. Rules are not
|
||||
here: those change when you change them.
|
||||
|
||||
@@ -261,7 +261,7 @@ watch(() => props.ruleId, load);
|
||||
<input v-model="kind" type="radio" value="preference" />
|
||||
<span>
|
||||
<strong>Preference</strong> — how you want work done. Ignoring it
|
||||
costs consistency, not correctness, and <em>Scribe updates it as
|
||||
costs consistency, not correctness, and <em>Grimoire updates it as
|
||||
the work teaches it</em>.
|
||||
</span>
|
||||
</label>
|
||||
|
||||
@@ -25,7 +25,7 @@ const emit = defineEmits<{
|
||||
<span
|
||||
v-if="r.kind === 'preference'"
|
||||
class="rule-chip rule-chip-preference"
|
||||
title="How you want work done. It does not bind, and Scribe updates it as the work teaches it."
|
||||
title="How you want work done. It does not bind, and Grimoire updates it as the work teaches it."
|
||||
>preference</span>
|
||||
<!-- Marked only when something is WRONG: every rule arrives by
|
||||
retrieval now, so "conditional" stopped distinguishing anything.
|
||||
|
||||
Reference in New Issue
Block a user