v0.7.1 — Personalization hardening
vibe-council v0.7.1 — Personalization hardening
Ready for the v0.7.1 tag — not yet tagged. The version bump (
backend/__init__.py,
pyproject.toml,uv.lock) and the datedCHANGELOG.mdsection are done
(chore: prepare v0.7.1 release); the repo now reports0.7.1. The git tag and the GitHub
Release are still a separate, manual step — see §"Final release checklist" below and
docs/release-checklist.md.
The personalization hardening release. It hardens the v0.7.0 safe-personalization scaffold —
it does not expand it. Everything added is advisory, read-only, local, and tighten-only;
personalization still can never loosen a security/safety/no-stage/trust rule, and there is still no
preference store, no preference parser/application, no vector DB/database, and no hosted stack. No
model/provider/network call, no Workbench trust-boundary change, no /council command (vibe is the
real CLI), no new dependency. Based on and crediting
karpathy/llm-council.
No commercial-clearance claim. License/provenance remains an unresolved "Question 0"
commercial gate; noLICENSEis added.
What this release adds
v0.7.1 hardening architecture plan (Fable planning-only pass)
docs/fable/v0.7.1-hardening-architecture-plan.md
— a docs-only Fable architecture pass (planning only; Fable implemented nothing) that scoped the
phase as hardening, not feature expansion. It was balanced-council-reviewed ("this plan
should be executed"), grounded against the real code, and broke the work into a small 4-PR sequence
with explicit non-goals, a risk analysis, copy-paste Opus/Sonnet prompts, and a Fable stop rule.
Local-profile redaction hardening (PR 1)
vibe lint --redactiongains alocal-profile-pathWARNING rule that flags a concrete
local/private profile filename —.council/profile.(json|md|toml|yaml|yml)— when it appears in a
tracked public doc. The glob form.council/profile.*is intentionally not matched (operational/
policy text uses the glob; the rule targets concrete leaks only).- Public committed scaffold files (
docs/context/project/PROFILE.md/PREFERENCES.md/
AGENT-ROLES.md) are allowed — they are never flagged for existing. - It is advisory (WARNING, blocks only under
--strict), following theprivate-plan-filename
precedent, with a documented WARNING → CRITICAL promotion path for when a real local profile
store ships. Expected redaction result: 0 critical, 30 warnings (the extra warnings are the
enumerated design/plan-doc references, pinned by tests).
Project doctor profile consistency polish (PR 2)
vibe project doctor's advisory "Personalization scaffold" section now differentiates the
all-present / none-present / partial states: all present → an OK summary; none → a "scaffold is
missing" warn; partial → a "scaffold is incomplete" warn that lists the missing file(s).- A missing/partial scaffold WARNs — it does not fail. READY/NOT-READY still depends solely on
required vault/core docs + the dangerous-staged check. - The root-
AGENTS.mdadvisory is state-aware and reiterates that rootAGENTS.mdis not the
canonical preference source (never advises removing it — it is legitimate guide output). - A staged
.council/profile.*still FAILs through the existing dangerous.council/staged-file
check (now pinned by a test).
Export / guide invariant tests (PR 3)
- The context-export and guide "Project profile & preferences" sections are locked by tests as:
size-bounded (no full profile/vault content inlined), never reading.council/profile.*,
gracefully degrading if the scaffold is missing (the export section is byte-identical
with/without it; the guide reads no filesystem at all), and deterministic (no timestamp). - A wording invariant pins that the guide keeps "advice to read, not commands" and "never
loosen" and never implies a preference can override/relax/bypass a safety rule. - A vault-consistency check pins that the scaffold/vault files agree on the shared invariants, and
a context-pack no-ingest check pins that the pack still does not ingest the full vault and
stays 21/21.
Safety posture — hardening only, unchanged trust boundary
- No profile storage implementation and no preference parsing/application — personalization is
still advisory documentation + pointers. - No Workbench trust-boundary change, no auto-execution, no command-allowlist expansion.
- No model/provider/API/network call from anything in this release.
/councilis not a real command —viberemains the real CLI.- No dependency changes (the only
uv.lockchange is thevibe-councilself-version line).
Redaction lint stays 0 critical (30 warnings, explained);context checkand MCP health stay
21/21.
Explicit non-goals (deferred, not started in this release)
No local .council/profile.* store yet · no preference parser / application engine · no
guide/context-export preference application · no vector DB · no database stack · no hosted / SaaS · no
project init / interactive launcher / vibe council start. v0.7.1 hardens the existing advisory
surface; it adds no runtime.
Release checklist (must be clean before tagging)
-
uv run python -m unittest discover -s tests -t .is green (811 tests). -
uv run python -m backend.cli --versionprintsvibe-council 0.7.1. -
vibe lint --redactionreports 0 critical (30 warnings, expected). -
vibe decisions lintpasses. -
vibe project doctorreports READY. -
vibe context checkscores 21/21. -
vibe mcp inspect --context --healthscores 21/21. -
uv syncproduces nouv.lockdiff beyond the intentional self-version sync in this PR. - No
.council/artifact (including.council/runtime/payloads/and.council/profile.*)
staged/committed; no rootAGENTS.md; no private/local plan file staged.
Final release checklist (manual steps, after this PR merges)
These are not automated by this PR — a maintainer performs them once the checklist above is clean
on master:
- Merge this PR (
chore: prepare v0.7.1 release) intomaster. - On the merged
master, re-confirm: tests green,vibe --versionreportsvibe-council 0.7.1,
redaction lint 0 critical (30 warnings), decisions lint passes,vibe project doctorREADY,
context check21/21, MCP health 21/21, anduv syncshows no drift. - Verify
git status --shortand the merged diff carry no private/local artifacts
(.council/,.council/profile.*, the two untracked private plan files,.env/.venv//data/,
secrets, generated packs/exports, rootAGENTS.md). - Create an annotated git tag:
git tag -a v0.7.1 -m "vibe-council v0.7.1"on the merge
commit, thengit push origin v0.7.1. - Create the GitHub Release for
v0.7.1manually, using this document
(docs/releases/v0.7.1.md) as the release-notes body.
Known limitations
- Personalization is still advisory/documentation — nothing reads, parses, or enforces the
profile/preferences; v0.7.1 only hardens the guardrails around them. - No local
.council/profile.*store yet — the redaction rule's CRITICAL promotion is staged for
when such a store ships. - Intentionally local-only — the Workbench binds
127.0.0.1; agent intake is file/CLI only. - No hosted/team/mobile/voice yet — deferred to later phases.
Next after v0.7.1
Cut the v0.7.1 tag/GitHub Release, then scope the next slice per
docs/fable/v0.7-personalization-and-project-profile-plan.md
and docs/fable/04-roadmap.md: remaining personalization work (a local
.council/profile.* store and a preference reader/applier — all still tighten-only), with
mobile/LAN/voice (v0.8) and hosted/team (v0.9+) deferred behind the local core.