Skip to content

docs: .affex face-interop manifest spec draft#93

Merged
hyperpolymath merged 2 commits into
mainfrom
feat/issue-84-affex-spec
May 11, 2026
Merged

docs: .affex face-interop manifest spec draft#93
hyperpolymath merged 2 commits into
mainfrom
feat/issue-84-affex-spec

Conversation

@hyperpolymath
Copy link
Copy Markdown
Owner

Summary

Draft spec for .affex — the face-bridging file format from issue #84.

  • Picks Shape 3 (face-interop manifest) as the primary form, with Shape 1 (side-by-side listing) as a derived CLI output
  • Defines affex/1 JSON schema: per-package, per-declaration, per-face signature renderings with body digests and override blocks
  • Specifies affinescript affex generate, affex render, affex diff CLI commands
  • Describes LSP integration (reader-face rendering in hover/outline without rewriting source)
  • Includes explicit satisfaction criteria mirroring the requirements-target closure rule from Exploration: .affex — face-bridging file format for cross-exolanguage interop #84

Does not close #84

Per the closure rule: this issue closes only when Claude and the user explicitly and mutually agree, in a recorded exchange, that the spec has been satisfied. This PR is the spec proposal — closing #84 requires a recorded agreement in the issue thread after review.

Test plan

🤖 Generated with Claude Code

Writes docs/specs/affex-spec.md, covering:
- Design decision: Shape 3 (face-interop manifest) as the primary form, with
  Shape 1 (side-by-side listing) as a derived view generated on demand
- File extension policy: tooling-only, not parsed by the compiler
- JSON format schema (affex/1): package manifest with per-declaration face
  renderings, body digest, override blocks
- CLI surface: affex generate, affex render, affex diff
- LSP integration plan
- Generation strategy and CI recommendation
- Explicit satisfaction criteria for closing #84 (per the requirements-target
  closure rule)

Does not close #84 — closure requires explicit mutual agreement recorded in
the issue thread.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Estate rule: docs/ files use .adoc extension; .md is reserved for files
GitHub community-health rules special-case by name (CONTRIBUTING.md,
CODE_OF_CONDUCT.md, SECURITY.md, CHANGELOG.md, README.md). General specs
must be .adoc.

This commit:
- git mv docs/specs/affex-spec.md -> docs/specs/affex-spec.adoc
- Converts Markdown headings (#, ##, ###, ####) to AsciiDoc (=, ==, ===, ====)
- Converts Markdown pipe tables to AsciiDoc [cols=...] |=== blocks
- Converts code fences to AsciiDoc [source,json] ---- listing blocks
- Converts emphasis (bold, italic) to AsciiDoc (* and _ markers)
- Adds standard AffineScript-spec preamble (SPDX, :toc:, :source-highlighter:)
- Updates internal §9 reference to point at the new .adoc filename

Refs #84.

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
hyperpolymath added a commit that referenced this pull request May 11, 2026
…ude/CLAUDE.md

Estate-wide governance rules for the Hypatia review bot and the
gitbot-fleet auto-merge bot. Kept in a standalone section so the bots
can read it cold without parsing the rest of CLAUDE.md.

Four rules:
- DOC-FORMAT: docs/ uses .adoc; .md only for community-health filenames.
- DOC-DEDUP: block two open PRs from closing the same issue.
- STACK-SIGNAL: docs PRs that document an unmerged feature must declare
  "Depends on: #NNN" and not auto-merge until the dep merges.
- ISSUE-CLOSURE: bots never close issues directly; only via PR merge
  keywords or explicit human agreement.

These rules are derived from the recurring failure modes seen in the
PR #91 / #92 / #93 / #94 batch (duplicate codegen-env doc PRs both
closing #89; affex-spec.md instead of .adoc; missing "Depends on: #92"
on the docs PR for extern grammar).

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
@hyperpolymath
Copy link
Copy Markdown
Owner Author

Estate-rule fix-up: renamed affex-spec.md to .adoc

Pushed commit 976ec42 to this branch:

  • Renamed docs/specs/affex-spec.mddocs/specs/affex-spec.adoc per the estate rule: .md is reserved for files GitHub community-health rules special-case by name (CONTRIBUTING.md, CODE_OF_CONDUCT.md, SECURITY.md, CHANGELOG.md, README.md). General specs go in .adoc.
  • Converted Markdown syntax to AsciiDoc: headings (#/##/###/####=/==/===/====), pipe-tables → [cols=...] |=== blocks, fenced code → [source,json] ---- listings, emphasis (**bold**/*italic**bold*/_italic_).
  • Added standard preamble (SPDX header, :toc:, :source-highlighter: rouge).
  • Updated §9 satisfaction-criterion ci: Bump actions/setup-node from 4.0.2 to 6.3.0 #1 to reference the new .adoc filename.
  • The Closes #84 semantics from the original PR body still apply — closure still requires explicit mutual agreement on issue Exploration: .affex — face-bridging file format for cross-exolanguage interop #84, not merge of this PR.

The DOC-FORMAT rule that catches this class of issue is now in .claude/CLAUDE.md on main (commit b04d575).

@hyperpolymath hyperpolymath merged commit cf6e2f5 into main May 11, 2026
18 of 21 checks passed
@hyperpolymath hyperpolymath deleted the feat/issue-84-affex-spec branch May 11, 2026 04:13
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Exploration: .affex — face-bridging file format for cross-exolanguage interop

1 participant