Skip to content

v1.3.0 — Framework hardening: security, data integrity, smarter wiki dead-letter

Latest

Choose a tag to compare

@walm00 walm00 released this 07 May 07:50
af7ed8c

CLEAR Context OS v1.3.0

Hardening release: closing a security gap, fixing a class of silent data loss in the self-learning ladder, surfacing wiki ingest failures that used to disappear into the void, and finishing the onboarding flow so new installs actually end with a working dispatcher.

Highlights

🔐 Security fix (Stop hook). The auto_save_session hook used to interpolate transcript content into a Python -c string — a malformed transcript or a path with shell metacharacters could break the hook (or worse, execute arbitrary Python in the user's shell). Hook input now flows through stdin / env vars; never interpolated into source. Affects every assistant turn — you'll want this one.

🗃️ Self-learning ladder no longer loses data on multi-machine workflows. resolutions.jsonl, learned-rules.json, learning-blocklist.json, and state.json are now gitignored and seeded fresh by install.sh. Tracking these append-only event logs in git was producing silent merge-conflict-driven data loss that skewed the auditor's reversal-rate thresholds. New corruption-counter helper surfaces dropped malformed JSONL lines as findings instead of silently shrinking the auditor's denominator.

📐 Central schema-version registry. One source of truth for derived-artifact versions (_schema_versions.py) replaces five different per-script policies. Future framework upgrades become diagnosable rather than mysteriously broken.

🆕 New maintenance job: wiki-failed-ingest. Dead-letter scan for three failure modes the wiki pipeline used to hide: stuck queue.md URLs (default >14 days), source-summary files missing provenance.source, and wiki drafts with malformed/missing YAML frontmatter. Mechanical-only — no auto-fix, every issue carries editorial judgement. Cheap to run daily.

🚀 Onboarding actually finishes. Step 6 now verifies the OS-level scheduled task exists via list_scheduled_tasks before declaring success, and offers cadence tuning via schedule-tune before close-out. Closes a gap where users could complete onboarding and never get a working bcos-{project} dispatcher.

🧭 context-ingest is now the single front door. Auto-dispatches URLs to /wiki run, transcripts to context-mine, loose notes stay in ingest. Removes the ambiguity where three skills used to match the same trigger and whichever pattern-matched first won.

📐 Authority hierarchy correctly leads with _collections/. When a signed contract says one thing and a canonical doc summary says another, the contract IS the truth. CLAUDE.md authority hierarchy now reflects that — _collections/ external-evidence outranks canonical.

⚡ Dispatcher reliability.

  • Single-walk index orchestration: jobs share one cached context-index.json per dispatcher run instead of N tree walks.
  • New auto_commit_branches allowlist (default: main/master/dev/develop) prevents daily-digest commits from polluting feature-branch PRs.
  • Daily-default template: every job starts at daily cadence; the auto-tuner suggests reductions after 5 green runs (was 3). Aggressive monitoring on day one, sane steady-state by week two.

🪪 Lifecycle routing fix. The research-dump rule used to encode the wrong wiki destination bucket. Now delegates to /wiki promote so bcos-wiki picks pages/ vs source-summary/ based on doc shape — sweep just routes.

📖 Install UX. README now leads with "Install BCOS from this URL" — paste into Claude Code and let it pick the right install path for your platform. The curl | bash one-liner stays as a manual fallback.

New: wiki-failed-ingest job

Field Value
Default cadence daily (cheap mechanical scan)
Auto-fix authority none — every finding requires editorial judgement
Surfaces stuck queue items, missing provenance.source, schema violations in wiki drafts
Reference doc .claude/skills/schedule-dispatcher/references/job-wiki-failed-ingest.md

Breaking-ish change (data-shape)

Self-learning event-log files are now gitignored. If you had local commits that included resolutions.jsonl, learned-rules.json, learning-blocklist.json, or .claude/quality/ecosystem/state.json, those files stay on your disk but no longer track in git. Run update.py and the seed-if-missing path will create empty defaults for any that are absent. Your accumulated learning history is preserved locally; only the git tracking changes.

No user content is touched. No data migrates anywhere.

Upgrade

Existing installs

cd /path/to/your/bcos-enabled/repo
python .claude/scripts/update.py

update.py will pull the new template, seed defaults for the four newly-gitignored files if absent, and offer to merge the new wiki-failed-ingest job into your live schedule-config.json. Your custom skills, agents, and existing schedule are preserved.

New installs
bash <(curl -fsSL https://raw.githubusercontent.com/walm00/business-context-os/main/install.sh)
Or — easier — open Claude Code and paste:

"Install BCOS from https://github.com/walm00/business-context-os and walk me through onboarding."

Claude detects your platform and runs the right install path. Step 6 creates the dispatcher automatically; verifies it actually exists before declaring success.