Skip to content

v0.7.1 — Personalization hardening

Choose a tag to compare

@EfeAydinalp EfeAydinalp released this 06 Jul 14:49
· 46 commits to master since this release
31f8475

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 dated CHANGELOG.md section are done
(chore: prepare v0.7.1 release); the repo now reports 0.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; no LICENSE is 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 --redaction gains a local-profile-path WARNING 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 the private-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.md advisory is state-aware and reiterates that root AGENTS.md is 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.
  • /council is not a real commandvibe remains the real CLI.
  • No dependency changes (the only uv.lock change is the vibe-council self-version line).
    Redaction lint stays 0 critical (30 warnings, explained); context check and 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 --version prints vibe-council 0.7.1.
  • vibe lint --redaction reports 0 critical (30 warnings, expected).
  • vibe decisions lint passes.
  • vibe project doctor reports READY.
  • vibe context check scores 21/21.
  • vibe mcp inspect --context --health scores 21/21.
  • uv sync produces no uv.lock diff beyond the intentional self-version sync in this PR.
  • No .council/ artifact (including .council/runtime/payloads/ and .council/profile.*)
    staged/committed; no root AGENTS.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) into master.
  • On the merged master, re-confirm: tests green, vibe --version reports vibe-council 0.7.1,
    redaction lint 0 critical (30 warnings), decisions lint passes, vibe project doctor READY,
    context check 21/21, MCP health 21/21, and uv sync shows no drift.
  • Verify git status --short and the merged diff carry no private/local artifacts
    (.council/, .council/profile.*, the two untracked private plan files, .env/.venv//data/,
    secrets, generated packs/exports, root AGENTS.md).
  • Create an annotated git tag: git tag -a v0.7.1 -m "vibe-council v0.7.1" on the merge
    commit, then git push origin v0.7.1.
  • Create the GitHub Release for v0.7.1 manually, 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.