Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
74 commits
Select commit Hold shift + click to select a range
41c0ee8
chore: adopt develop integration branch with release-time version bum…
vircung Jul 24, 2026
a583d55
docs(working-process): spec, plan, and glossary for review-contract s…
vircung Jul 25, 2026
3a10027
feat(working-process): declared-instruction signal with materializati…
vircung Jul 25, 2026
74d6d2a
feat(working-process): finding unit, citation rules, and background d…
vircung Jul 25, 2026
a7c1c90
feat(python-standards): plugin-level rule-none, justify clause, and f…
vircung Jul 25, 2026
bd350ca
feat(python-standards): python-review dispatches the reviewer in the …
vircung Jul 25, 2026
8b02438
feat(salesforce-standards): plugin-level rule-none, justify clause, a…
vircung Jul 25, 2026
64d9943
feat(salesforce-standards): salesforce-review dispatches the reviewer…
vircung Jul 25, 2026
123b675
feat(project-memory): declared-instruction signal in the docs/memory …
vircung Jul 25, 2026
bc19051
chore: mint -dev.10 prerelease versions for contract-sharpening dogfo…
vircung Jul 25, 2026
8f41c7d
docs: align contract-probe and candidate-gap terms and ownership exce…
vircung Jul 25, 2026
e2d1da8
fix(standards): harden review skills and commands after dogfooding ga…
vircung Jul 27, 2026
bdc8838
fix(standards): close the rerun loophole of inheriting a prior report…
vircung Jul 27, 2026
19d2e0e
docs: record dogfooding gate rounds 2-3 and PASSED verdict in the plan
vircung Jul 27, 2026
3b14252
docs: mark contract-sharpening spec and plan as implemented
vircung Jul 27, 2026
99adc88
docs: mark contract-sharpening plan as implemented
vircung Jul 27, 2026
b4d13d9
chore: enable elements-of-style plugin from superpowers-marketplace
vircung Aug 4, 2026
f4e884f
docs: add design-personas spec, plan, glossary entries, and persona-i…
vircung Jul 30, 2026
f688207
feat(working-process): add shared persona file with consultation cont…
vircung Jul 30, 2026
fe84d30
docs(rules): widen the non-English trigger-phrase exception to agent …
vircung Jul 30, 2026
42ea383
feat(working-process): add architect-consult and system-designer-cons…
vircung Jul 30, 2026
cfc2d19
feat(working-process): add system-designer-session skill
vircung Jul 30, 2026
21d3585
feat(working-process): tighten architect surfaces for consultation ar…
vircung Jul 30, 2026
c576dc1
feat(working-process): source plan-adversary standing duties from the…
vircung Jul 30, 2026
2ff3c2f
feat(working-process): add consultation consent offer to the workflow…
vircung Jul 30, 2026
81ecb22
docs(rules): add *-consult naming category and widen the dev prerelea…
vircung Jul 31, 2026
772b0e3
feat(working-process): sync plugin identity and set dogfooding versio…
vircung Jul 31, 2026
b6953b3
style(working-process): fix list punctuation and rewrap persona prose
vircung Jul 31, 2026
5b5d0f3
fix(working-process): resolve domain artifacts from the repo root acr…
vircung Aug 4, 2026
745d0e1
fix(working-process): re-ask consultation consent when compaction obs…
vircung Aug 4, 2026
26a61be
docs: record the repo-root resolution amendment in the design-persona…
vircung Aug 4, 2026
ecee60f
chore(working-process): bump dogfooding discriminator after post-cons…
vircung Aug 4, 2026
6657da2
refactor(working-process): trim consult descriptions and move dispatc…
vircung Aug 4, 2026
8f33d3e
docs: record the dispatcher-duties amendment and bump the dogfooding …
vircung Aug 4, 2026
667d6f6
refactor(working-process): drop Polish trigger phrases across all sur…
vircung Aug 4, 2026
c7cb020
docs(rules): repoint the non-English trigger precedent at project-memory
vircung Aug 4, 2026
aabc503
docs: record the English-only trigger amendment and bump the dogfoodi…
vircung Aug 4, 2026
92315b4
chore: drop the skill-creator plugin from project settings
vircung Aug 5, 2026
dfe69a8
docs: mark the design-personas spec and plan implemented
vircung Aug 5, 2026
66a319a
chore: mint release versions - working-process 0.12.0, standards 0.3.…
vircung Aug 5, 2026
2c86ef9
chore: reconcile develop with the rebase-merged 0.12.0 release
vircung Aug 5, 2026
6b51829
docs: spec, plan and ADR for the project-memory entry format
vircung Aug 11, 2026
116571b
docs: add the Auto-memory term and rewrite Home-dir memory
vircung Aug 11, 2026
c5707fa
feat(project-memory): require a description and derive the index line…
vircung Aug 11, 2026
477d386
feat(project-memory): audit description, index projection and foreign…
vircung Aug 11, 2026
c9a3de4
feat(project-memory): move entries without translating frontmatter, a…
vircung Aug 11, 2026
604244a
docs(project-memory): document the entry description and the derived …
vircung Aug 11, 2026
3a0f77d
chore(project-memory): dogfood the entry format on a dev version
vircung Aug 11, 2026
1b79cfb
docs: mark the entry-format spec and plan implemented
vircung Aug 11, 2026
c685e54
fix(project-memory): state the audit's real inputs and project the mi…
vircung Aug 11, 2026
5ce054b
fix(project-memory): count title drift on pre-format entries as forma…
vircung Aug 11, 2026
81053ff
fix(working-process): point the store probe at the part directories
vircung Aug 11, 2026
17d7c76
fix: point both standards store-probe restatements at the part direct…
vircung Aug 11, 2026
eacdba8
fix(working-process): delegate the registry-file list to the project-…
vircung Aug 11, 2026
436ba92
docs: spec, plan and glossary for the store-probe decoupling
vircung Aug 11, 2026
3fba5bb
feat(project-memory): rename the index to MEMORY.md and watch the red…
vircung Aug 12, 2026
52aff17
feat(project-memory): MEMORY.md conventions - budget, old-name offer,…
vircung Aug 12, 2026
9309596
fix(project-memory): declined rename offer leaves the old index readable
vircung Aug 12, 2026
a068221
feat(project-memory): review-session audits MEMORY.md and re-sections…
vircung Aug 12, 2026
c6ecba1
feat(project-memory): migrate-memory path-qualifies stores and detect…
vircung Aug 12, 2026
6115f98
feat(project-memory): redirect-memory skill - the Hybrid store opt-in…
vircung Aug 12, 2026
8894b16
docs(project-memory): README, Hybrid store section, and identity surf…
vircung Aug 12, 2026
89f0240
docs: ADR 0003 and glossary for the Hybrid store
vircung Aug 12, 2026
98d169f
chore(project-memory): dogfood version for the memory-hybrid topic
vircung Aug 12, 2026
f5709ba
docs: spec and plan for the memory hybrid
vircung Aug 12, 2026
988b46c
docs: drop the stale degradation bullet from the hybrid spec
vircung Aug 12, 2026
7a29bdf
chore: elements-of-style rule for repo prose
vircung Aug 12, 2026
a5b7ab8
docs: link plugin READMEs from the plugin table
vircung Aug 12, 2026
9aabaf5
feat(working-process): route docs prose through elements-of-style whe…
vircung Aug 12, 2026
46544b0
feat(project-memory): route entry prose through elements-of-style whe…
vircung Aug 12, 2026
e2bd375
feat(project-memory): first-class walk scoping in memory-review-session
vircung Aug 12, 2026
21213a1
feat(working-process): offer a memory review when a document reaches …
vircung Aug 12, 2026
713c67d
feat(working-process): commit suggestion only at the implementation-r…
vircung Aug 12, 2026
1d4258b
chore: mint release versions - working-process 0.13.0, project-memory…
vircung Aug 12, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion .claude-plugin/marketplace.json
Original file line number Diff line number Diff line change
Expand Up @@ -22,7 +22,7 @@
{
"name": "project-memory",
"source": "./plugins/project-memory",
"description": "In-repo project memory: committed Team memory and git-ignored per-user Private memory, with grooming (memory-review-session) and migration (migrate-memory) skills, shipped as a Rules payload"
"description": "In-repo project memory: committed Team memory and git-ignored per-user Private memory, with grooming (memory-review-session), migration (migrate-memory), and the Auto-memory redirect (redirect-memory) skills, shipped as a Rules payload"
}
]
}
17 changes: 17 additions & 0 deletions .claude/rules/elements-of-style.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,17 @@
# Elements-of-style pass on prose

