Skip to content

Commit 36fa37d

Browse files
PythonLuvrclaude
andcommitted
chore: add CHANGELOG and GitHub issue/PR templates
- CHANGELOG.md follows Keep a Changelog; Unreleased covers infra hardening, sanity fix, README rewrite - Bug report + feature request issue forms with Squire-specific fields (version, OS, child CLI) - PR template enforces conventional commits and the v1.x API-freeze discipline - Issue config disables blank issues; points security to SECURITY.md and discussion to Discussions Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
1 parent c92ce4a commit 36fa37d

5 files changed

Lines changed: 169 additions & 0 deletions

File tree

Lines changed: 64 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,64 @@
1+
name: Bug report
2+
description: Something is broken or behaves unexpectedly.
3+
labels: ["bug"]
4+
body:
5+
- type: textarea
6+
id: what-happened
7+
attributes:
8+
label: What happened?
9+
description: A clear, concise description of the bug.
10+
placeholder: When I call `start()` with a `.cmd` binary on Windows, ...
11+
validations:
12+
required: true
13+
- type: textarea
14+
id: expected
15+
attributes:
16+
label: What did you expect to happen?
17+
validations:
18+
required: true
19+
- type: textarea
20+
id: repro
21+
attributes:
22+
label: Minimal reproduction
23+
description: Smallest Squire snippet that reproduces the bug. Include the binary you are spawning and any relevant options.
24+
render: ts
25+
validations:
26+
required: true
27+
- type: input
28+
id: squire-version
29+
attributes:
30+
label: Squire version
31+
description: Output of `npm ls @pythonluvr/squire`
32+
placeholder: 1.0.0
33+
validations:
34+
required: true
35+
- type: input
36+
id: node-version
37+
attributes:
38+
label: Node version
39+
placeholder: v22.11.0
40+
validations:
41+
required: true
42+
- type: dropdown
43+
id: os
44+
attributes:
45+
label: Operating system
46+
options:
47+
- Linux
48+
- macOS
49+
- Windows
50+
- Other (describe below)
51+
validations:
52+
required: true
53+
- type: input
54+
id: cli-name
55+
attributes:
56+
label: Child CLI (if relevant)
57+
description: Which binary Squire was spawning. Include version if a specific CLI version matters.
58+
placeholder: claude 0.4.2 / codex 0.7.0 / gemini 0.1.5 / custom
59+
- type: textarea
60+
id: logs
61+
attributes:
62+
label: Logs / error output
63+
description: Any stderr, error events, or stack traces. Strip secrets first.
64+
render: shell

.github/ISSUE_TEMPLATE/config.yml

Lines changed: 8 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,8 @@
1+
blank_issues_enabled: false
2+
contact_links:
3+
- name: Security vulnerability
4+
url: https://github.com/PythonLuvr/squire/security/policy
5+
about: Report security issues privately. Do not open a public issue.
6+
- name: Question or discussion
7+
url: https://github.com/PythonLuvr/squire/discussions
8+
about: For general questions, ideas, or open-ended discussion, please use Discussions.
Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,32 @@
1+
name: Feature request
2+
description: Suggest an addition or change to Squire.
3+
labels: ["enhancement"]
4+
body:
5+
- type: markdown
6+
attributes:
7+
value: |
8+
Before filing, please remember the v1.x line is API-frozen. Additive changes are fine; renames, removals, or changes to existing event-union shapes wait for v2.0.
9+
- type: textarea
10+
id: problem
11+
attributes:
12+
label: What problem are you trying to solve?
13+
description: Describe the use case, not the proposed solution. "I am building X, and Squire makes step Y harder than it needs to be."
14+
validations:
15+
required: true
16+
- type: textarea
17+
id: proposal
18+
attributes:
19+
label: Proposed solution
20+
description: How you would like Squire to change. API sketch welcome.
21+
render: ts
22+
- type: textarea
23+
id: alternatives
24+
attributes:
25+
label: Alternatives considered
26+
description: Workarounds you tried, custom adapters you wrote, other libraries you evaluated.
27+
- type: checkboxes
28+
id: additive
29+
attributes:
30+
label: Is this additive?
31+
options:
32+
- label: My proposal is additive (new types, new event variants, new options). It does not break the existing v1.x API.

