Skip to content

feat: OSS-readiness — license, de-personalization, CI, community files#2

Merged
Catafal merged 2 commits into
mainfrom
feat/oss-readiness
Jun 10, 2026
Merged

feat: OSS-readiness — license, de-personalization, CI, community files#2
Catafal merged 2 commits into
mainfrom
feat/oss-readiness

Conversation

@Catafal

@Catafal Catafal commented Jun 10, 2026

Copy link
Copy Markdown
Owner

Implements the full OSS-readiness PRD. Closes #1.

What's in here

Legal/identity (blockers)

  • MIT LICENSE; PEP 639 SPDX license + license-files, keywords, classifiers, [project.urls] in pyproject
  • user_name config field (default "the user") — zero hardcoded personal names left in src/; threaded into the Mode 1 prompt builders (kept pure — name enters as a kwarg from the launch flow's existing config load); new bach config set-name; ADR-014
  • Tracked-but-ignored .claude/ files untracked; gitleaks full-history scan clean (21 commits, no rewrite needed)

Contribution infrastructure

  • CI (.github/workflows/gate.yml) runs exactly make gate — no drift between local and CI
  • CONTRIBUTING.md (Bach-specific conventions), CODE_OF_CONDUCT.md, SECURITY.md, bug/feature issue forms, PR template

Docs

  • README rewritten for strangers — macOS + iTerm2 + agent-CLI requirements stated first, copy-pasteable quickstart
  • Planning history (DISCOVERY, PRD, progress.txt, lessons.md, memory/, …) moved to docs/internal/ with an index; CLAUDE.md/AGENTS.md references updated
  • CHANGELOG.md in Keep-a-Changelog format

Hardening from the taste review (all findings fixed)

  • Shared is_valid_user_name bounds (single-line, ≤200 chars) enforced leniently at read, strictly at write — an embedded newline would have silently rewritten the Mode 1 safety rule; verified no injection path through shell_quote/AppleScript/YAML
  • load_config now degrades to defaults on malformed YAML instead of aborting launches
  • event=prompt_built logs the injected name; event=config_write logs the value

Checklist

  • make gate passes locally (537 passed, ruff + mypy clean)
  • Tests added (16: 12 TDD for user_name + 4 from taste review)
  • ADR added (docs/adr/014-oss-depersonalization.md)
  • Docs updated (README, CHANGELOG, docs/internal index, CONTRIBUTING)

Out of scope (per PRD)

PyPI publishing, demo GIF, cross-platform support, the repo visibility flip (manual maintainer action).

Implementation notes: .claude/runs/oss-readiness/implementation-notes.html (local).

🤖 Generated with Claude Code

Catafal and others added 2 commits June 10, 2026 18:02
…s (PRD #1)

- MIT LICENSE; PEP 639 metadata + urls/classifiers/keywords in pyproject
- user_name config field (default "the user"): zero hardcoded personal
  names in src/; threaded into Mode 1 prompts via the pure prompt
  builders; new `bach config set-name`; ADR-014
- hardening from taste review: shared is_valid_user_name bounds
  (single line, <=200 chars) on read+write paths; load_config now
  degrades to defaults on malformed YAML instead of aborting launches;
  prompt_built/config_write logs carry the values
- CI: .github/workflows/gate.yml runs exactly `make gate`; issue forms,
  PR template, CONTRIBUTING, CODE_OF_CONDUCT, SECURITY
- README rewritten for newcomers (macOS/iTerm requirement up front);
  CHANGELOG.md (Keep-a-Changelog)
- internal planning docs moved to docs/internal/ with index; CLAUDE.md/
  AGENTS.md references updated; tracked .claude/ files untracked
- gitleaks full-history scan: clean (21 commits)

Closes #1

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
…it imports

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
@Catafal Catafal merged commit 0cca200 into main Jun 10, 2026
2 checks passed
@Catafal Catafal deleted the feat/oss-readiness branch June 10, 2026 16:04
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

PRD: OSS-readiness — publish Bach as a proper open-source project

1 participant