* Drop frontmatter metadata from the OpenAI copy of the canonical skill The OpenAI plugin portal rejected the Skills-only ZIP on skills/avoid-ai-writing/SKILL.md: "Skill interface settings must use agents/openai.yaml ... `metadata` in SKILL.md does not configure the skill interface." That copy was byte-identical to root SKILL.md, whose frontmatter carries an agentskills.io/OpenClaw `metadata` block (author, repository, tags, agentskills_spec, openclaw.emoji). - sync-plugin-skill.sh writes the OpenAI copy with the `metadata` block removed from the frontmatter; everything else stays identical. The Claude plugin copy is unchanged. - validate-openai-plugin.py compares root-minus-metadata to the copy for its drift check and rejects a `metadata` key in any packaged skill's SKILL.md, so the portal error cannot recur silently. - validate-openai-plugin.test.py covers the transform (body untouched, version/license/compatibility kept, no-frontmatter passthrough, copy in sync) and three red controls: a byte-identical copy fails both rules, a body edit still reads as drift, and `metadata` in another skill fails. Verified: validate-openai-plugin.test.py, validate-openai-plugin.py . (OK), npm test, and the rebuilt archive validates after extraction. The rebuilt ZIP was accepted by the portal's upload validation. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UaeXzpBoBZKa1dWxVS1bTE * Single-source the metadata strip and correct the exact-copy wording Codex review of the previous commit found the awk and Python transforms could diverge (CRLF files, a frontmatter without a closing delimiter, a missing final newline) and that both ended the metadata block at a blank line, leaving orphaned nested keys. - sync-plugin-skill.sh now calls validate-openai-plugin.py --strip-frontmatter-metadata, so one implementation produces the copy and checks it. - strip_frontmatter_metadata keeps line endings byte-exact, treats blank lines inside the block as part of it, and returns text without a well-formed frontmatter unchanged; the drift check compares bytes again. - Tests add the edge inputs from the review and a CLI-vs-function byte-equality check. - OPENAI_PLUGIN.md, NOTICE.md, and submission-pack.json no longer call the bundled copy an exact copy; they state the one omitted block. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UaeXzpBoBZKa1dWxVS1bTE * Match only the top-level metadata key and keep comments inside the block Codex second pass: `metadata:extra:` is a distinct YAML key and was being stripped by the prefix match; a column-zero `#` comment inside the metadata block ended the block early and left an orphaned nested key. The key match now requires whitespace or end of line after `metadata:`, comment lines inside the block are skipped with it, and both cases have tests. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01UaeXzpBoBZKa1dWxVS1bTE --------- Co-authored-by: Claude Fable 5.1 <noreply@anthropic.com>
974 B
Attribution and package notice
The canonical Avoid AI Writing skill, detector, validator, documentation, and underlying project are Copyright (c) 2026 Conor Bronsdon and distributed under the MIT License in this repository.
The ChatGPT and Codex package added in this repository preserves the original canonical skill as a generated copy that is identical except for the omitted frontmatter metadata block, which the OpenAI portal rejects. Its router and focused workflow skills are packaging and orchestration additions. They do not replace the original rulebook or claim authorship of it.
The public OpenAI package intentionally excludes the separate avoid-ai-writing-mcp project. That project is optional and independently distributed.
The ChatGPT and Codex packaging, router, and workflow Skills were contributed by Mamdouh Aboammar (GitHub: imMamdouhaboammar) under the same MIT License. Publication of the packaged listing is by the canonical project owner.