Skip to content

Commit 6907c3c

Browse files
committed
v1.0 release prep: changelog, issue templates, announcement bundle
CHANGELOG.md — first formal changelog. Documents [Unreleased] discoverability work and the [0.9.0] release in full (every shipped component, every deep-tier paper, the eval gate result, the two known limitations from the per-task scoring). .github/ISSUE_TEMPLATE/ - install_works.md — single-click confirmation form for the "≥1 external installer" Phase 8 gate. Pre-filled checklist (marketplace add → install → enum-to-string smoke test) so a confirming reply takes 30 seconds. - eval_task_suggestion.md — prompt + regex contract template for users who want to propose new eval tasks. - bug.md — bug template with classification taxonomy aligned to the components (wrong suggestion / wrong classification / activation failure / MCP failure / tool failure). docs/announce/RELEASE_PREP.md — channel-specific announcement snippets ready to copy-paste for HN (Show HN format), r/cpp, r/ClaudeAI, Mastodon/Bluesky/X (280-char), and a LinkedIn long-form outline. Closes the second half of Phase 8 acceptance: every channel the install command might be shared on has a tailored snippet that holds the same factual ground (37/39 eval, dual license, MIT+CC-BY-SA, v0.9.0). GitHub repo topics added on both parasxos/cpp26-adapter (15 topics: claude-code, claude-code-plugin, cpp26, cpp, c-plus-plus, iso-cpp, llm-tools, ai-coding-assistant, mcp, mcp-server, cpp-reflection, cpp-contracts, code-generation, static-analysis, wg21) and parasxos/claude-plugins (5 topics) — lowers the friction for the external-installer gate.
1 parent ccb76b8 commit 6907c3c

5 files changed

Lines changed: 384 additions & 0 deletions

File tree

.github/ISSUE_TEMPLATE/bug.md

Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
---
2+
name: "Bug report"
3+
about: "Something the plugin did wrong"
4+
title: "Bug: <one-line summary>"
5+
labels: ["bug"]
6+
---
7+
8+
**What happened**
9+
10+
11+
12+
**What you expected to happen**
13+
14+
15+
16+
**Reproduction**
17+
18+
1.
19+
2.
20+
21+
**Environment**
22+
23+
- Claude Code version: <`claude --version`>
24+
- Plugin version: <from `/plugin` listing>
25+
- C++ compiler: <`clang --version` or `g++ --version`>
26+
- OS:
27+
28+
**Classification (please pick one if you can)**
29+
30+
- [ ] Wrong suggestion — the plugin recommended a non-C++26 idiom
31+
- [ ] Wrong classification — `@cpp26-reviewer` mis-classified a
32+
diagnostic (bug vs compiler-lag)
33+
- [ ] Activation failure — the skill didn't load when it should have
34+
- [ ] MCP failure — `lookup_paper` / `search` / `compiler_status`
35+
returned something wrong
36+
- [ ] Tool failure — slash command / hook misbehaved
37+
- [ ] Other
38+
39+
**Logs** (if you have them):
40+
41+
```
42+
43+
```
Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,31 @@
1+
---
2+
name: "Eval task suggestion"
3+
about: "Suggest a prompt for the held eval suite"
4+
title: "Eval task: <one-line summary>"
5+
labels: ["eval", "enhancement"]
6+
---
7+
8+
The eval suite at [`eval/tasks.yaml`](../../eval/tasks.yaml) gates
9+
every release. Each task is a prompt + a regex contract that the
10+
plugin's response must satisfy.
11+
12+
**The prompt** (phrased so the model has to *reach* for the C++26
13+
idiom unprompted — avoid mentioning C++26 / paper IDs directly):
14+
15+
> *your prompt here*
16+
17+
**Expected idiom** (which paper / feature should the response use?):
18+
19+
- Paper: P####
20+
- Headline construct: …
21+
22+
**Suggested regex gates**:
23+
24+
```yaml
25+
must_contain: ["..."]
26+
must_not_contain: ["..."]
27+
```
28+
29+
**Why this is a good test**: what pre-C++26 default does a vanilla
30+
LLM emit for this prompt, and what does the plugin need to do
31+
differently to satisfy the gates?
Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,25 @@
1+
---
2+
name: "Install confirmation \U0001F44D"
3+
about: "Quick reply: I installed the plugin and it worked"
4+
title: "Install works — [your-handle]"
5+
labels: ["installed", "external"]
6+
---
7+
8+
Quick install confirmation — closes part of the v1.0 gate
9+
(per [`PLAN.md`](../../PLAN.md) §8).
10+
11+
- [ ] I ran `/plugin marketplace add parasxos/claude-plugins`
12+
- [ ] I ran `/plugin install cpp26-adapter@parasxos/claude-plugins`
13+
- [ ] I asked Claude for *"enum to string for `enum class E { A, B }`"*
14+
and the response used `std::meta` reflection (not X-macros or `magic_enum`)
15+
16+
**My toolchain** (so the maintainer knows what was tested):
17+
18+
- OS: <macOS / Ubuntu / Windows / …>
19+
- Claude Code version: <output of `claude --version`>
20+
- C++ compiler: <output of `clang --version` or `g++ --version`>
21+
22+
**Anything that didn't work?** *(Optional — leave blank if everything was clean.)*
23+
24+
<!-- Maintainer note: every confirming install is the social signal the
25+
plugin needs to clear its Phase 8 acceptance criterion. Thanks. -->

