chess-spectral v1.19.0 — srmech profile pattern (Task #211, ADR-0001 §7 Step 1)#408
Merged
Merged
Conversation
ADR-0001 §7 Step 1 (validates srmech's simple-profile tier against
the smallest spectral-research-portfolio consumer).
What ships
----------
chess-spectral is now discoverable via srmech.profile("chess").
Eight bridge surfaces declared (encode_2d, encode_4d, fen_to_pos,
channel_energies, encode_2d_pure_phase, phase_only_pseudo_legal_moves,
encode_2d_bip_hybrid, decode_2d_bip_hybrid). Same eight functions
register as srmech.amsc.tool_schema entries with owner="chess" so
LLM agents can discover them.
The chess-spectral direct-import path (from chess_spectral import …)
is unchanged. Profile path is purely additive.
Tier
----
Simple profile — chess-spectral keeps its own ctypes binding to its
C library internally (via _native_pure_phase_2d.py and
_native_bitboard4d.py). srmech only exposes the Python bridge
surfaces declared in the descriptor; the native binary belongs to
chess-spectral. This is the canonical "simple-tier" pattern from
ADR-0001 §5.
New files (under chess_spectral/)
---------------------------------
srmech_profile.toml — Profile descriptor (ADR-0001 §3 v1.0)
_srmech_smoke.py — Activation-time smoke test
_srmech_tool_schema.toml — 8-tool extension file for LLM agents
Modified
--------
python/pyproject.toml — version 1.18.0 → 1.19.0
— deps += srmech>=0.3.1,<0.4
— [project.entry-points."srmech.profiles"]
python/pyproject-pure.toml — version match + same deps + entry-point
— force-include for the two new TOMLs
python/CHANGELOG.md — [1.19.0] entry
.github/workflows/
chess-spectral-publish.yml — rc-suffix → TestPyPI auto-route
(matches srmech-publish.yml + ephemerides
pattern); description-match guard;
512-char Summary limit guard
Dependency floor: srmech>=0.3.1 (not >=0.3.0)
---------------------------------------------
v0.3.1's loader added Form-1 (package-only) entry-point support and
[profile.tool_schema] extension loading — both surfaced during THIS
POC. v0.3.0 would enumerate the chess profile as invalid; v0.3.1
makes it work end-to-end.
Workflow change — TestPyPI auto-routing
----------------------------------------
Pattern mirrors srmech-publish.yml and ephemerides-spectral-publish.yml:
Tag chess-spectral-vX.Y.ZrcN → TestPyPI auto-route
Tag chess-spectral-vX.Y.Z → PyPI auto-route
The tag-version regex now allows the rcN suffix. The publish job's
environment + URL switch on the rc-suffix presence. workflow_dispatch
target input remains as a manual override (no-rc fallback path).
Also added:
* Description-match guard between pyproject.toml ↔ pyproject-pure.toml
(mirrors srmech rc8 lesson)
* PyPI Summary 512-char hard limit guard with 480-char soft warning
End-to-end verification (Windows / Python 3.14, clean venv)
-----------------------------------------------------------
With srmech 0.3.1 from production PyPI + chess-spectral 1.19.0 from
local wheel build:
srmech: 0.3.1 | chess-spectral: 1.19.0
Profile: chess 1.19.0
chess tools registered: 8
encode_2d shape: (640,)
channel_energies: 10 channels
ADR-0001 §7 Step 1 closed. Step 2 (ephemerides-spectral plugin-
profile POC) is the next phase.
Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
CI's test_immolation_readme_announces_current_version ratchet requires a "## What's new in vX.Y" section in README.md matching the current pyproject.toml version. v1.19.0 was missing it. Section covers: * srmech profile pattern integration (the load-bearing change) * Simple-tier framing * The 8 bridge surfaces declared * srmech>=0.3.1 dep floor + the rationale * TestPyPI auto-routing workflow change Matches the style of the v1.18 / v1.17 sections above it. Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
ADR-0001 §7 Step 1 — chess-spectral simple-profile POC, the first downstream consumer of the srmech v0.3.x profile pattern. Validates ADR-0001's simple tier against a real research package.
This is the rc/production rc cycle for chess-spectral v1.19.0. Per your TestPyPI-config note, the publish workflow is now updated to match srmech and ephemerides-spectral.
What ships
Profile-pattern integration
chess-spectral is now discoverable as the `"chess"` srmech profile:
```python
import srmech
chess = srmech.profile("chess")
enc = chess.encode_2d(chess.fen_to_pos(fen))
```
Eight bridge surfaces declared:
Same 8 functions also register as `srmech.amsc.tool_schema` entries (owner=`chess`).
Tier: Simple profile. chess-spectral's own ctypes binding to its C library stays internal (`_native_pure_phase_2d.py`, `_native_bitboard4d.py`); srmech only exposes the Python bridge surfaces. This is the canonical simple-tier pattern from ADR-0001 §5.
chess-spectral-publish.yml — TestPyPI auto-routing
Matches the pattern srmech and ephemerides-spectral use:
Also added:
Thanks for setting up the TestPyPI config on test.pypi.org for chess-spectral!
End-to-end verification
Built chess-spectral 1.19.0 wheel locally + clean-venv test against production-PyPI srmech 0.3.1:
```
srmech: 0.3.1 | chess-spectral: 1.19.0
Profile: chess 1.19.0
chess tools registered: 8
encode_2d shape: (640,)
channel_energies: 10 channels
```
Why srmech>=0.3.1 (not 0.3.0)
The chess-POC migration is what surfaced both v0.3.1 fixes (Form-1 entry-point support + `[profile.tool_schema]` extension loading). v0.3.0 would silently enumerate the chess profile as `status='invalid'`. v0.3.1 makes it work end-to-end. Hence the floor.
After merge
Per the autonomous-rc-cycle discipline:
Test plan
What's NOT in this PR
\U0001F916 Generated with Claude Code