| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
fix(doctor): quote argument-hint so frontmatter is valid YAML (#155) Co-authored-by: Claude <noreply@anthropic.com> | 17 天前 | |
feat(patterns): add traceable block decomposition semantic pattern (#169) * feat(patterns): add traceable block decomposition semantic pattern Hierarchical, ID-addressable block diagrams on Tree, with per-block input/output/constraint/assumption metadata carried in data-block-* attributes and a --registry export mode that projects it into a JSON sidecar. See docs/adr/0009 for the design rationale. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix: registry-only export no longer implies image export; parser no longer truncates on quoted '>' Two defects from automated review (Greptile) on PR #169, both verified independently before fixing: - commands/export-diagram.md and prompts/export-diagram.md: --registry used alone still fell through to the unconditional "produce both .svg and .png" default, pulling in a Playwright dependency a metadata-only call should never have. --registry alone is now explicitly registry-only; combine with --svg-only/--png-only to also get an image. - scripts/verify-block-registry.py: the tag matcher used [^>]* to find a tag's end, so a literal '>' inside a quoted attribute value (valid HTML, e.g. data-block-constraint="output > input") truncated the match. If that attribute sat before data-block-id in the tag, the whole block vanished from the scan silently -- a file with a real block passed CI as if it had none. The matcher now treats a quoted span (either quote style) as one unit, and the attribute matcher accepts single quotes too, which it previously didn't. Four new regression cases in scripts/test-verify-block-registry.py cover both orderings of the truncation hazard, single quotes, and mixed quoting in one tag. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * chore: rebase onto main and re-bump version to 2.6.13 PR #155 merged and moved main to 2.6.12 while this branch was open, colliding with this PR's own 2.6.11 -> 2.6.12 bump. Rebased and re-ran scripts/bump-plugin-version.py; verify-plugin-package.py origin/main now passes. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(skill): restore two load-bearing sentences trimmed for byte budget The verify-geometry.py pointer under rule 6 and "the connector rules never relax" (referring to section 6) in section 11 were both cut to make room for the new routing-table row; both turned out to be load-bearing (the only in-context link from the label-mask rule to its verifier, and a sentence that forecloses an argument agents have actually made). Restored both and found the bytes elsewhere instead: tightened the output-dials intro, dropped a redundant clause after the decorative- SVG aria-hidden rule, and tightened the duplicate-ID rationale. Net +5 bytes; SKILL.md is 39,989 of 40,000. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs(adr): reframe ADR 0009 around the general need, not a named downstream project ADRs here are settled repo policy future contributors read as precedent, not a record of one customer's motivation. Dropped the named project and its patent-filing detail from the Context section and replaced it with the general need the pattern actually serves (stable, citable block identity plus a machine-readable sidecar, for compliance/IP-style documentation generally). Also genericized the illustrative example names in the Decision and Consequences sections for the same reason. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * ci: register the block-registry gates as required maintainer-policy checks verify-block-registry.py --all and test-verify-block-registry.py were wired into .github/workflows/ci.yml but never added to .maintainer-policy.json, so the policy manifest wasn't the source of truth for them. Added both next to the geometry pair, and documented them in CONTRIBUTING.md's gate table, combined run-them-all script, and "if a gate fails" troubleshooting section, matching every other gate's treatment. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * docs: attach PR #169 visual-proof screenshots Temporary review artifact for the PR template's required visual-proof section (light/dark/full editorial renders of the new Traceable block decomposition example). Not part of the shipped skill package; safe to delete once the PR merges. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * feat(examples): ship a Traceable block decomposition example, gallery-registered Light/dark/full editorial variants (example-tree-block-decomposition*.html), a generic payment-gateway decomposition chosen so the example reads clearly as illustrative rather than tied to any real product. Registered in the gallery as "Tree - block decomposition" (eyebrow 53). Without this, verify-block-registry.py --all passed vacuously -- no shipped asset carried data-block-id, so the gate had nothing to guard. It now covers 158 files instead of 155. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> * fix(examples): show each block's data-block-id in its badge chip The three Traceable block decomposition variants rendered category tags (SYS, AUTH, RISK, LDG) in the chip while data-block-id carried PAY-001, PAY-001-01, PAY-001-02 and PAY-001-03. semantic-patterns.md § 8 puts the ID in the chip and names "an ID badge with no matching data-block-id" as an anti-pattern, and the full variant's headline card already tells the reader the badge says PAY-001-02. The chips now carry the IDs. Each chip widens (28 to 46 for the root, 32 to 62 for the children) and its text recentres; the 160-wide node boxes, name slot and port labels are unchanged, so the density budget does not move. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(verify): reject blank data-block-id values and whitespace-only names verify-block-registry.py accepted data-block-id="" as a valid block, and because that blank id then sat in the known-id set, a blank data-block-parent resolved against it: two blocks joined by an empty string passed as a coherent tree with zero findings. A whitespace-only data-block-name passed too, while an empty one was caught. Both asymmetries are gone: a blank or whitespace-only id is a finding, a blank id is never a resolvable parent target, and names are stripped before the presence check. export-registry.md promises id and name are always present, so export would otherwise have emitted "id": "". Five adversarial cases cover both polarities, and the CONTRIBUTING and README gate descriptions name the new findings. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs: ground the pattern's docs and example in the shipped payment-gateway case Review point 5 asked ADR 0009 to stop grounding itself in a named downstream project and a future patent filing. That framing survived in four more places: ADR 0002's amendment line, the § 8 selection trigger and its canonical ID and name examples (FC3-001-02, "Timeline Engine"), the entire worked example in export-registry.md (fc3-timeline- architecture, FC3-001, "Command Queue"), and the full variant's headline card ("a future filing"). The two reference files are the surface agents load at runtime, and the repo was teaching two different canonical examples. Everything now uses the payment-gateway example this PR ships, and the registry worked example is a literal excerpt of running --registry on it. The verifier's test fixtures drop the project initialism as well. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(export-registry): define document order once The schema note said blocks are emitted in document order "(depth-first, matching the tree's own root-to-leaf visual order)" while procedure step 5 said only "document order". Those agree only when the SVG happens to be authored depth-first: a three-level tree drawn row by row makes document order breadth-first and the parenthetical false, and the shipped two-level example cannot tell the two apart. Document order now has one definition, source order with no re-sorting, stated in the schema note and referenced from the step. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(adr): make the SKILL.md headroom remark non-numeric The sentence said SKILL.md "had 16 bytes of headroom" when this landed; after the review-point-4 restoration it is 39,989 of 40,000, so 11. The argument does not depend on the exact figure and any figure goes stale on the next byte-neutral edit, so the remark now says what it means: within a few dozen bytes of the cap when this landed. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs: re-render the PR #169 visual-proof screenshots with the ID badges Same capture as the originals (Playwright Chromium, 2x, first-<svg> for the light and dark variants, the full editorial page for the full variant) so the linked previews show the badges reading PAY-001, PAY-001-01, PAY-001-02 and PAY-001-03 rather than the old category tags. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * chore: drop the manifest version bump per upstream ADR 0009 main now bumps the Claude, Codex and Factory manifest versions after each merge (Auto Version Bump workflow, ADR 0009), and CI rejects any version change in a pull request through verify-plugin-package.py --require-no-bump. The 2.6.12 to 2.6.13 bump this PR carried from the earlier rebase is reverted so all three manifests match main again. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * docs(adr): renumber the block-registry ADR to 0010 Upstream took ADR 0009 for the versions-bumped-on-main policy while this PR was in review, so the block-registry metadata contract moves to 0010. Its status line now records the manifest version at the time of writing, v2.6.12, since the PR no longer carries a bump. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com> * fix(verify): parse block registries the way a browser parses HTML verify-block-registry.py used a hand-rolled regex tag/attribute scanner. On exact head ca983b2 it returned zero blocks for unquoted attribute values, whitespace around "=", and case-insensitive DATA-BLOCK-* names, treated a commented-out block as live, and silently dropped a boolean/blank data-block-id instead of reporting it -- the same fail-open shape as the quoted-">" bug fixed earlier: a real block vanishes from the scan and CI reports clean as if the file had none. The regex scanner is replaced with the stdlib html.parser.HTMLParser, which already lowercases attribute names, tolerates unquoted values and spacing, and never calls handle_starttag for tag-like text inside a comment or a <script>/<style> element. A present-but-valueless data-block-id now registers as a block with a blank id (a finding), rather than making the whole element invisible to the scan, and a repeated attribute name keeps its first value, matching how a browser resolves a duplicate attribute in one tag. Source order and line reporting are unchanged. Six adversarial cases cover unquoted values, whitespace around "=", case-insensitive names, a boolean data-block-id, a commented-out block, and duplicate-attribute precedence -- each checked to confirm it would fail under the wrong implementation, not just pass vacuously. Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com> --------- Co-authored-by: Hank-tha-Cowdog <zachalberd@gmail.com> Co-authored-by: Claude Sonnet 5 <noreply@anthropic.com> Co-authored-by: Cathryn Lavery <50469282+cathrynlavery@users.noreply.github.com> | 12 天前 | |
feat: consolidate reviewed Diagram Design 2.6.0 release (#134) * fix(commands): stop hardcoding the visual-type count Integrates the final reviewed diff from PR #112. * docs(high-level): correct effective width checklist Integrates the final reviewed diff from PR #105. * fix(commands): quote profile argument hint Integrates the final reviewed diff from PR #126. * test(sankey): gate conservation and ribbon geometry Integrates the final reviewed diff from PR #103. * feat(tooling): add doctor diagnostics gate Integrates the final reviewed diff from PR #132. * feat(scripts): lint diagrams as rendered Integrates the final reviewed diff from PR #18. * feat(types): add quantitative polar chart Integrates the final reviewed diff from PR #101. * chore(release): consolidate reviewed changes in 2.6.0 Documents every combined gate and synchronizes Claude, Codex, and Factory metadata for the 39-type release. * fix(doctor): support installed-skill projects --------- Co-authored-by: mysoniw <soniw1@gmail.com> Co-authored-by: thang <76550342+thangldw@users.noreply.github.com> Co-authored-by: YinShaokun <yinshaokun@didiglobal.com> Co-authored-by: 0xDarkMatter <0xDarkMatter@users.noreply.github.com> Co-authored-by: Rupam Pal <rupam.pal@euromonitor.com> Co-authored-by: Yuvraj3905 <yuvraj202001@gmail.com> | 29 天前 | |
feat: import Excalidraw diagrams for editorial redraw (#192) * feat(import): add Excalidraw extractor and scene fixtures excalidraw_extract.py parses .excalidraw/.excalidraw.json scenes into the same digest shape as the draw.io and Mermaid extractors: nodes, edges, frames, groups, budget flags, and a discard ledger. Source content is treated as untrusted data throughout; links, embeds, images, freedraw, and unknown element types are inventoried, never rendered or fetched. Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com> * docs(import): Excalidraw redraw reference, command, prompt, worked example Mirrors the Mermaid import surfaces: references/import-excalidraw.md carries the four dials and fidelity-ledger contract, the plugin command and Pi prompt route to it, and the gallery ships a worked example tab. Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com> * ci: verify Excalidraw imports verify-excalidraw-import.py drives the real extractor against both fixtures (clean whiteboard + adversarial scene), checks trust-boundary behavior, resource caps, named exit-2 failures, encoding safety, and reference/command wiring. test-verify-excalidraw-import.py proves the verifier rejects intentional breakage. Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com> * docs: route Excalidraw import across README, SKILL.md, doctor, and manifests Adds .excalidraw routing to SKILL.md §11, README import section and file tree, CONTRIBUTING gates, cookbook R6, doctor script/routing inventories, docs-sync routing surfaces, and the four manifest descriptions. No plugin version bumps. Co-authored-by: Matt Van Horn <mvanhorn@users.noreply.github.com> * fix(excalidraw_extract): reject non-finite geometry with the promised exit 2 A scene is untrusted input, and three shapes reached the digest's integer formatting and crashed there instead of being diagnosed: the JSON tokens `Infinity` and `NaN` (OverflowError / ValueError) and an out-of-range integer coordinate ("int too large to convert to float"). All three exited 1 with a traceback rather than the documented exit 2. `_num` now rejects non-finite values and out-of-range ints, `json.loads` refuses the non-finite constant tokens via parse_constant, and scene_bounds guards the derived width/height arithmetic. Absent or non-numeric fields keep reading as 0, so no valid scene changes: both fixtures produce byte-identical output to before this commit. * Run mobile render checks in the Playwright gate --------- Co-authored-by: Cursor Agent <cursoragent@cursor.com> Co-authored-by: Matt Van Horn <455140+mvanhorn@users.noreply.github.com> Co-authored-by: Cathryn Lavery <cathryn@bestself.co> | 9 天前 | |
feat: consolidate reviewed Diagram Design 2.6.0 release (#134) * fix(commands): stop hardcoding the visual-type count Integrates the final reviewed diff from PR #112. * docs(high-level): correct effective width checklist Integrates the final reviewed diff from PR #105. * fix(commands): quote profile argument hint Integrates the final reviewed diff from PR #126. * test(sankey): gate conservation and ribbon geometry Integrates the final reviewed diff from PR #103. * feat(tooling): add doctor diagnostics gate Integrates the final reviewed diff from PR #132. * feat(scripts): lint diagrams as rendered Integrates the final reviewed diff from PR #18. * feat(types): add quantitative polar chart Integrates the final reviewed diff from PR #101. * chore(release): consolidate reviewed changes in 2.6.0 Documents every combined gate and synchronizes Claude, Codex, and Factory metadata for the 39-type release. * fix(doctor): support installed-skill projects --------- Co-authored-by: mysoniw <soniw1@gmail.com> Co-authored-by: thang <76550342+thangldw@users.noreply.github.com> Co-authored-by: YinShaokun <yinshaokun@didiglobal.com> Co-authored-by: 0xDarkMatter <0xDarkMatter@users.noreply.github.com> Co-authored-by: Rupam Pal <rupam.pal@euromonitor.com> Co-authored-by: Yuvraj3905 <yuvraj202001@gmail.com> | 29 天前 | |
feat: consolidate reviewed Diagram Design 2.6.0 release (#134) * fix(commands): stop hardcoding the visual-type count Integrates the final reviewed diff from PR #112. * docs(high-level): correct effective width checklist Integrates the final reviewed diff from PR #105. * fix(commands): quote profile argument hint Integrates the final reviewed diff from PR #126. * test(sankey): gate conservation and ribbon geometry Integrates the final reviewed diff from PR #103. * feat(tooling): add doctor diagnostics gate Integrates the final reviewed diff from PR #132. * feat(scripts): lint diagrams as rendered Integrates the final reviewed diff from PR #18. * feat(types): add quantitative polar chart Integrates the final reviewed diff from PR #101. * chore(release): consolidate reviewed changes in 2.6.0 Documents every combined gate and synchronizes Claude, Codex, and Factory metadata for the 39-type release. * fix(doctor): support installed-skill projects --------- Co-authored-by: mysoniw <soniw1@gmail.com> Co-authored-by: thang <76550342+thangldw@users.noreply.github.com> Co-authored-by: YinShaokun <yinshaokun@didiglobal.com> Co-authored-by: 0xDarkMatter <0xDarkMatter@users.noreply.github.com> Co-authored-by: Rupam Pal <rupam.pal@euromonitor.com> Co-authored-by: Yuvraj3905 <yuvraj202001@gmail.com> | 29 天前 |
| 文件 | 最后提交记录 | 最后更新时间 |
|---|---|---|
| 17 天前 | ||
| 12 天前 | ||
| 29 天前 | ||
| 9 天前 | ||
| 29 天前 | ||
| 29 天前 |