CHANGELOG.md

Lines changed: 92 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,92 @@
1+
# Changelog
2+
3+
All notable changes to `cpp26-adapter` are documented here.
4+
5+
The format loosely follows [Keep a Changelog](https://keepachangelog.com/en/1.1.0/).
6+
SemVer follows the policy in [`MAINTENANCE.md`](MAINTENANCE.md): patch
7+
for corpus/status refreshes, minor for plugin-surface changes, major
8+
on two successive eval-passing refreshes.
9+
10+
## [Unreleased]
11+
12+
- Discoverability: GitHub repo topics added (claude-code,
13+
claude-code-plugin, cpp26, mcp-server, wg21, …).
14+
- Issue templates under `.github/ISSUE_TEMPLATE/` for install
15+
confirmations, eval task suggestions, and bug reports.
16+
- Announcement bundle at `docs/announce/RELEASE_PREP.md` covering HN,
17+
r/cpp, r/ClaudeAI, Mastodon/Bluesky/X, and LinkedIn channels.
18+
19+
## [0.9.0] — 2026-05-20
20+
21+
First public release. Feature-complete; eval gate cleared at 95%;
22+
pre-1.0 pending a second successive refresh and ≥1 external installer
23+
per `PLAN.md` §8 acceptance.
24+
25+
### Added
26+
27+
- **Skill `cpp26-idioms`** — 136-line SKILL.md with a 5-rule
28+
constitution, 20-row decision table mapping pre-C++26 anti-patterns
29+
to C++26 successors, and a 12-entry anti-pattern regex list.
30+
- **MCP server `cpp26-ref`** — 3 stdio tools (`lookup_paper`,
31+
`search`, `compiler_status`), in-memory load over `corpus/index.yaml`
32+
+ `corpus/status.yaml`, no SQLite, no embeddings, 352 ms cold
33+
start, 17 unit + integration tests passing.
34+
- **Subagent `@cpp26-reviewer`** — two-pass review: regex
35+
anti-pattern Pass 1, `clang -std=c++2c -fsyntax-only` Pass 2 with
36+
bug-vs-compiler-lag classification routed through
37+
`mcp__cpp26-ref__compiler_status`. Conservative default — unknown
38+
classifies as bug.
39+
- **Hooks**`SessionStart` toolchain probe (informational warn if
40+
clang < 22 / gcc < 16); `PostToolUse` Pass-1 lint on every C++
41+
file edit.
42+
- **Slash command `/cpp26-init`** — scaffolds a C++26-ready
43+
`CMakeLists.txt` (CXX_STANDARD 26, -std=c++2c,
44+
CMAKE_EXPORT_COMPILE_COMMANDS), `.clangd`, and `.cpp26-adapter.yaml`.
45+
- **Knowledge corpus** — 216 plenary-approved C++26 papers indexed
46+
from `cplusplus/papers` (cross-checked vs cppreference C++26 page:
47+
19/20 random match). 16 hand-curated deep references covering
48+
reflection (P2996), contracts (P2900), `std::execution` (P2300),
49+
expansion statements (P1306), pack indexing (P2662),
50+
`= delete("reason")` (P2573), variadic friends (P2893), `#embed`
51+
(P1967), erroneous behaviour (P2795), `std::linalg` (P1673),
52+
hazard pointers (P2530), RCU (P2545), library hardening (P3471),
53+
throw in constant eval (P3068), placeholder `_` (P2169), and
54+
`std::inplace_vector` (P0843). 52 templated shallow refs and 148
55+
stubs for full surface coverage.
56+
- **Compiler status matrix**`corpus/status.yaml` for the 16 deep
57+
papers across clang-22, clang-p2996, gcc-16, msvc-19.40.
58+
- **Maintenance scaffold**`tools/refresh.sh`,
59+
`tools/validate_corpus.py`, `tools/package.sh`,
60+
`corpus/scripts/{fetch_index,fetch_papers,refresh_status,gen_refs}.py`.
61+
- **Eval harness** — 39-task held suite at `eval/tasks.yaml`;
62+
3-axis scorer at `eval/run.py` (standard-compliance,
63+
syntactic correctness, idiomatic-quality LLM-judge); subscription
64+
auth by default (`CPP26_EVAL_USE_API=1` to opt back into API
65+
billing).
66+
- **Distribution** — pushed to
67+
[`parasxos/cpp26-adapter`](https://github.com/parasxos/cpp26-adapter)
68+
with the 16-commit build history. Marketplace catalog at
69+
[`parasxos/claude-plugins`](https://github.com/parasxos/claude-plugins).
70+
- **Documentation** — README (marketing-grade synthesis of three
71+
parallel drafts), `docs/architecture.md` (standard-first invariant
72+
long-form), `PLAN.md` (binding implementation plan with phase-level
73+
acceptance criteria), `MAINTENANCE.md` (quarterly refresh process
74+
and SemVer policy).
75+
76+
### Eval
77+
78+
- Held suite: **37/39 = 95% standard-compliance** (bar ≥85%, +10 pp
79+
margin). See [`eval/results-v0.9.0.md`](eval/results-v0.9.0.md).
80+
81+
### Known limitations
82+
83+
- Two genuine eval misses recorded in `eval/results-v0.9.0.md`:
84+
`tuple-sum` (model reaches for `std::index_sequence` inside
85+
`template for`) and `enable-hardening-cmake` (model cites
86+
`_LIBCPP_HARDENING_MODE` instead of the standard
87+
`__STDCPP_HARDENING_MODE`). Candidate `SKILL.md` decision-table
88+
strengthenings for the next refresh.
89+
- Local clang baseline below 22 (e.g., Apple clang) causes the
90+
validator's Pass 3 to SKIP all deep-tier syntax checks. Run on
91+
a clang ≥ 22 host (or `bloomberg/clang-p2996` for reflection
92+
demos) for full validator coverage.

docs/announce/RELEASE_PREP.md

Lines changed: 193 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,193 @@
1+
# v1.0 release prep — announcement bundle
2+
3+
The two gates standing between today and `v1.0.0`:
4+
5+
1. **Second successive eval refresh ≥85%.** First was 37/39 (95%) on
6+
2026-05-20. This is satisfied automatically by the quarterly
7+
`tools/refresh.sh --with-eval` cycle. If the second refresh holds
8+
the bar, the SemVer rule in [`MAINTENANCE.md`](../../MAINTENANCE.md)
9+
triggers a `v1.0.0` bump.
10+
11+
2. **≥1 external installer.** Per the binding plan's Phase 8 acceptance
12+
([`PLAN.md`](../../PLAN.md) §8). This is genuinely social — someone
13+
other than `parasxos@gmail.com` needs to install via the marketplace
14+
command and ideally provide a confirming signal (a star, an issue,
15+
a comment, a clone).
16+
17+
The release-prep work below is everything that lowers friction for the
18+
second gate. Copy-paste from the channel-specific snippets below.
19+
20+
---
21+
22+
## Channel-specific snippets
23+
24+
### Hacker News — "Show HN" submission
25+
26+
**Title** *(80 char limit)*:
27+
```
28+
Show HN: cpp26-adapter – Claude plugin that biases your LLM toward C++26 idioms
29+
```
30+
31+
**URL**:
32+
```
33+
https://github.com/parasxos/cpp26-adapter
34+
```
35+
36+
**Comment body** *(first comment from OP)*:
37+
```
38+
The base LLM in any coding assistant defaults to whatever C++ idiom
39+
dominates its training data — overwhelmingly pre-C++26. Ask Claude
40+
for "enum to string" and you'll get X-macros or magic_enum instead
41+
of std::meta reflection + template for.
42+
43+
cpp26-adapter is a Claude Code plugin (skill + MCP server + reviewer
44+
subagent + hooks) that flips that default. Architectural invariant:
45+
"recommendations follow the standard, not the toolchain" — if your
46+
local clang/gcc doesn't support a feature, the C++26 form is suggested
47+
anyway and compiler errors are surfaced as informational compiler-lag
48+
classifications, never auto-rewritten into pre-C++26 workarounds.
49+
50+
Eval gate (39 held tasks, regex on fenced cpp blocks + clang
51+
-fsyntax-only + LLM-judge): 37/39 (95%) vs vanilla Claude's 14/39
52+
(36%) on the same suite.
53+
54+
The corpus tracks all 216 plenary-approved C++26 papers from
55+
cplusplus/papers, with 16 of the headline features hand-curated as
56+
deep references (P2996 reflection, P2900 contracts, P2300 senders,
57+
P1306 template for, P2662 pack indexing, #embed, std::inplace_vector,
58+
hazard pointers, RCU, library hardening, …).
59+
60+
Install: `/plugin marketplace add parasxos/claude-plugins` then
61+
`/plugin install cpp26-adapter@parasxos/claude-plugins`.
62+
63+
MIT (code) + CC-BY-SA-4.0 (corpus). Solo build over ~6 weeks; binding
64+
plan and per-phase acceptance criteria in PLAN.md.
65+
```
66+
67+
### Reddit — `r/cpp`
68+
69+
**Title**:
70+
```
71+
[Tool] cpp26-adapter — Claude Code plugin that biases the LLM toward C++26 final-form idioms (95% eval pass rate)
72+
```
73+
74+
**Body**:
75+
```
76+
TL;DR: Claude Code plugin that makes your LLM emit C++26 idioms
77+
(std::meta reflection, contracts, std::execution senders, template
78+
for, #embed, std::inplace_vector, …) instead of the pre-C++26
79+
fossils the model was trained on. Standard-first: suggests the
80+
C++26 form even when clang/gcc don't implement it yet; compiler
81+
errors are classified informationally.
82+
83+
GitHub: https://github.com/parasxos/cpp26-adapter
84+
Install (Claude Code): `/plugin install cpp26-adapter@parasxos/claude-plugins`
85+
86+
Eval suite (39 tasks, methodology in eval/run.py): 37/39 = 95% with
87+
plugin, 14/39 = 36% baseline.
88+
89+
The corpus covers all 216 plenary-approved C++26 papers; 16 of the
90+
headline features (reflection, contracts, senders, expansion
91+
statements, pack indexing, #embed, hardening, hazard pointers, RCU,
92+
linalg, …) have hand-curated references with frontmatter + canonical
93+
example + pre-C++26 equivalent + gotchas.
94+
95+
It's pre-1.0 — gating on a second successive eval-pass refresh and
96+
some external usage. Happy to take eval task suggestions; if there's
97+
a C++26 idiom you think the plugin should bias toward and isn't yet,
98+
file an issue.
99+
```
100+
101+
### r/ClaudeAI / Discord — "look what I built"
102+
103+
**Body** (fits in a single message):
104+
```
105+
Built a Claude Code plugin that turns the LLM into a C++26 specialist:
106+
https://github.com/parasxos/cpp26-adapter
107+
108+
Architecture: skill (always-in-context decision table) + MCP server
109+
(3 tools over a 216-paper corpus) + reviewer subagent (regex Pass 1
110+
+ clang -fsyntax-only Pass 2 with bug-vs-compiler-lag classification)
111+
+ SessionStart toolchain probe + PostToolUse anti-pattern lint + a
112+
/cpp26-init slash command to scaffold C++26-ready CMakeLists.
113+
114+
Architectural invariant: recommendations follow the standard, not the
115+
toolchain. So if clang 22 doesn't ship reflection yet, you still get
116+
the std::meta form — compiler errors get classified informationally
117+
as compiler-lag, never auto-rewritten.
118+
119+
Eval: 37/39 (95%) vs baseline 14/39 (36%) on a 39-task held suite.
120+
121+
Install: /plugin marketplace add parasxos/claude-plugins
122+
/plugin install cpp26-adapter@parasxos/claude-plugins
123+
124+
MIT (code) + CC-BY-SA-4.0 (corpus). v0.9.0, pre-1.0.
125+
```
126+
127+
### Mastodon / Bluesky / X — short post
128+
129+
**Tweet-length** (280 char):
130+
```
131+
Just shipped cpp26-adapter — a Claude Code plugin that biases your
132+
LLM toward C++26 final-form idioms (reflection, contracts, senders,
133+
#embed) even when clang/gcc lag. 37/39 = 95% on the held eval.
134+
135+
/plugin install cpp26-adapter@parasxos/claude-plugins
136+
137+
https://github.com/parasxos/cpp26-adapter
138+
```
139+
140+
### LinkedIn / blog post — long form
141+
142+
A long-form post that walks through the architecture lives at
143+
[`docs/architecture.md`](../architecture.md) and the binding plan
144+
that drove the implementation lives at [`PLAN.md`](../../PLAN.md).
145+
For a blog, the natural structure is:
146+
147+
1. The problem (LLMs default to pre-C++26 because of training data)
148+
2. Three constraints that shaped the design (solo maintainer,
149+
compiler-lag honesty, ≥85% eval gate)
150+
3. The architectural invariant
151+
4. Component-by-component walkthrough using the cyan/pink diagram
152+
5. The eval methodology and the 23→37 first-run audit story
153+
6. v1.0 gating + how readers can contribute
154+
155+
---
156+
157+
## Suggested install-verification ask
158+
159+
Add to the top of the HN/Reddit/Discord post if you want a concrete
160+
ask that satisfies the "≥1 external installer" gate cleanly:
161+
162+
> If you try the install, a quick "👍 it works" reply on this
163+
> thread (or a ⭐ on the repo) is the social signal the plugin
164+
> needs to clear its v1.0 gate. Happy to debug anything that
165+
> doesn't.
166+
167+
---
168+
169+
## Tracking signals
170+
171+
After posting, watch:
172+
173+
- ⭐ count on https://github.com/parasxos/cpp26-adapter
174+
- New issues / discussions
175+
- `gh api repos/parasxos/cpp26-adapter/traffic/clones --jq .count`
176+
(clone count; needs push auth)
177+
- Network of forks: `gh api repos/parasxos/cpp26-adapter/forks`
178+
179+
Any of those moving past zero is the "≥1 external installer" gate
180+
cleared.
181+
182+
---
183+
184+
## When both gates close
185+
186+
1. Run `tools/package.sh` and verify the tarball is unchanged from
187+
v0.9.0 (or carries only the corpus refresh diff).
188+
2. Bump `.claude-plugin/plugin.json` to `1.0.0`.
189+
3. Bump the marketplace entry's `ref` to `v1.0.0`.
190+
4. Update `MAINTENANCE.md` to record the date of the v1.0 trigger.
191+
5. Tag `git tag -a v1.0.0 -m "v1.0.0 — eval gate held across two refreshes; external installer confirmed"`.
192+
6. Push tag, push marketplace update.
193+
7. Announce the v1.0 cut (LinkedIn / X / dev.to long-form).

0 commit comments

Comments
 (0)