feat(standard-constitution): sync §6.4 contribution targets, §5.6 skill packaging — v1.40 - #21
Conversation
…ll packaging — v1.40 Mirrors Spacecraft-Software/Standard#19 at the same version and date. §6.4 names the authorized publication namespaces (Spacecraft-Software, UnbreakableMJ, plus any future Spacecraft Software-controlled host) and makes every other destination outbound and default-deny. Automation never initiates; only the maintainer, explicitly and per contribution, may authorize one. Package registries and external issue trackers are covered. Forks under our namespaces stay free — turning a fork branch into an upstream PR is the gated act. The GNU posture yields the identity clauses but not this one. §5.6 caps a SKILL.md frontmatter description at 1000 rendered characters against the loader's hard 1024 limit, defines "rendered" for YAML folded scalars, and requires the cap to be machine-enforced in CI and in the command that produces the bundle rather than by an opt-in git hook. The frontmatter description is re-cut to 973 chars under the new §5.6 cap: §6.4 and §5.6 added to the encoded-sections list, §8 Texinfo and the redundant "§11 palette family" dropped. §16 gains a bullet for each section. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
There was a problem hiding this comment.
💡 Codex Review
Here are some automated review suggestions for this pull request.
Reviewed commit: 507e2ab44d
ℹ️ About Codex in GitHub
Your team has set up Codex to review pull requests in this repo. Reviews are triggered when you
- Open a pull request for review
- Mark a draft as ready
- Comment "@codex review".
If Codex has suggestions, it will comment; otherwise it will react with 👍.
Codex can also answer questions or update the PR. Try commenting "@codex address that feedback".
| |------|--------| | ||
| | Description cap | A skill's frontmatter `description` MUST NOT exceed **1000 rendered characters**. The consuming loader's absolute limit is **1024**; 1000 is the deliberate 24-character margin for encoding and trailing-newline edge cases. | | ||
| | Rendered, not raw | "Rendered" means the string the loader sees. A YAML folded scalar (`description: >`) joins its wrapped lines with single spaces and retains a trailing newline, so the raw line lengths are not the measurement. Block (`>` / `\|`) and single-line plain or quoted forms alike are measured after folding. | | ||
| | Machine-enforced | The cap MUST be checked by an automated gate that runs both in the skill repository's CI on every pull request and push to the default branch, and in whatever command produces the distributable bundle. A developer-installed git hook is a convenience, never the gate — hooks are opt-in per clone and cannot be relied on. | |
There was a problem hiding this comment.
Implement the mandatory description gates before shipping
This declares the check mandatory in both CI and the bundle-producing command, but the inspected .github/workflows/ci.yml only runs REUSE/config validation, while construct skill ship only checks whether both bundles changed and never validates the description. Consequently, a contributor without the opt-in hook can still merge and package an over-limit skill, producing a bundle that the loader rejects; the CI and ship-command checks need to land atomically with this rule rather than in the stated follow-up.
AGENTS.md reference: AGENTS.md:L11-L18
Useful? React with 👍 / 👎.
…mption (#25) The two repos disagreed about workflow. /spacecraft-software/standard/CLAUDE.md states "Branch + PR, never push to main" for **both** the Standard and Construct repos, while Construct's own maintainer-local CLAUDE.md claimed this repo was "pre-authorised for auto-push on skill-directory changes" and CONTRIBUTING.md step 5 was a bare `git push … main`. Construct's actual recent history (#11, #21, #22) is squash-merged PRs, so the auto-push note was the outlier. Resolved in favour of branch + PR: - AGENTS.md gains a "Branch + PR — never push to main" hard rule (it had no push rule at all, only a pointer to CONTRIBUTING.md). - CONTRIBUTING.md step 5 replaced: feature branch → PR → squash-merge → delete branch, with the gh invocation. Noted as a two-repo rule binding human and assistant-driven changes alike. - Both state that an agent stops at opening the PR; merging is the maintainer's call and an agent never merges its own PR. - The maintainer-local CLAUDE.md (gitignored) is updated to match. Also flagged, not fixed: `construct skill ship` hard-codes `git push origin main` (construct-cli/src/commands/ship.rs:235), so the shipped tool can still bypass the rule. All three docs now say not to use it to publish until it is reworked — branch + `gh pr create`, or stop after the signed commit. That is a CLI behaviour change with schema, help-text, and test impact, so it is left as a separate decision. No skill directories touched, so no bundle rebuild. Description cap and reuse lint pass. Co-authored-by: Claude Opus 5 (1M context) <noreply@anthropic.com>
What
Skill-side sync of Spacecraft-Software/Standard#19 at the same version and date (v1.40, 2026-07-27).
§6.4 — Authorized Contribution Targets (Non-Negotiable)
Names the authorized publication namespaces —
github.com/Spacecraft-Softwareandgithub.com/UnbreakableMJ, with a future Spacecraft Software-controlled host (Gitway) inheriting — and makes every other destination outbound and default-deny. Automation never initiates one; only the maintainer, explicitly and per contribution, may authorize. Package registries and external issue trackers are in scope. Forks under our namespaces stay free — turning a fork branch into an upstream PR is the gated act. §4.2's carry-the-patch route is preferred to upstreaming, and the free-software/GNU posture yields the identity clauses but not this one.§5.6 — Skill Packaging Requirements
Caps a
SKILL.mdfrontmatterdescriptionat 1000 rendered characters against the loader's hard 1024 limit, defines rendered for YAML folded scalars, and requires the cap to be machine-enforced in CI and in the command that produces the bundle — a developer-installed git hook is opt-in per clone and is not the gate.This skill's own description
Re-cut to 973 characters under the new cap:
§6.4 contribution targetsand§5.6 skill packagingadded to the encoded-sections list,§8 Texinfoand the now-redundant§11 palette familydropped to make room.§16 gains a checklist bullet for each section. Bundles (
.zip/.skill) rebuilt.Verification
find . -name SKILL.md -not -path './.git/*' | xargs python3 .githooks/check-description-length.py→ clean across all 63 skillsreuse lint→ 606/606 files compliant1.39strings left in the masthead or frontmatterFollow-up
The §5.6 gate itself (CI step +
construct shippre-pack check) lands in a separate PR — this one only carries the normative text.🤖 Generated with Claude Code