.github/PULL_REQUEST_TEMPLATE.md

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
<!-- Thanks for contributing to Squire. Please complete the sections below. -->
2+
3+
## What does this PR do?
4+
5+
<!-- One paragraph describing the change and why. Link any related issue. -->
6+
7+
## Type of change
8+
9+
- [ ] Bug fix (non-breaking)
10+
- [ ] New feature, additive (non-breaking)
11+
- [ ] Documentation only
12+
- [ ] CI / tooling / chore
13+
- [ ] Breaking change (would require v2.0; please discuss in an issue first)
14+
15+
## Checklist
16+
17+
- [ ] `npm run check` passes locally.
18+
- [ ] `npm run check:strict` passes locally (coverage gate >= 85%).
19+
- [ ] No em dashes in any committed file.
20+
- [ ] No personal data, paths, or non-allowlisted IPs in any committed file.
21+
- [ ] If adding a new feature: tests are included.
22+
- [ ] If adding a new event variant or option: docs in `docs/api.md` and README are updated.
23+
- [ ] Conventional commit subject (`feat:`, `fix:`, `docs:`, `chore:`, `test:`, `ci:`).

CHANGELOG.md

Lines changed: 42 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,42 @@
1+
# Changelog
2+
3+
All notable changes to Squire will be documented in this file.
4+
5+
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.1.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
6+
7+
The v1.0 public API surface (everything exported from `src/index.ts`) is frozen. Additive changes ship on the v1.x line as minor bumps. Breaking changes wait for v2.0.
8+
9+
## [Unreleased]
10+
11+
### Added
12+
- `SECURITY.md` with private vulnerability reporting path.
13+
- CI matrix across Ubuntu, macOS, and Windows on Node 20 and 22, plus a dedicated coverage job.
14+
- `scripts/check-no-openwar-imports.mjs` enforcing zero coupling between Squire's `src/` and OpenWar.
15+
- `ej_identifier` blocklist in `scripts/check-sanity.mjs` catching internal-project leakage beyond the generic personal-data patterns.
16+
- Expanded `.gitignore` covering `.env*`, cookie files, local fixture overrides, and editor/OS artifacts.
17+
18+
### Fixed
19+
- `scripts/check-sanity.mjs` `SELF` resolution now uses `fileURLToPath` for cross-platform correctness. The previous URL-pathname hack worked on Windows by accident but failed on Linux and macOS.
20+
21+
### Changed
22+
- README rewritten with natural-voice intro covering the spawn-pain problem, Squire's role, the tool-not-framework positioning, and the subscription-auth angle.
23+
- README logo switched to the transparent variant for theme compatibility.
24+
25+
## [1.0.0] - 2026-05-18
26+
27+
### Added
28+
- Initial public release.
29+
- `Squire` class managing one child-process lifecycle: `start()`, `send()`, `stop()`, plus `pid`.
30+
- Cross-platform `child_process.spawn` wrapper with Windows `.cmd` / `.bat` / extensionless-binary handling. POSIX never uses a shell; Windows auto-detects via `needsShell()`.
31+
- `SquireEvent` discriminated union: `stdout`, `stderr`, `text_delta`, `message_start`, `message_stop`, `error`.
32+
- Built-in `text-stream` adapter. `text_delta` duplicates `stdout` in v1.0; per-CLI parsers are reserved for v1.1.
33+
- `SquireAdapter` public interface for consumers to register custom parsers via `registerSquireAdapter`.
34+
- MCP forwarding: pass inline `mcp.servers` (Squire writes a temp config) or `mcp.configPath` (Squire passes it through). `--mcp-config` flag defaults to the standard, overridable via `mcp.configFlag`.
35+
- Claude Code permission auto-setup: `autoSetup.claudeCode` merges `allowList` patterns into `~/.claude/settings.json` atomically.
36+
- `SquireError` with discriminated `code` field and `SquireAutoSetupError` carrying the offending settings path.
37+
- Full TypeScript types for every public surface.
38+
- 52 tests, 96.3% line coverage on `src/`.
39+
- Documentation: `README.md`, `docs/api.md`, `docs/openwar-integration.md`, `docs/contributing.md`.
40+
41+
[Unreleased]: https://github.com/PythonLuvr/squire/compare/v1.0.0...HEAD
42+
[1.0.0]: https://github.com/PythonLuvr/squire/releases/tag/v1.0.0

0 commit comments

Comments
 (0)