Every committed Markdown file in this repo is prose for humans — `docs/`
artifacts (specs, plans, ADRs, the glossary), plugin content (rules,
skills, READMEs), and the repo's own README and rules — and gets an
elements-of-style pass:

- **Writing a new document**: when the
`elements-of-style:writing-clearly-and-concisely` skill is available,
invoke it BEFORE drafting — never write "from memory of the rules".
- **Editing an existing document**: run an explicit editing pass with
that skill's full rules over the changed prose.
- Without the plugin the rule stays silent: no substitute pass, and the
edit proceeds normally.

The pass binds wording, never decisions — it changes how sentences carry
a document's content, not what the document decides.
12 changes: 6 additions & 6 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -14,12 +14,12 @@ Marketplace of [Claude Code](https://code.claude.com) plugins by Missing Bits.

## Plugins

| Plugin | Description |
|--------|-------------|
| `working-process` | Spec-driven working process: grilling-session, architect-session, system-designer-session and sync-rules skills, architect and plan-adversary review agents, two verdict-free consultation agents, distributed process rules |
| `python-standards` | Python coding standards for uv + ruff + pytest + pyright: area skills, code-review stack, plan-review checklist, distributed toolchain rule |
| `salesforce-standards` | Salesforce coding standards for the sf CLI toolchain: area skills (Apex, LWC, Flow, data/security model, legacy UI), code-review stack, plan-review checklist, distributed toolchain rule |
| `project-memory` | In-repo project memory: committed Team memory (`docs/memory/`) and per-user Private memory (`.claude/memory/`), with `memory-review-session` and `migrate-memory` skills, distributed as a Rules payload |
| Plugin | Docs | Description |
|--------|------|-------------|
| `working-process` | [README](plugins/working-process/README.md) | Spec-driven working process: grilling-session, architect-session, system-designer-session and sync-rules skills, architect and plan-adversary review agents, two verdict-free consultation agents, distributed process rules |
| `python-standards` | [README](plugins/python-standards/README.md) | Python coding standards for uv + ruff + pytest + pyright: area skills, code-review stack, plan-review checklist, distributed toolchain rule |
| `salesforce-standards` | [README](plugins/salesforce-standards/README.md) | Salesforce coding standards for the sf CLI toolchain: area skills (Apex, LWC, Flow, data/security model, legacy UI), code-review stack, plan-review checklist, distributed toolchain rule |
| `project-memory` | [README](plugins/project-memory/README.md) | In-repo project memory: committed Team memory (`docs/memory/`) and per-user Private memory (`.claude/memory/`), with `memory-review-session`, `migrate-memory`, and `redirect-memory` skills, distributed as a Rules payload |

## License

Expand Down
25 changes: 25 additions & 0 deletions docs/domain/adr/0002-own-entry-format.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
ticket: none
---

# Project memory defines its own entry format

Auto-memory keeps entries in a shape — `name`, `description`,
`metadata.type` with a four-value taxonomy — that the platform never
documents; the published contract for entry bodies is "any markdown", and the
surrounding surface moved four times inside one minor line. Project memory
therefore converges on that shape without adopting it: the plugin's rules
define every field on the plugin's own terms and adopt only fields that earn
their place there, so a field like `description` is kept because it gives the
index line a source, not because Auto-memory writes one. The asymmetry decides
it — the store holds durable, versioned, team-shared data in git, while the
format is a moving internal detail of a self-updating tool, and binding the
first to the second would pay for interoperability with other people's
repositories.

The consequence is that compatibility is textual rather than contractual: a
tolerance clause keeps unknown frontmatter keys intact so both writers can
share a file, and nothing in the rules calls Auto-memory the source of the
format. Making the store double as the Auto-memory directory would reverse
this decision, so that later choice has to face it deliberately instead of
sliding past it.
25 changes: 25 additions & 0 deletions docs/domain/adr/0003-hybrid-store-adoption.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
---
ticket: none
---

# Private memory may double as the Auto-memory directory, opt-in

ADR 0002 closed with: "Making the store double as the Auto-memory
directory would reverse this decision, so that later choice has to face
it deliberately instead of sliding past it." This record is that choice,
faced. The hybrid adopts exactly two platform-owned identities — the
directory (`autoMemoryDirectory` may point at `.claude/memory/`) and the
index filename (`MEMORY.md`, the only name Auto-memory loads, adopted
globally so the format has no mode variants) — because in a Hybrid store
both pass ADR 0002's own test: they earn their place as the only way the
harness reads the store at all.

Everything else stands. The plugin defines its own entry format,
converges on Auto-memory's without adopting it, and keeps the tolerance
clause for keys the harness writes; an entry Auto-memory writes into a
Hybrid store is an ordinary note whose missing H1 is format debt. The
adoption is opt-in per developer and per Environment, carried by one key
in `.claude/settings.local.json` written and removed by the
redirect-memory skill; declining it leaves the store purely rule-driven.
ADR 0002 remains in force for the format — this record narrows it only
at the directory-and-name boundary.
51 changes: 45 additions & 6 deletions docs/domain/glossary.md
Original file line number Diff line number Diff line change
Expand Up @@ -45,6 +45,16 @@ wins, mirroring the Rules engine's project-over-user conflict rule. Part
of the review-reports contract: the paths may not drift independently.
_Avoid_: discovery, probe (unqualified)

**Store probe**:
The existence check a plugin other than project-memory runs to decide
whether the reviewed project keeps a Project-memory part: one test per
part, on the part's directory (`docs/memory/`, `.claude/memory/`) — never
on a file inside it. Three surfaces run it (the review-reports
Candidate-gap park offer and the two standards code-review restatements).
Distinct from the Contract probe, which finds the installed report
contract; the unqualified word stays banned there.
_Avoid_: index check, store check

**Review report**:
The single persistent document one code-review run writes under
`docs/code-review/` of the reviewed project — one run, one report,
Expand Down Expand Up @@ -286,12 +296,41 @@ asked, and NOT a Process directory — a per-user store under the `.claude/`
config namespace, governed by the Project-memory rule.
_Avoid_: local memory

**Auto-memory**:
The harness's own memory mechanism — the notes Claude Code writes for itself,
their `MEMORY.md` index and its load budget, and the `autoMemoryDirectory` /
`autoMemoryEnabled` settings that place and disable it. The mechanism, never a
store: the store it manages by default is Home-dir memory. Project memory
borrows none of its machinery — even a Hybrid store only points the harness
at the plugin's directory.
_Avoid_: native memory, auto memory (unhyphenated)

**Home-dir memory**:
The built-in Claude Code memory at `~/.claude/…/memory/`, auto-loaded by the
harness. The store the Project-memory rule redirects project-scoped writes
away from; it keeps cross-project and personal facts.
The store Auto-memory manages when no redirect points it elsewhere — one
per checkout path and per Environment, kept by default under
`~/.claude/projects/<project>/memory/`; a default, not a definition, since
`autoMemoryDirectory` may place it anywhere. The store the Project-memory
rule redirects project-scoped writes away from; it keeps cross-project and
personal facts.
_Avoid_: native memory

**Hybrid store**:
The Private memory store that is the current session's Auto-memory
directory — the opt-in redirect (`autoMemoryDirectory` pointing at
`.claude/memory/`) honored in that session and landing on the store. A property of the
session, never of the checkout: the same store may be hybrid in one
environment and plain in another. Team memory is never one — Auto-memory's
team mounts are server-backed, so a repo directory cannot join.
_Avoid_: hybrid memory, hybrid mode

**Environment**:
One filesystem view a session runs in — its own path namespace, settings
home (`~/.claude`), and trust record: the host, a dev container, a WSL
distro. The unit the redirect activates per, and the unit each Home-dir
memory store belongs to; one checkout may be visible from several
environments through different absolute paths.
_Avoid_: machine (where the path namespace is what matters)

**Idea entry**:
A Project-memory entry with the idea shape: an `idea-` filename prefix and
lifecycle frontmatter (`status` parked → spec'd | dropped, a `spec:` pointer,
Expand All @@ -303,18 +342,18 @@ _Avoid_: backlog item
**Archive**:
The closed-entry record of a Project-memory part — `ARCHIVE.md`, holding one
line per closed entry in a **Done** or **Dropped** section, read on demand and
never at session start. Distinct from a live entry (listed in `INDEX.md`): a
never at session start. Distinct from a live entry (listed in `MEMORY.md`): a
closed entry keeps no body, only its archive line.
_Avoid_: archive folder, backlog

**Live entry**:
A Project-memory entry currently listed in `INDEX.md` — an active note or a
A Project-memory entry currently listed in `MEMORY.md` — an active note or a
`parked` idea. The only entries reachable at session start (via the index).
Opposite of an archived (closed) entry.
_Avoid_: active entry, open entry

**Close (an entry)**:
Move an entry out of `INDEX.md` when it reaches a terminal state — Done (its
Move an entry out of `MEMORY.md` when it reaches a terminal state — Done (its
content now lives in a spec, ADR, glossary, or another artifact) or Dropped
(abandoned) — leaving a one-line Archive record. Deleting an obsolete entry is
NOT a close: it leaves no Archive line.
Expand Down
Loading
Loading