From 20195a9457d65dd0b5b60ae6bf912f26050db95c Mon Sep 17 00:00:00 2001 From: Chris Purcell <168346341+chrisdpurcell@users.noreply.github.com> Date: Wed, 29 Jul 2026 18:02:20 -0400 Subject: [PATCH] chore: update Project Standards to 5.11.0 --- .agents/skills/markdown-frontmatter/SKILL.md | 14 +- .github/workflows/format.yml | 9 +- .github/workflows/lint-markdown.yml | 10 +- .markdownlint.json | 2 +- .prettierignore | 6 + .standards/catalog.toml | 158 +++++++-- .standards/config.toml | 4 + .standards/lock.toml | 304 +++++++++--------- .../markdown-frontmatter/agent-summary.md | 8 +- .vscode/settings.json | 2 +- AGENTS.md | 4 + CLAUDE.md | 4 + docs/STATUS.md | 11 +- docs/TODO.md | 7 +- ...-production-state-test-stale-assumption.md | 25 ++ docs/handoff/bugs/INDEX.md | 1 + docs/handoff/sessions/2026-07.md | 12 +- docs/specs/repository-explainer-video.md | 4 +- pyproject.toml | 7 +- scripts/check.py | 40 ++- 20 files changed, 416 insertions(+), 216 deletions(-) create mode 100644 docs/handoff/bugs/008-production-state-test-stale-assumption.md diff --git a/.agents/skills/markdown-frontmatter/SKILL.md b/.agents/skills/markdown-frontmatter/SKILL.md index a7fee6c..79f0c12 100644 --- a/.agents/skills/markdown-frontmatter/SKILL.md +++ b/.agents/skills/markdown-frontmatter/SKILL.md @@ -12,7 +12,7 @@ metadata: ## Overview -Author and fix YAML frontmatter for **managed Markdown documents** under the [project-standards Markdown Frontmatter Standard](https://github.com/L3DigitalNet/project-standards/blob/main/standards/markdown-frontmatter/README.md). +Author and fix YAML frontmatter for **managed Markdown documents** under the [project-standards Markdown Frontmatter Standard](https://github.com/L3DigitalNet/project-standards/blob/v5.10.0/standards/markdown-frontmatter/versions/1.6/README.md). This skill ships with the standard package and is installed repo-local at `.agents/skills/markdown-frontmatter` when a repository adopts the standard. That path is deliberate: both Claude Code and Codex CLI can discover it without a global skill owner. @@ -83,7 +83,7 @@ These fields accept only these values (the schema is the source of truth): ## The `id` field — standard-enforced format -> **This is a standard rule, not a local addition.** `markdown-frontmatter@1.4` enforces the id format below via `validate-id` (run by `project-standards validate` and the V5 CI workflow). An id whose leading segment is not a valid `doc_type` **fails validation** with `prefix '' is not a valid doc_type`. Earlier repo-name-prefixed ids no longer pass. +> **This is a standard rule, not a local addition.** `markdown-frontmatter@1.6` enforces the id format below via `validate-id` (run by `project-standards validate` and the V5 CI workflow). An id whose leading segment is not a valid `doc_type` **fails validation** with `prefix '' is not a valid doc_type`. Earlier repo-name-prefixed ids no longer pass. ```text {doc_type}-{base36-6}-{document-name} @@ -169,8 +169,8 @@ To check or repair a single file's id: `validate-id ` (add `--fix` to rewr ## Authoritative references -- [Standard README](https://github.com/L3DigitalNet/project-standards/blob/main/standards/markdown-frontmatter/README.md) — overview and adoption surface. -- [Structure Requirements](https://github.com/L3DigitalNet/project-standards/blob/main/standards/markdown-frontmatter/structure.md) — hard fields, key order, scalar/list rules, IDs, and validation. -- [Field Values](https://github.com/L3DigitalNet/project-standards/blob/main/standards/markdown-frontmatter/field-values.md) — lifecycle, ownership, canonical tags, aliases, relationships, sources, and extensions. -- [Adoption guide](https://github.com/L3DigitalNet/project-standards/blob/v5/standards/markdown-frontmatter/versions/1.4/adopt.md) — unified config, CI workflow, repo-local skill install, and compliance procedure. -- `standards/markdown-frontmatter/versions/1.4/schemas/markdown-frontmatter.schema.json` (in project-standards) — the selected package contract; wins on any conflict. +- [Standard README](https://github.com/L3DigitalNet/project-standards/blob/v5.10.0/standards/markdown-frontmatter/versions/1.6/README.md) — overview and adoption surface. +- [Structure Requirements](https://github.com/L3DigitalNet/project-standards/blob/v5.10.0/standards/markdown-frontmatter/versions/1.6/structure.md) — hard fields, key order, scalar/list rules, IDs, and validation. +- [Field Values](https://github.com/L3DigitalNet/project-standards/blob/v5.10.0/standards/markdown-frontmatter/versions/1.6/field-values.md) — lifecycle, ownership, canonical tags, aliases, relationships, sources, and extensions. +- [Adoption guide](https://github.com/L3DigitalNet/project-standards/blob/v5.10.0/standards/markdown-frontmatter/versions/1.6/adopt.md) — unified config, CI workflow, repo-local skill install, and compliance procedure. +- `standards/markdown-frontmatter/versions/1.6/schemas/markdown-frontmatter.schema.json` (in project-standards) — the selected package contract; wins on any conflict. diff --git a/.github/workflows/format.yml b/.github/workflows/format.yml index ec8a5e1..a33dfe2 100644 --- a/.github/workflows/format.yml +++ b/.github/workflows/format.yml @@ -9,8 +9,15 @@ on: jobs: format: + permissions: + contents: read uses: L3DigitalNet/project-standards/.github/workflows/format.yml@v5 with: prettier: true globs: "**/*.md\n**/*.json\n**/*.jsonc\n**/*.yml\n**/*.yaml" - exclusions: "docs/reference/pre-migration/**\npackage-lock.json" + exclusions: |- + docs/reference/pre-migration/** + package-lock.json + products/vscode-extension/**/*.code-snippets + products/vscode-extension/**/*.js + products/vscode-extension/**/*.mjs diff --git a/.github/workflows/lint-markdown.yml b/.github/workflows/lint-markdown.yml index 4452ca9..6eb5613 100644 --- a/.github/workflows/lint-markdown.yml +++ b/.github/workflows/lint-markdown.yml @@ -9,7 +9,15 @@ on: jobs: lint-markdown: + permissions: + contents: read uses: L3DigitalNet/project-standards/.github/workflows/lint-markdown.yml@v5 with: markdownlint: true - globs: "**/*.md\n!docs/reference/pre-migration/**" + globs: |- + **/*.md + !.pytest_cache/** + !.ruff_cache/** + !.venv/** + !node_modules/** + !docs/reference/pre-migration/** diff --git a/.markdownlint.json b/.markdownlint.json index d80971b..879abaf 100644 --- a/.markdownlint.json +++ b/.markdownlint.json @@ -63,5 +63,5 @@ "MD056": true, "MD058": true, "MD059": { "prohibited_texts": ["click here", "here", "link", "more"] }, - "MD060": { "style": "any", "aligned_delimiter": false } + "MD060": false } diff --git a/.prettierignore b/.prettierignore index 79e8345..da5a4c5 100644 --- a/.prettierignore +++ b/.prettierignore @@ -10,3 +10,9 @@ docs/TODO.md # run matches the format CI caller. Keep the two in sync. docs/reference/pre-migration/ package-lock.json +products/vscode-extension/**/*.js +products/vscode-extension/**/*.mjs +products/vscode-extension/**/*.code-snippets + +# Preserve local migration preview evidence outside tracked project content. +migration-plan.json diff --git a/.standards/catalog.toml b/.standards/catalog.toml index fe57b84..ccb7108 100644 --- a/.standards/catalog.toml +++ b/.standards/catalog.toml @@ -1,13 +1,13 @@ [project_standards] schema_version = "1.0" catalog = "5" -release = "5.4.0" -digest = "sha256:a10514875f75550b32fe2a0c29bedab933f7126c59a19f7f819f5e84a051a0be" +release = "5.11.0" +digest = "sha256:492b1cc8a18b5e14974282bd8a797f27595398c27ad983a0934bdfc4562876e9" [standards.adr] status = "active" -available = ["1.1", "1.2"] -default = "1.2" +available = ["1.1", "1.2", "1.3"] +default = "1.3" candidates = [] [standards.adr.versions."1.1"] @@ -16,14 +16,19 @@ availability = "consumer" payload_digest = "sha256:82e9e3ae5d50a641b4b47366ef5d66fd85b13555ffda0d9ac1c99aadd1c6c719" [standards.adr.versions."1.2"] -channel = "stable" +channel = "retained" availability = "consumer" payload_digest = "sha256:5b36e6f63a2477f2c7c5bcef647edc8b674366eb64937aba646aefc65d8a6f21" +[standards.adr.versions."1.3"] +channel = "stable" +availability = "consumer" +payload_digest = "sha256:6c5d8da41c80658cb701b5aedd17a93149aab5e8dab4caa58f8e0047bf645d1f" + [standards.agent-handoff] status = "active" -available = ["1.1", "1.2", "1.3"] -default = "1.3" +available = ["1.1", "1.2", "1.3", "1.4", "1.5", "1.6"] +default = "1.6" candidates = [] [standards.agent-handoff.versions."1.1"] @@ -37,14 +42,29 @@ availability = "consumer" payload_digest = "sha256:197d9c6877781abf1a9f0a3d3f37092413600ebaff604371ae10c7405925cf5b" [standards.agent-handoff.versions."1.3"] -channel = "stable" +channel = "retained" availability = "consumer" payload_digest = "sha256:3e6e53f9ba889b7f68624c1c3861c5e26ac889a6025c4fb7b819b49e140d1f78" +[standards.agent-handoff.versions."1.4"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:17bdc8b25c6cc6ac644057a85f55ed244adf88b58f4ad052d68222d20c24120a" + +[standards.agent-handoff.versions."1.5"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:4acf48a8dbb987088700c558128d9b180718e1001a8bc7d4364950b0f05dc3da" + +[standards.agent-handoff.versions."1.6"] +channel = "stable" +availability = "consumer" +payload_digest = "sha256:97041fb9a47c28cf0e2dd38c2de32be827af4b079de3943d6b74675bf52d81f8" + [standards.cli-documentation] status = "active" -available = ["1.1", "1.2", "1.3"] -default = "1.3" +available = ["1.1", "1.2", "1.3", "1.4", "1.5"] +default = "1.5" candidates = [] [standards.cli-documentation.versions."1.1"] @@ -58,14 +78,24 @@ availability = "consumer" payload_digest = "sha256:edde1a4011314a9b05f372731a8d50e3b5a0663d39369089256d442430e4943c" [standards.cli-documentation.versions."1.3"] -channel = "stable" +channel = "retained" availability = "consumer" payload_digest = "sha256:2c15f700fd343327b675295579220572fea9f2735386da5aa266d38839a7f9c4" +[standards.cli-documentation.versions."1.4"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:8c2f1e9cd6538954d8ace67146133c6864a149ae0a1a97d6aba75560d5ecf346" + +[standards.cli-documentation.versions."1.5"] +channel = "stable" +availability = "consumer" +payload_digest = "sha256:90bd59f457ec467da0990bbf89667f534753768be79530c7bfdde9c791d3b618" + [standards.markdown-frontmatter] status = "active" -available = ["1.2", "1.3", "1.4"] -default = "1.4" +available = ["1.2", "1.3", "1.4", "1.5", "1.6"] +default = "1.6" candidates = [] [standards.markdown-frontmatter.versions."1.2"] @@ -79,14 +109,24 @@ availability = "consumer" payload_digest = "sha256:97327fffde61fd981c08949292c504a930f4fe6786af455cb1f6c7d204dc7c43" [standards.markdown-frontmatter.versions."1.4"] -channel = "stable" +channel = "retained" availability = "consumer" payload_digest = "sha256:a981a54cb6c6a36e2bfb73eca61c9b84100da67b072cd07c7c4ffea4b0593647" +[standards.markdown-frontmatter.versions."1.5"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:b31b9a97edb48334bbb6af2988272baf071449a457a303e218dbb8c6436a540c" + +[standards.markdown-frontmatter.versions."1.6"] +channel = "stable" +availability = "consumer" +payload_digest = "sha256:cf1e2c975d5f139f1b3864090e6fcc0e45dcb895a97dd07113c0eeb7af0d0f32" + [standards.markdown-tooling] status = "active" -available = ["1.2", "1.3", "1.4", "1.5", "1.6"] -default = "1.6" +available = ["1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10"] +default = "1.10" candidates = [] [standards.markdown-tooling.versions."1.2"] @@ -110,14 +150,34 @@ availability = "consumer" payload_digest = "sha256:2f06b126747822b330ed0239630b0dad413afb9f8c56380d72848403a9c23091" [standards.markdown-tooling.versions."1.6"] -channel = "stable" +channel = "retained" availability = "consumer" payload_digest = "sha256:cf123371ac92c23942a37a5765b99d1af4f3c2481e2b75c2a239b6b17bc1ba8b" +[standards.markdown-tooling.versions."1.7"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:87376b5d4c3ce027ca3db249d5d27bb7a1bc6d2e7f843b7074f8f73d2a084c10" + +[standards.markdown-tooling.versions."1.8"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:22ebe7b95ca82daa276746c9bf3f0688d15ce4b47314b7e4abea206df7212783" + +[standards.markdown-tooling.versions."1.9"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:2952838b146eddf054cc2f81c05e8cd931ff4e5de1a1e2b120760aca50927456" + +[standards.markdown-tooling.versions."1.10"] +channel = "stable" +availability = "consumer" +payload_digest = "sha256:db6b97d120ac9f31ab589c2d48926acb5713b840738dd13b6460d34632e4fc9b" + [standards.project-spec] status = "active" -available = ["1.1", "1.2", "1.3"] -default = "1.3" +available = ["1.1", "1.2", "1.3", "1.4", "1.5"] +default = "1.5" candidates = [] [standards.project-spec.versions."1.1"] @@ -131,10 +191,20 @@ availability = "consumer" payload_digest = "sha256:d5474ab7035937ac96d0551ecf9c076a71752e9e18dcfe14789d960933418c47" [standards.project-spec.versions."1.3"] -channel = "stable" +channel = "retained" availability = "consumer" payload_digest = "sha256:56de712072c586549c68cdadfe4598b63d9d7d3ea7cb4f7727fd48c6ef4084a6" +[standards.project-spec.versions."1.4"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:8ea9d9a5f82156c1f177defa4bd78d5f55693013ced2ab9d07cabce63969e845" + +[standards.project-spec.versions."1.5"] +channel = "stable" +availability = "consumer" +payload_digest = "sha256:e4286963cf591e3ee1454e5be317519b6610d3257dc61eb08de489d47ba407e1" + [standards.python-coding] status = "draft" available = ["0.5", "0.6"] @@ -152,8 +222,8 @@ payload_digest = "sha256:a4c4d6f0d61f81beeabefe48a8ef29f9789b55d7159ab01bb64b1da [standards.python-tooling] status = "active" -available = ["1.1", "1.2", "1.3", "1.4", "1.5"] -default = "1.5" +available = ["1.1", "1.2", "1.3", "1.4", "1.5", "1.6", "1.7", "1.8", "1.9", "1.10"] +default = "1.10" candidates = [] [standards.python-tooling.versions."1.1"] @@ -177,13 +247,38 @@ availability = "consumer" payload_digest = "sha256:6cece71c53909b6dcd04a50e873ce16eb98aa800203b186e472439f7986c3e5e" [standards.python-tooling.versions."1.5"] -channel = "stable" +channel = "retained" availability = "consumer" payload_digest = "sha256:734c2b975c01307ed0a27a14c8a391ca4e73334180275d50012076b506021de3" +[standards.python-tooling.versions."1.6"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:78e9f7737e78990bdb32b559b87d3ba4f975ddf4b0d0bd5f1ecac1e772da1e5b" + +[standards.python-tooling.versions."1.7"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:6ffff0fe5b82d15b1a30e23cb49dd0fba7ff8766a42bbf31f83eabb16e63e92b" + +[standards.python-tooling.versions."1.8"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:7397498723a1f683b09037c233e1872df825cd70a27c514a45bb2bacf24cb312" + +[standards.python-tooling.versions."1.9"] +channel = "retained" +availability = "consumer" +payload_digest = "sha256:299356c05185ce85d015abc04ad34c1c476d77b41e400377aa2aa942dbe7ad23" + +[standards.python-tooling.versions."1.10"] +channel = "stable" +availability = "consumer" +payload_digest = "sha256:1f397497be8e925d79f46003d7297813a7d02ea7ff0112cf523354e0a4300398" + [standards.standard-bundle-authoring] status = "active" -available = ["2.0", "2.1", "2.2", "2.3"] +available = ["2.0", "2.1", "2.2", "2.3", "2.4", "2.5", "2.6"] candidates = [] [standards.standard-bundle-authoring.versions."2.0"] @@ -205,3 +300,18 @@ payload_digest = "sha256:538d8afa6760bddd3f4be13b7b001257f028f94df4385a42e3aba5a channel = "internal" availability = "internal" payload_digest = "sha256:dbe940f518534224ccf58956a3ce02660f99be20cf161241308444eddccee7d5" + +[standards.standard-bundle-authoring.versions."2.4"] +channel = "internal" +availability = "internal" +payload_digest = "sha256:b2bdf94dffb7c8536debca60fdb4eb557cfcc364e47165a2634dccf002ca099f" + +[standards.standard-bundle-authoring.versions."2.5"] +channel = "internal" +availability = "internal" +payload_digest = "sha256:3eb5d86979755372bbe851b06b82235410378cba71c6f1b9dbc7c49557623c4d" + +[standards.standard-bundle-authoring.versions."2.6"] +channel = "internal" +availability = "internal" +payload_digest = "sha256:28756752d9a4a7c50240f178fdbc72be7f3f04faa8f8af9eabe5b0ba7b94f9d5" diff --git a/.standards/config.toml b/.standards/config.toml index f96f85a..a321cc0 100644 --- a/.standards/config.toml +++ b/.standards/config.toml @@ -31,6 +31,9 @@ config.ci = { lint_caller = true, format_caller = true } config.exclusions = [ { glob = "docs/reference/pre-migration/**", applies_to = "both", reason = "Verbatim archived ChatGPT transcript; reformatting or annotating it would destroy the historical record. Already exempt from APSEUDO fence linting per bug 003." }, { glob = "package-lock.json", applies_to = "format", reason = "npm regenerates this file and reverts Prettier's formatting on every install." }, + { glob = "products/vscode-extension/**/*.js", applies_to = "format", reason = "VS Code extension JavaScript follows its product-local formatting; root Prettier would rewrite unrelated source outside the declared Markdown and structured-config scope." }, + { glob = "products/vscode-extension/**/*.mjs", applies_to = "format", reason = "VS Code extension build scripts follow their product-local formatting; root Prettier would rewrite unrelated source outside the declared Markdown and structured-config scope." }, + { glob = "products/vscode-extension/**/*.code-snippets", applies_to = "format", reason = "VS Code snippet files preserve their product-local JSON formatting and are outside the declared structured-config extensions." }, ] [standards.project-spec] @@ -47,6 +50,7 @@ contract_version = "1.1" python_version = "3.14" build_backend = "uv_build" source_layout = "src" +additional_source_roots = [{ path = "media/repository-explainer", coverage = false }] additional_dev_dependencies = [] workflow_ownership = "managed" script_ownership = "managed" diff --git a/.standards/lock.toml b/.standards/lock.toml index 9a5298d..1bf0ebb 100644 --- a/.standards/lock.toml +++ b/.standards/lock.toml @@ -1,65 +1,65 @@ [project_standards] schema_version = "1.1" catalog = "5" -release = "5.4.0" -catalog_digest = "sha256:a10514875f75550b32fe2a0c29bedab933f7126c59a19f7f819f5e84a051a0be" -config_digest = "sha256:4377e6c309a41694cd61c29c6d90e64cf8b4732705e11c0e4b1b8ee89ec184e6" +release = "5.11.0" +catalog_digest = "sha256:492b1cc8a18b5e14974282bd8a797f27595398c27ad983a0934bdfc4562876e9" +config_digest = "sha256:4def54bc6f17e09fa72693d54294acefd39ce14e508e37b1b682a164460b3286" [standards.adr] requested = "latest" -resolved = "1.2" +resolved = "1.3" selection = "stable" -payload_digest = "sha256:5b36e6f63a2477f2c7c5bcef647edc8b674366eb64937aba646aefc65d8a6f21" +payload_digest = "sha256:6c5d8da41c80658cb701b5aedd17a93149aab5e8dab4caa58f8e0047bf645d1f" effective_config_digest = "sha256:7ddd7f39d1a9bff9867c1cfd91e6abb614e4e1efecf3574789161ff92c89dd38" [standards.agent-handoff] requested = "latest" -resolved = "1.3" +resolved = "1.6" selection = "stable" -payload_digest = "sha256:3e6e53f9ba889b7f68624c1c3861c5e26ac889a6025c4fb7b819b49e140d1f78" +payload_digest = "sha256:97041fb9a47c28cf0e2dd38c2de32be827af4b079de3943d6b74675bf52d81f8" effective_config_digest = "sha256:7d8ffcf355d1948151d6988e6b8cb809fcbeae2cc28cd3cd0bcd665563eef80f" [standards.cli-documentation] requested = "latest" -resolved = "1.3" +resolved = "1.5" selection = "stable" -payload_digest = "sha256:2c15f700fd343327b675295579220572fea9f2735386da5aa266d38839a7f9c4" -effective_config_digest = "sha256:3b96574666ef267d6b58489411ca57f25083c7334af615dc64f8a590e1e63917" +payload_digest = "sha256:90bd59f457ec467da0990bbf89667f534753768be79530c7bfdde9c791d3b618" +effective_config_digest = "sha256:42d92624b0b224a8bc7eeb745229b621acf42d6412a5a87cc170ade2fae4b36a" [standards.markdown-frontmatter] requested = "latest" -resolved = "1.4" +resolved = "1.6" selection = "stable" -payload_digest = "sha256:a981a54cb6c6a36e2bfb73eca61c9b84100da67b072cd07c7c4ffea4b0593647" -effective_config_digest = "sha256:29dbba2c46fe5452f62427140bcd0d4cf1ea39bc0cf5a73b13ac4a0450d3de89" +payload_digest = "sha256:cf1e2c975d5f139f1b3864090e6fcc0e45dcb895a97dd07113c0eeb7af0d0f32" +effective_config_digest = "sha256:5a82f128c0322a842492e926ebd6255539716eb923804c5771d3afa5a1a0c76f" [standards.markdown-tooling] requested = "latest" -resolved = "1.6" +resolved = "1.10" selection = "stable" -payload_digest = "sha256:cf123371ac92c23942a37a5765b99d1af4f3c2481e2b75c2a239b6b17bc1ba8b" -effective_config_digest = "sha256:eadeedfa9940caa78cce8c0e2155eca4fa91a0f899fbdbb53208ee1cfce0a115" +payload_digest = "sha256:db6b97d120ac9f31ab589c2d48926acb5713b840738dd13b6460d34632e4fc9b" +effective_config_digest = "sha256:c10d508404917f108b8008e7087d62a06b98f289170b53eff93025cc2abba8d2" [standards.project-spec] requested = "latest" -resolved = "1.3" +resolved = "1.5" selection = "stable" -payload_digest = "sha256:56de712072c586549c68cdadfe4598b63d9d7d3ea7cb4f7727fd48c6ef4084a6" +payload_digest = "sha256:e4286963cf591e3ee1454e5be317519b6610d3257dc61eb08de489d47ba407e1" effective_config_digest = "sha256:2234914cdf8e16e60021bbcc801c1dbd7ef548209b8ba4fa02b2467053225ee2" [standards.python-tooling] requested = "latest" -resolved = "1.5" +resolved = "1.10" selection = "stable" -payload_digest = "sha256:734c2b975c01307ed0a27a14c8a391ca4e73334180275d50012076b506021de3" -effective_config_digest = "sha256:a54b8c4cb4b8d1717d7dfcc6fd3e6a2ca06d3bf952a2462690d92008ec8168a0" +payload_digest = "sha256:1f397497be8e925d79f46003d7297813a7d02ea7ff0112cf523354e0a4300398" +effective_config_digest = "sha256:3f3cb6d7e0be650cf45c2df4d0273090864cc9555a66f3787e952ebd310ad295" [[artifacts]] path = ".agents/hooks/agent-handoff/session_start.py" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "managed" semantic_digest = "sha256:db2aad1965561c9d491eff3dc99520768bc4b3f89c2ee7e15ac922381bf15780" @@ -72,7 +72,7 @@ path = ".agents/skills/agent-handoff/SKILL.md" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "managed" semantic_digest = "sha256:946542a565303426fd4b28d1b138fadde942bd43c00e26bf06f77f9f1a553896" @@ -84,7 +84,7 @@ path = ".agents/skills/agent-handoff/agents/openai.yaml" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "managed" semantic_digest = "sha256:1b78fb94b81aad4df0bbf149a6d4c47b887fbe31e19818723bde5579ec33413c" @@ -96,11 +96,11 @@ path = ".agents/skills/markdown-frontmatter/SKILL.md" adapter = "whole-file" scope = "$file" owners = ["markdown-frontmatter"] -versions = { markdown-frontmatter = "1.4" } +versions = { markdown-frontmatter = "1.6" } provenance = "source" policy = "managed" -semantic_digest = "sha256:f674f9b63526e94ceb85dabd2e0fa08915282016fe3713da4cbc8fbaa609a520" -content_digest = "sha256:f674f9b63526e94ceb85dabd2e0fa08915282016fe3713da4cbc8fbaa609a520" +semantic_digest = "sha256:e29884350f5cd6a3e82be77ec104d58bfa3d5dac625b1eab74fc1d5b42b73796" +content_digest = "sha256:e29884350f5cd6a3e82be77ec104d58bfa3d5dac625b1eab74fc1d5b42b73796" created_container = true [[artifacts]] @@ -108,7 +108,7 @@ path = ".agents/skills/markdown-frontmatter/agents/openai.yaml" adapter = "whole-file" scope = "$file" owners = ["markdown-frontmatter"] -versions = { markdown-frontmatter = "1.4" } +versions = { markdown-frontmatter = "1.6" } provenance = "source" policy = "managed" semantic_digest = "sha256:d63c2c63683e78fa9adb10e7004fe9315b18a069240c4457e39cdc167951716c" @@ -120,7 +120,7 @@ path = ".agents/skills/markdown-frontmatter/scripts/new-doc-id" adapter = "whole-file" scope = "$file" owners = ["markdown-frontmatter"] -versions = { markdown-frontmatter = "1.4" } +versions = { markdown-frontmatter = "1.6" } provenance = "source" policy = "managed" semantic_digest = "sha256:cd35b1bcbd0630e18c9560aa40e579555204918f26b73c9da7ae3f0d48958f95" @@ -133,7 +133,7 @@ path = ".claude/settings.json" adapter = "jsonc" scope = "keyed-set:/hooks/SessionStart#matcher=startup|resume|clear|compact" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "provider" policy = "managed" semantic_digest = "sha256:824f897caa9eef5e7d50921e8eda3ece3f6d5f77e514fa58809751bacc4b2ac1" @@ -145,7 +145,7 @@ path = ".codex/config.toml" adapter = "toml" scope = "keyed-set:/hooks/SessionStart#matcher=startup|resume|clear|compact" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "provider" policy = "managed" semantic_digest = "sha256:bf93dc25849b2ea719ee310aca8c779d5ccf3c65adb5bb7466fd58004dd8a484" @@ -158,7 +158,7 @@ adapter = "editorconfig" scope = "property:$global#root" owners = ["markdown-tooling", "python-tooling"] shared_identity = "editorconfig/root" -versions = { markdown-tooling = "1.6", python-tooling = "1.5" } +versions = { markdown-tooling = "1.10", python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:18d10c7d2b4b04aaf04254d1ae5d655a5dc0407cbcdd5a8c3986e985370f36ee" @@ -171,7 +171,7 @@ adapter = "editorconfig" scope = "property:*#charset" owners = ["markdown-tooling", "python-tooling"] shared_identity = "editorconfig/global-charset" -versions = { markdown-tooling = "1.6", python-tooling = "1.5" } +versions = { markdown-tooling = "1.10", python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:d98383a6cb0943d0f3b771d8bf29de73aac12e12bdcea69140c3cdc493f55b30" @@ -184,7 +184,7 @@ adapter = "editorconfig" scope = "property:*#end_of_line" owners = ["markdown-tooling", "python-tooling"] shared_identity = "editorconfig/global-end-of-line" -versions = { markdown-tooling = "1.6", python-tooling = "1.5" } +versions = { markdown-tooling = "1.10", python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:c8b65fc15ea0c7911e3abe010ae974bab6d9db25ee4a6a7b4e6adc430f37985b" @@ -197,7 +197,7 @@ adapter = "editorconfig" scope = "property:*#indent_size" owners = ["markdown-tooling", "python-tooling"] shared_identity = "editorconfig/global-indent-size" -versions = { markdown-tooling = "1.6", python-tooling = "1.5" } +versions = { markdown-tooling = "1.10", python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:cc11310c456c3690d5a74c23aa31cc25b4e74cdae146c71e54ad9dbc1d109fde" @@ -210,7 +210,7 @@ adapter = "editorconfig" scope = "property:*#indent_style" owners = ["markdown-tooling", "python-tooling"] shared_identity = "editorconfig/global-indent-style" -versions = { markdown-tooling = "1.6", python-tooling = "1.5" } +versions = { markdown-tooling = "1.10", python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:6845cfa533c61a5eafa685e996c9ea37d2c6443cacedb28c3eed0156fcdbc488" @@ -223,7 +223,7 @@ adapter = "editorconfig" scope = "property:*#insert_final_newline" owners = ["markdown-tooling", "python-tooling"] shared_identity = "editorconfig/global-final-newline" -versions = { markdown-tooling = "1.6", python-tooling = "1.5" } +versions = { markdown-tooling = "1.10", python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:18d10c7d2b4b04aaf04254d1ae5d655a5dc0407cbcdd5a8c3986e985370f36ee" @@ -236,7 +236,7 @@ adapter = "editorconfig" scope = "property:*#trim_trailing_whitespace" owners = ["markdown-tooling", "python-tooling"] shared_identity = "editorconfig/global-trailing-whitespace" -versions = { markdown-tooling = "1.6", python-tooling = "1.5" } +versions = { markdown-tooling = "1.10", python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:18d10c7d2b4b04aaf04254d1ae5d655a5dc0407cbcdd5a8c3986e985370f36ee" @@ -248,7 +248,7 @@ path = ".editorconfig" adapter = "editorconfig" scope = "property:*.md#indent_size" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:cc11310c456c3690d5a74c23aa31cc25b4e74cdae146c71e54ad9dbc1d109fde" @@ -260,7 +260,7 @@ path = ".editorconfig" adapter = "editorconfig" scope = "property:*.md#indent_style" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:85bd93ed6b151e5258fb73c81c18d745d1a1b1c418eed9b32f6bba00a75a326a" @@ -272,7 +272,7 @@ path = ".editorconfig" adapter = "editorconfig" scope = "property:*.md#trim_trailing_whitespace" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:076de6e730df0b4c3860877a0f619c6ac11f8aefd78313ac793a2a703c026869" @@ -284,7 +284,7 @@ path = ".editorconfig" adapter = "editorconfig" scope = "property:*.py#indent_size" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:2bf175f9655e7bb7357b9f0a7c6051465a5ae701104ffe741b98e852c0e4d460" @@ -296,7 +296,7 @@ path = ".editorconfig" adapter = "editorconfig" scope = "property:*.py#indent_style" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:85bd93ed6b151e5258fb73c81c18d745d1a1b1c418eed9b32f6bba00a75a326a" @@ -308,7 +308,7 @@ path = ".editorconfig" adapter = "editorconfig" scope = "property:*.toml#indent_size" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:2bf175f9655e7bb7357b9f0a7c6051465a5ae701104ffe741b98e852c0e4d460" @@ -320,7 +320,7 @@ path = ".editorconfig" adapter = "editorconfig" scope = "property:*.toml#indent_style" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:85bd93ed6b151e5258fb73c81c18d745d1a1b1c418eed9b32f6bba00a75a326a" @@ -332,7 +332,7 @@ path = ".editorconfig" adapter = "editorconfig" scope = "property:*.{yml,yaml}#indent_size" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:cc11310c456c3690d5a74c23aa31cc25b4e74cdae146c71e54ad9dbc1d109fde" @@ -344,7 +344,7 @@ path = ".editorconfig" adapter = "editorconfig" scope = "property:*.{yml,yaml}#indent_style" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:85bd93ed6b151e5258fb73c81c18d745d1a1b1c418eed9b32f6bba00a75a326a" @@ -356,7 +356,7 @@ path = ".github/workflows/check.yml" adapter = "whole-file" scope = "$file" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:574193ff5e3ff8cc3c9334883f6af7820eb5219419d89766836da87b2c827a5b" @@ -368,11 +368,11 @@ path = ".github/workflows/format.yml" adapter = "whole-file" scope = "$file" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" -semantic_digest = "sha256:6031f12b61a5a9b672adfc2673afff82d16a2c3dd5a29fd8b8d6a80ccc9056de" -content_digest = "sha256:6031f12b61a5a9b672adfc2673afff82d16a2c3dd5a29fd8b8d6a80ccc9056de" +semantic_digest = "sha256:1d1c41a84f2e0dd7f0a6d3d3d526824e638b71ae6a3c9ab2e8ef0dc678e8ddd7" +content_digest = "sha256:1d1c41a84f2e0dd7f0a6d3d3d526824e638b71ae6a3c9ab2e8ef0dc678e8ddd7" created_container = true [[artifacts]] @@ -380,11 +380,11 @@ path = ".github/workflows/lint-markdown.yml" adapter = "whole-file" scope = "$file" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" -semantic_digest = "sha256:cf15bc66537c72cd270ab5fc07f1d28348c3424fe28b396e6e5bc1af82c281c4" -content_digest = "sha256:cf15bc66537c72cd270ab5fc07f1d28348c3424fe28b396e6e5bc1af82c281c4" +semantic_digest = "sha256:5225c3d9120f701e772dee7c743fb891fffbb6f8443f32d5094526cedf5a21e5" +content_digest = "sha256:5225c3d9120f701e772dee7c743fb891fffbb6f8443f32d5094526cedf5a21e5" created_container = true [[artifacts]] @@ -392,7 +392,7 @@ path = ".github/workflows/validate-specs.yml" adapter = "whole-file" scope = "$file" owners = ["project-spec"] -versions = { project-spec = "1.3" } +versions = { project-spec = "1.5" } provenance = "provider" policy = "managed" semantic_digest = "sha256:dd3cc398f3f4264aba826e88b9c5f911d0cd6b930343b361ac2604a6b1a8e89b" @@ -404,7 +404,7 @@ path = ".github/workflows/validate-standards.yml" adapter = "yaml" scope = "key:/jobs/frontmatter" owners = ["markdown-frontmatter"] -versions = { markdown-frontmatter = "1.4" } +versions = { markdown-frontmatter = "1.6" } provenance = "provider" policy = "managed" semantic_digest = "sha256:a5c3a5855628d6abd49e63a25a3c6171a94a0f5e5c62ab2a48ea1db4aeeb2013" @@ -417,7 +417,7 @@ adapter = "yaml" scope = "key:/name" owners = ["markdown-frontmatter"] shared_identity = "github-workflow/validate-standards-name" -versions = { markdown-frontmatter = "1.4" } +versions = { markdown-frontmatter = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:5a736be1ee4a3bcf1f3e0b23b0fec3236f10f0c5b44348e262a810f92f9b4049" @@ -430,7 +430,7 @@ adapter = "yaml" scope = "key:/on" owners = ["markdown-frontmatter"] shared_identity = "github-workflow/validate-standards-triggers" -versions = { markdown-frontmatter = "1.4" } +versions = { markdown-frontmatter = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:8a324c0626f6d862860cca96e075031faea73ddbc51d230f2c6ea2d54088c164" @@ -442,7 +442,7 @@ path = ".github/workflows/validate-standards.yml" adapter = "yaml" scope = "key:/permissions" owners = ["markdown-frontmatter"] -versions = { markdown-frontmatter = "1.4" } +versions = { markdown-frontmatter = "1.6" } provenance = "source" policy = "managed" semantic_digest = "sha256:d8d6aceb1abc41990618a503082c3badcca8897feee0976f222af5b74e30bec2" @@ -454,11 +454,11 @@ path = ".markdownlint.json" adapter = "whole-file" scope = "$file" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "source" policy = "managed" -semantic_digest = "sha256:51204b5170e47da3716d3870d36ef1eb4b28a27d7289c65f7f1457943c499793" -content_digest = "sha256:51204b5170e47da3716d3870d36ef1eb4b28a27d7289c65f7f1457943c499793" +semantic_digest = "sha256:c6a0217de8adbab6e24038f98577de8fa2f90062b873cc97b6bd2c09f89dba2b" +content_digest = "sha256:c6a0217de8adbab6e24038f98577de8fa2f90062b873cc97b6bd2c09f89dba2b" created_container = false [[artifacts]] @@ -466,7 +466,7 @@ path = ".prettierrc.json" adapter = "whole-file" scope = "$file" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "source" policy = "managed" semantic_digest = "sha256:aa5c52bc44dc778a8842fc0bf5619f1f72f168d9dde297083fbbb0c372467b6b" @@ -478,7 +478,7 @@ path = ".python-version" adapter = "whole-file" scope = "$file" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:a876e0b10411037a012498b9fe18d9bc1df32ed8b722a13564dc944ddcfd9135" @@ -490,7 +490,7 @@ path = ".standards/packages/agent-handoff/policy.toml" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "managed" semantic_digest = "sha256:ca67fa9232375073d9dec834af6053057f31069ca83054e61948d2738a6e3e92" @@ -502,11 +502,11 @@ path = ".standards/packages/markdown-frontmatter/agent-summary.md" adapter = "whole-file" scope = "$file" owners = ["markdown-frontmatter"] -versions = { markdown-frontmatter = "1.4" } +versions = { markdown-frontmatter = "1.6" } provenance = "source" policy = "managed" -semantic_digest = "sha256:7c0a2ef74080f879d68a9031028e2ae87e3e11c5ac0206af1e105b8caa07eaa3" -content_digest = "sha256:7c0a2ef74080f879d68a9031028e2ae87e3e11c5ac0206af1e105b8caa07eaa3" +semantic_digest = "sha256:290c3a95bdf6cdeaa74a959fe7c6086cc558329705ed463371ab9a4e2c4ce93c" +content_digest = "sha256:290c3a95bdf6cdeaa74a959fe7c6086cc558329705ed463371ab9a4e2c4ce93c" created_container = true [[artifacts]] @@ -515,7 +515,7 @@ adapter = "jsonc" scope = "set:/recommendations#value=DavidAnson.vscode-markdownlint" owners = ["markdown-tooling"] shared_identity = "vscode-extension/davidanson-vscode-markdownlint" -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:78643a2bac04eb88085f6b65b053bda6607ecc70f2ea57175f03e95f6818ba68" @@ -527,7 +527,7 @@ path = ".vscode/extensions.json" adapter = "jsonc" scope = "set:/recommendations#value=charliermarsh.ruff" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:26aa9300e53b8ad76104b957913a31f265ad0d68457f50990eeb418c5b8abcf9" @@ -539,7 +539,7 @@ path = ".vscode/extensions.json" adapter = "jsonc" scope = "set:/recommendations#value=detachhead.basedpyright" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:d74ce569828a4901afe81bfeae8db4b934eb140cf8f647fb3f7478e3e66cc98f" @@ -551,7 +551,7 @@ path = ".vscode/extensions.json" adapter = "jsonc" scope = "set:/recommendations#value=editorconfig.editorconfig" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:2958cf4436185c867cb841b536da88d4ba531608b45eb9a0228bb185980cfd49" @@ -564,7 +564,7 @@ adapter = "jsonc" scope = "set:/recommendations#value=esbenp.prettier-vscode" owners = ["markdown-tooling"] shared_identity = "vscode-extension/esbenp-prettier-vscode" -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:a217903a7c1559e838e695fde2214c4626b0e0eaf83f65ad84afbe7f25a2379a" @@ -576,7 +576,7 @@ path = ".vscode/extensions.json" adapter = "jsonc" scope = "set:/recommendations#value=github.vscode-github-actions" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:24a9f4a729004ef1149afedf6d8f79f860ac6bd5274333b691500bf9ba9c8009" @@ -588,7 +588,7 @@ path = ".vscode/extensions.json" adapter = "jsonc" scope = "set:/recommendations#value=ms-python.python" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:5716cd59c10c4299dba311790d7896a6b73a4692743b39f81e69e4fe803b217d" @@ -600,7 +600,7 @@ path = ".vscode/extensions.json" adapter = "jsonc" scope = "set:/recommendations#value=redhat.vscode-yaml" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:1d0b063d17a552ab6585adfa6109ffa4777d8ff0e4cbc0b7512131014cd9fb97" @@ -612,7 +612,7 @@ path = ".vscode/extensions.json" adapter = "jsonc" scope = "set:/recommendations#value=tamasfe.even-better-toml" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:ca5edff0e5ff7953f95c49eb09d7a7debae822e66f8e92eb2e5f71f889e0a363" @@ -624,7 +624,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/[json]/editor.defaultFormatter" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:a217903a7c1559e838e695fde2214c4626b0e0eaf83f65ad84afbe7f25a2379a" @@ -636,7 +636,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/[jsonc]/editor.defaultFormatter" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:a217903a7c1559e838e695fde2214c4626b0e0eaf83f65ad84afbe7f25a2379a" @@ -648,7 +648,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/[markdown]/editor.defaultFormatter" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:a217903a7c1559e838e695fde2214c4626b0e0eaf83f65ad84afbe7f25a2379a" @@ -660,7 +660,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/[markdown]/editor.formatOnSave" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b" @@ -672,7 +672,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/[python]/editor.codeActionsOnSave" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:92f8ef99544180499fdd0bd5f4b1a63f47db1786d0b13ffde701c9d31d497c41" @@ -684,7 +684,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/[python]/editor.defaultFormatter" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:26aa9300e53b8ad76104b957913a31f265ad0d68457f50990eeb418c5b8abcf9" @@ -696,7 +696,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/[python]/editor.formatOnSave" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b" @@ -708,7 +708,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/[yaml]/editor.defaultFormatter" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:a217903a7c1559e838e695fde2214c4626b0e0eaf83f65ad84afbe7f25a2379a" @@ -720,7 +720,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/basedpyright.analysis.typeCheckingMode" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:eff4de313d407ce043152fe4e47b90c07a40fd69e060faef88306b653c2df7ca" @@ -732,19 +732,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/files.exclude/**~1.coverage" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } -provenance = "provider" -policy = "managed" -semantic_digest = "sha256:b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b" -content_digest = "sha256:b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b" -created_container = false - -[[artifacts]] -path = ".vscode/settings.json" -adapter = "jsonc" -scope = "key:/files.exclude/**~1.mypy_cache" -owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b" @@ -756,7 +744,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/files.exclude/**~1.pytest_cache" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b" @@ -768,7 +756,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/files.exclude/**~1.ruff_cache" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b" @@ -780,7 +768,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/files.exclude/**~1__pycache__" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b" @@ -792,7 +780,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/python.analysis.typeCheckingMode" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:9f3becba6e4b1583b3e19441dde4d59622537d9bd54a94d22262785e485384d0" @@ -804,7 +792,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/python.defaultInterpreterPath" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:2d3d3f05ddcf0042b10e3d624e66f10ea8327c7bc0fde7b7e4be3bc72bc32f1c" @@ -816,7 +804,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/python.testing.pytestArgs" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:af7f0b2bd342822f2fa8e6a9fda610570f911f30d3108379ea4184c0866727c3" @@ -828,7 +816,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/python.testing.pytestEnabled" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b" @@ -840,7 +828,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/python.testing.unittestEnabled" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:fcbcf165908dd18a9e49f7ff27810176db8e9f63b4352213741664245224f8aa" @@ -852,7 +840,7 @@ path = ".vscode/settings.json" adapter = "jsonc" scope = "key:/ruff.nativeServer" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:990c23868b965814b117cf9a6c4dfe45452eadc2171e1f981865ebfc84f10724" @@ -864,7 +852,7 @@ path = ".vscode/tasks.json" adapter = "jsonc" scope = "key:/version" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:0175d86befbe75525f132794baff42abbf4e2a659aa20f2baec341740a9573e7" @@ -876,7 +864,7 @@ path = ".vscode/tasks.json" adapter = "jsonc" scope = "keyed-set:/tasks#label=audit" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:3266291539b0148eece97d6671b6a038ddd8dff48b3af0e4afb8156ce7564e5d" @@ -888,7 +876,7 @@ path = ".vscode/tasks.json" adapter = "jsonc" scope = "keyed-set:/tasks#label=check" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:795429ac8d09458d1b9110a105d6e57442e66bacab4d683c5a8c06731f3766d6" @@ -900,7 +888,7 @@ path = ".vscode/tasks.json" adapter = "jsonc" scope = "keyed-set:/tasks#label=fix" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:042ab0eaf68a0c6b9438a170ef127b9bd270618cf78346d14d5825a11c1be15a" @@ -912,7 +900,7 @@ path = ".vscode/tasks.json" adapter = "jsonc" scope = "keyed-set:/tasks#label=test" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:a48b5a69752a6cb4753bcbae1dd4fdea332c16e7e788f901455ddfe05cb48d20" @@ -924,7 +912,7 @@ path = ".vscode/tasks.json" adapter = "jsonc" scope = "keyed-set:/tasks#label=typecheck" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:5775bd9b3e14be9f5607456d450b83e679c0cded9c86678bb0b108af38b99cc0" @@ -936,7 +924,7 @@ path = "AGENTS.md" adapter = "markdown-block" scope = "block:agent-handoff" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "provider" policy = "managed" semantic_digest = "sha256:632f927e3f1b4e9b02ab5d86cfbd4d802fe8079db8bfd77f42a63a92fbdb095d" @@ -948,11 +936,11 @@ path = "AGENTS.md" adapter = "markdown-block" scope = "block:markdown-tooling" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" -semantic_digest = "sha256:cc15eeafcbf292acd5001077a64ccde3c499de4101a99b602d1e07d7e2239f15" -content_digest = "sha256:cc15eeafcbf292acd5001077a64ccde3c499de4101a99b602d1e07d7e2239f15" +semantic_digest = "sha256:9feddbcd8c45d492693fb65af29658912a32735f7fe7cbbc7e0ae9b59cb68ce3" +content_digest = "sha256:9feddbcd8c45d492693fb65af29658912a32735f7fe7cbbc7e0ae9b59cb68ce3" created_container = false [[artifacts]] @@ -960,7 +948,7 @@ path = "AGENTS.md" adapter = "markdown-block" scope = "block:python-tooling" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:557b160403cbd67d942041798a67d3b2b2354edb79ca1dc21014a1b99bf9e903" @@ -972,7 +960,7 @@ path = "CLAUDE.md" adapter = "markdown-block" scope = "block:agent-handoff" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "provider" policy = "managed" semantic_digest = "sha256:632f927e3f1b4e9b02ab5d86cfbd4d802fe8079db8bfd77f42a63a92fbdb095d" @@ -984,11 +972,11 @@ path = "CLAUDE.md" adapter = "markdown-block" scope = "block:markdown-tooling" owners = ["markdown-tooling"] -versions = { markdown-tooling = "1.6" } +versions = { markdown-tooling = "1.10" } provenance = "provider" policy = "managed" -semantic_digest = "sha256:cc15eeafcbf292acd5001077a64ccde3c499de4101a99b602d1e07d7e2239f15" -content_digest = "sha256:cc15eeafcbf292acd5001077a64ccde3c499de4101a99b602d1e07d7e2239f15" +semantic_digest = "sha256:9feddbcd8c45d492693fb65af29658912a32735f7fe7cbbc7e0ae9b59cb68ce3" +content_digest = "sha256:9feddbcd8c45d492693fb65af29658912a32735f7fe7cbbc7e0ae9b59cb68ce3" created_container = false [[artifacts]] @@ -996,7 +984,7 @@ path = "CLAUDE.md" adapter = "markdown-block" scope = "block:python-tooling" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:557b160403cbd67d942041798a67d3b2b2354edb79ca1dc21014a1b99bf9e903" @@ -1008,7 +996,7 @@ path = "docs/STATUS.md" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:c1c3fff1c3152bfb6d53d3ee5c90ebef3319bd2bf2e8edd3cfa8770ada8b84f7" @@ -1020,7 +1008,7 @@ path = "docs/TODO.md" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:d30524ab16f45bb57ff2420b08cb3bfc526ce0959dcb4ba1eefcaa232df42772" @@ -1032,7 +1020,7 @@ path = "docs/adr/adr.template.md" adapter = "whole-file" scope = "$file" owners = ["adr"] -versions = { adr = "1.2" } +versions = { adr = "1.3" } provenance = "source" policy = "create-only" semantic_digest = "sha256:f6ac2567ea1116a1596ecf0477f194d8ad360401e06a64f6a5d2f1b09f3135d7" @@ -1044,7 +1032,7 @@ path = "docs/handoff/architecture.md" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:03caed193170ca0769e2fd500bc0e0e79caa5d417bed8c3b41dc18cdb25c7b9d" @@ -1056,7 +1044,7 @@ path = "docs/handoff/bugs/.gitkeep" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" @@ -1068,7 +1056,7 @@ path = "docs/handoff/conventions.md" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:efba9ce7b5b1e7f73feb9b9abd31048b4624444080c1603193a076faff047169" @@ -1080,7 +1068,7 @@ path = "docs/handoff/credentials.md" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:95e7b8e84e282ffcf5ff09c311d404803a78e47fe53ad231258a2007d8f6685f" @@ -1092,7 +1080,7 @@ path = "docs/handoff/deployed.md" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:b75fe8480c82d4f4ce35f8e4ed5d28f06ec105e0f2d8c16bfc7060c06d4b7256" @@ -1104,7 +1092,7 @@ path = "docs/handoff/sessions/.gitkeep" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:01ba4719c80b6fe911b091a7c05124b64eeece964e09c058ef8f9805daca546b" @@ -1116,7 +1104,7 @@ path = "docs/handoff/specs-plans.md" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:5b1f457e7fa41017e3f15c88b7c88c66b24c476fa695ce59707a7effe1aea3ca" @@ -1128,7 +1116,7 @@ path = "docs/handoff/state.md" adapter = "whole-file" scope = "$file" owners = ["agent-handoff"] -versions = { agent-handoff = "1.3" } +versions = { agent-handoff = "1.6" } provenance = "source" policy = "create-only" semantic_digest = "sha256:7dc4ef477e547c7a70118a58be6905025641a352d422f4dd8d1ef8b9c9f14a24" @@ -1140,8 +1128,8 @@ path = "docs/usage.md" adapter = "whole-file" scope = "$file" owners = ["cli-documentation"] -versions = { cli-documentation = "1.3" } -provenance = "source" +versions = { cli-documentation = "1.5" } +provenance = "provider" policy = "create-only" semantic_digest = "sha256:502f364f929bbe4e5bfbab73d232d664e1c1f8af47480bc93f402f3c34e6c8bf" content_digest = "sha256:502f364f929bbe4e5bfbab73d232d664e1c1f8af47480bc93f402f3c34e6c8bf" @@ -1152,7 +1140,7 @@ path = "pyproject.toml" adapter = "toml" scope = "key:/dependency-groups/dev" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:74be9cdf858e33d2e844f57a7a3140fdf8ee55c277831a2860932fc74402615d" @@ -1164,7 +1152,7 @@ path = "pyproject.toml" adapter = "toml" scope = "key:/tool/basedpyright/failOnWarnings" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:b5bea41b6c623f7c09f1bf24dcae58ebab3c0cdd90ad966bc43a45b44867e12b" @@ -1176,11 +1164,11 @@ path = "pyproject.toml" adapter = "toml" scope = "key:/tool/basedpyright/include" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" -semantic_digest = "sha256:87640c19e0e551ec9d755a833b649b1f2753b049d9848f5e86c3b900aad15f0f" -content_digest = "sha256:0d158e2d44c7bdfd6fbcf113b074b98a23450e5f010dce0de2217bd279de3d9e" +semantic_digest = "sha256:b9b8b3ddeb1d50a6c6c294d8cb900ddc63221c80e69dce7af83d5cbea019c40c" +content_digest = "sha256:ab65308339bfd56cf2e97873378e1e51e9dcdc0d762ac1c16bc940f1d70e02c4" created_container = false [[artifacts]] @@ -1188,7 +1176,7 @@ path = "pyproject.toml" adapter = "toml" scope = "key:/tool/basedpyright/pythonPlatform" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:663175a9c461a96d6f0252fc22dbb8ed4951e7a6fc0e31546823bcc69d6021d1" @@ -1200,7 +1188,7 @@ path = "pyproject.toml" adapter = "toml" scope = "key:/tool/basedpyright/pythonVersion" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:4abcdd30bedbd46f74e90fe4981097181da5ea847e8fcde4d5585034dadbd885" @@ -1212,7 +1200,7 @@ path = "pyproject.toml" adapter = "toml" scope = "key:/tool/basedpyright/typeCheckingMode" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:eff4de313d407ce043152fe4e47b90c07a40fd69e060faef88306b653c2df7ca" @@ -1224,7 +1212,7 @@ path = "pyproject.toml" adapter = "toml" scope = "key:/tool/pytest/ini_options/addopts" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:3cc10869984e83cd949eb464774ad190fee5b38cf003859d4d200088a7b2cd1b" @@ -1236,7 +1224,7 @@ path = "pyproject.toml" adapter = "toml" scope = "key:/tool/pytest/ini_options/markers" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:4f53cda18c2baa0c0354bb5f9a3ecbe5ed12ab4d8e11ba873c2f11161202b945" @@ -1248,7 +1236,7 @@ path = "pyproject.toml" adapter = "toml" scope = "key:/tool/pytest/ini_options/minversion" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:ed6cca0a64012053f167c68379c763281ad76b98b00398321fcc47a0f4f93c02" @@ -1260,7 +1248,7 @@ path = "pyproject.toml" adapter = "toml" scope = "key:/tool/pytest/ini_options/testpaths" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:af7f0b2bd342822f2fa8e6a9fda610570f911f30d3108379ea4184c0866727c3" @@ -1272,7 +1260,7 @@ path = "pyproject.toml" adapter = "toml" scope = "table:/build-system" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:5154a4bf4845afa7647ec95d7953c788d8bbfee0ba3789a2d5127ba8c4b7d9c0" @@ -1284,7 +1272,7 @@ path = "pyproject.toml" adapter = "toml" scope = "table:/tool/coverage/report" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:7a7a585c04382f8a97e4cee6f16dac406b6df727ef3e57c05d1891303e52a8b8" @@ -1296,7 +1284,7 @@ path = "pyproject.toml" adapter = "toml" scope = "table:/tool/coverage/run" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" semantic_digest = "sha256:6fc5718b0801bc98b8bafcf3b5f16914f9934194008ab2e4fd26f7ce9e9adfc9" @@ -1308,11 +1296,11 @@ path = "pyproject.toml" adapter = "toml" scope = "table:/tool/ruff" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" -semantic_digest = "sha256:b7a0cf6bacec833529e467c6eed2bfab52fa5a81dc14efe8eb3920098f65be9d" -content_digest = "sha256:13023337739dbddc7e81f949e662357ed66f8d464e33d2caa7a280a1a79032ba" +semantic_digest = "sha256:2d37d90b97f3c48fba186dc24e91972988f244d29527384726f8b8cd9364b358" +content_digest = "sha256:3b9a2a72b166595cc5464743b00676c4ddc599f66880750aab347c834aa9b843" created_container = false [[artifacts]] @@ -1320,9 +1308,9 @@ path = "scripts/check.py" adapter = "whole-file" scope = "$file" owners = ["python-tooling"] -versions = { python-tooling = "1.5" } +versions = { python-tooling = "1.10" } provenance = "provider" policy = "managed" -semantic_digest = "sha256:3e4372ec5c51594b3bbb3a4b270999ab8251d3876390f230b5a9855cc51bb0e6" -content_digest = "sha256:3e4372ec5c51594b3bbb3a4b270999ab8251d3876390f230b5a9855cc51bb0e6" +semantic_digest = "sha256:cb5b4105b9125a7d40f2e5d9d1e557e9a4d5eddb416909c33a661c8e8e32ece4" +content_digest = "sha256:cb5b4105b9125a7d40f2e5d9d1e557e9a4d5eddb416909c33a661c8e8e32ece4" created_container = true diff --git a/.standards/packages/markdown-frontmatter/agent-summary.md b/.standards/packages/markdown-frontmatter/agent-summary.md index 84ba749..c801b53 100644 --- a/.standards/packages/markdown-frontmatter/agent-summary.md +++ b/.standards/packages/markdown-frontmatter/agent-summary.md @@ -1,8 +1,8 @@ # Markdown Frontmatter Standard: Agent Summary -The canonical [Markdown Frontmatter 1.4 standard](https://github.com/L3DigitalNet/project-standards/blob/v5/standards/markdown-frontmatter/versions/1.4/README.md) is authoritative and wins if this summary conflicts with it. +The canonical [Markdown Frontmatter 1.6 standard](https://github.com/L3DigitalNet/project-standards/blob/v5.10.0/standards/markdown-frontmatter/versions/1.6/README.md) is authoritative and wins if this summary conflicts with it. -Lifecycle: active. Package: `markdown-frontmatter@1.4`. +Lifecycle: active. Package: `markdown-frontmatter@1.6`. ## Use this summary when @@ -11,7 +11,7 @@ Add, repair, or validate metadata on Markdown paths selected by the `markdown-fr ## Core rules - Every managed document has the eleven minimal fields in canonical order: `schema_version`, `id`, `title`, `description`, `doc_type`, `status`, `created`, `updated`, `tags`, `aliases`, and `related`. Most project docs use the richer standard profile. -- Quote strings and dates with single quotes. Use block-style non-empty lists with quoted items and `[]` for empty lists. Reject duplicate list items and unknown top-level fields; extensions belong under `publish`, `project`, or `x_project`. +- Quote strings and dates. Both quote forms are accepted; Prettier's minimal-escape resting state is the converged form, so legacy single-quoted spellings stay valid. Use block-style non-empty lists with quoted items and `[]` for empty lists. Reject duplicate list items and unknown top-level fields; extensions belong under `publish`, `project`, or `x_project`. - Ordinary IDs are `{doc_type}-{six-character-base36-token}-{frozen-kebab-slug}`. ADR IDs are `adr-NNNN-repo-name-short-title`. Generate ordinary IDs with tooling. - Structure rules define schema, order, syntax, and ID shape. Field-value policy defines lifecycle, ownership, tags, relationships, confidence, visibility, and repository-local vocabulary; adopters should record that policy in an ADR. - Never add managed-document frontmatter to `CLAUDE.md`, `AGENTS.md`, `.claude/**`, `.agents/**`, or `.codex/**`; exclude those harness files from managed scope. @@ -33,4 +33,4 @@ This standard governs metadata, not Markdown body formatting. Markdown Tooling i ## Canonical resources -Use the [versioned package documentation](https://github.com/L3DigitalNet/project-standards/tree/v5/standards/markdown-frontmatter/versions/1.4) for complete requirements. +Use the [versioned package documentation](https://github.com/L3DigitalNet/project-standards/tree/v5.10.0/standards/markdown-frontmatter/versions/1.6) for complete requirements. diff --git a/.vscode/settings.json b/.vscode/settings.json index ab54655..3fb0fe6 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -30,7 +30,7 @@ "**/__pycache__": true, "**/.pytest_cache": true, "**/.ruff_cache": true, - "**/.mypy_cache": true, + "**/.coverage": true }, "python.analysis.typeCheckingMode": "off" diff --git a/AGENTS.md b/AGENTS.md index 076a43d..aaf4976 100644 --- a/AGENTS.md +++ b/AGENTS.md @@ -88,10 +88,14 @@ Prettier owns physical formatting and markdownlint owns Markdown structure. Do n Enabled checks: format, lint. Markdown scope: `**/*.md`. Structured-config scope: `**/*.json`, `**/*.jsonc`, `**/*.yml`, `**/*.yaml`. +Lint additionally skips generated directories: `.pytest_cache/**`, `.ruff_cache/**`, `.venv/**`, `node_modules/**`. Declared exclusions: - `docs/reference/pre-migration/**` (both): Verbatim archived ChatGPT transcript; reformatting or annotating it would destroy the historical record. Already exempt from APSEUDO fence linting per bug 003. - `package-lock.json` (format): npm regenerates this file and reverts Prettier's formatting on every install. +- `products/vscode-extension/**/*.js` (format): VS Code extension JavaScript follows its product-local formatting; root Prettier would rewrite unrelated source outside the declared Markdown and structured-config scope. +- `products/vscode-extension/**/*.mjs` (format): VS Code extension build scripts follow their product-local formatting; root Prettier would rewrite unrelated source outside the declared Markdown and structured-config scope. +- `products/vscode-extension/**/*.code-snippets` (format): VS Code snippet files preserve their product-local JSON formatting and are outside the declared structured-config extensions. Run the enabled checks before claiming completion. diff --git a/CLAUDE.md b/CLAUDE.md index 15ce215..77fd206 100644 --- a/CLAUDE.md +++ b/CLAUDE.md @@ -70,10 +70,14 @@ Prettier owns physical formatting and markdownlint owns Markdown structure. Do n Enabled checks: format, lint. Markdown scope: `**/*.md`. Structured-config scope: `**/*.json`, `**/*.jsonc`, `**/*.yml`, `**/*.yaml`. +Lint additionally skips generated directories: `.pytest_cache/**`, `.ruff_cache/**`, `.venv/**`, `node_modules/**`. Declared exclusions: - `docs/reference/pre-migration/**` (both): Verbatim archived ChatGPT transcript; reformatting or annotating it would destroy the historical record. Already exempt from APSEUDO fence linting per bug 003. - `package-lock.json` (format): npm regenerates this file and reverts Prettier's formatting on every install. +- `products/vscode-extension/**/*.js` (format): VS Code extension JavaScript follows its product-local formatting; root Prettier would rewrite unrelated source outside the declared Markdown and structured-config scope. +- `products/vscode-extension/**/*.mjs` (format): VS Code extension build scripts follow their product-local formatting; root Prettier would rewrite unrelated source outside the declared Markdown and structured-config scope. +- `products/vscode-extension/**/*.code-snippets` (format): VS Code snippet files preserve their product-local JSON formatting and are outside the declared structured-config extensions. Run the enabled checks before claiming completion. diff --git a/docs/STATUS.md b/docs/STATUS.md index b4ba049..ece0e88 100644 --- a/docs/STATUS.md +++ b/docs/STATUS.md @@ -3,14 +3,15 @@ ## Current snapshot - The Pythonic Agent Pseudocode toolkit includes syntax, formatter, validator, LSP, MCP, hooks, skills, CI, and documentation. -- Project Standards V5 enables all seven consumer packages: adr, agent-handoff, cli-documentation, markdown-frontmatter, markdown-tooling, project-spec, python-tooling. -- The V4 to V5 migration applied on release 5.4.0; `.standards/` is the sole authority and `.project-standards.yml` is retired. +- Project Standards 5.11.0 enables all seven evidence-backed consumer packages. +- Resolved versions are adr 1.3, agent-handoff 1.6, cli-documentation 1.5, markdown-frontmatter 1.6, markdown-tooling 1.10, project-spec 1.5, and python-tooling 1.10. +- The V4 to V5 migration applied on release 5.4.0 and updated in place to 5.11.0; `.standards/` is the sole authority and `.project-standards.yml` is retired. - Durable Markdown frontmatter follows accepted ADR-0003; `docs/specs/` holds project-spec-conformant specifications. - `SPEC-QZXW` specifies the validation toolchain and is the traceability source for coverage and defect work. - `docs/usage.md` is the authored CLI reference for `apseudo` and its per-command entry points. - The 135-second repository explainer is locally verified under ignored `dist/video/final/` with AAC-LC narrated and speaker MP4s, selected `marin` WAV, captions, manifests, report, and checksums; publication remains separate. - Markdown lint and Prettier gates are green; the archived pre-migration transcript is a declared, reasoned exclusion. -- The `check.yml` gate is red on coverage alone: 62% against the 85% floor. All other gates pass. -- Three pre-existing product bugs remain open in `docs/handoff/bugs/`; bugs 003, 005, and 006 are fixed. -- Agent Handoff v1 provides one shared repo-local Claude/Codex SessionStart runtime and canonical `docs/` status and task paths. +- The `check.yml` gate remains red at 62% coverage against the 85% floor; one stale production-entry assertion also fails because completed scene inputs now advance verification to the inventory gate (bug 008). +- Four product bugs remain open in `docs/handoff/bugs/`; bugs 003, 005, 006, and 007 are fixed. +- Agent Handoff 1.6 provides the shared repo-local runtime and canonical `docs/` state. Its managed Codex command currently fails under `uv-strict-python` shims; upstream project-standards issue 80 tracks the integration defect. - `cli-docs-check.yml` stays consumer-owned to keep its SHA-pinned action hardening. diff --git a/docs/TODO.md b/docs/TODO.md index 4a1aabd..9946fc9 100644 --- a/docs/TODO.md +++ b/docs/TODO.md @@ -44,14 +44,19 @@ Instructions for AI agents: Prioritize the untested CLI, output, discovery, Mermaid, LSP, and MCP paths, and fill the `Not Started` rows in §17.3 of `docs/specs/apseudo-validation-toolchain.md` as the tests land. -- [ ] Fix the three remaining pre-existing bugs in `docs/handoff/bugs/`. +- [ ] Fix the four remaining bugs in `docs/handoff/bugs/`. - [bug 001](handoff/bugs/001-mcp-resource-map-stale-paths.md): stale MCP resource paths. - [bug 002](handoff/bugs/002-review-completeness-stale-paths.md): stale completeness-check paths. - [bug 004](handoff/bugs/004-lsp-serve-unhandled-read-message.md): unguarded LSP message reads. + - [bug 008](handoff/bugs/008-production-state-test-stale-assumption.md): production-entry test depends on real scene composition remaining blocked. Add one pinning regression test per fix, per §17.2 of the toolchain spec. +- [ ] Refresh Agent Handoff after upstream project-standards issue 80 is fixed. + + Agent Handoff 1.6 validates and is drift-free, but its managed Codex SessionStart command resolves the `uv-strict-python` rejecting `python3` shim and exits 1. Keep managed files unchanged and update through a released Project Standards successor. + - [ ] Add the single-policy-source test (NFR-004 / MS-1 in the toolchain spec). Assert no rule code or severity is defined outside `src/apseudo_lint/rules.py`. This is the architecture rule the whole design rests on and the only one with no mechanical enforcement. diff --git a/docs/handoff/bugs/008-production-state-test-stale-assumption.md b/docs/handoff/bugs/008-production-state-test-stale-assumption.md new file mode 100644 index 0000000..b7045d9 --- /dev/null +++ b/docs/handoff/bugs/008-production-state-test-stale-assumption.md @@ -0,0 +1,25 @@ +--- +bug_id: '008' +date: '2026-07-29' +title: 'Production-entry test assumes real scene composition remains blocked' +services: [video, tests] +status: open +--- + +## Cause + +`test_tc_t8_002__production_entry__fails_closed_when_real_states_are_blocked` calls `verify_production_delivery` against the live repository root and expects `compose_scene_states` to fail. Later explainer work completed the real capture and scene inputs, so composition now succeeds with 14 states and verification advances to the delivery-inventory gate. + +The test does not isolate or force the source-state failure named by its assertion. Its temporary deliverables live outside `dist/video/final`, so the first genuine failure is now `INVENTORY-delivery`, not `SOURCE-production-states`. + +## Evidence + +The failure reproduces alone and in the full 302-test suite. Both the pre-Project-Standards-update baseline and the post-update coverage run report the same result: 301 passed and this assertion failed. + +## Fix + +Pending: make the test deterministically exercise the intended source-state failure without depending on the repository's current production inputs. Preserve separate coverage for the real-state-success path and the exact final-directory inventory gate. + +## Lesson + +A fail-closed test must control the boundary it expects to fail. Live repository evidence is suitable for an integration success test, but it is not a stable fixture for an earlier failure-path assertion. diff --git a/docs/handoff/bugs/INDEX.md b/docs/handoff/bugs/INDEX.md index bcefba9..b6890b4 100644 --- a/docs/handoff/bugs/INDEX.md +++ b/docs/handoff/bugs/INDEX.md @@ -11,3 +11,4 @@ Generated from frontmatter. Regenerate with `python3 docs/handoff/bugs/_regen_in | 005 | 2026-07-22 | apseudo-lint.yml validates the deleted .codex/hooks.json, failing CI since 2026-07-09 | ci | fixed | | 006 | 2026-07-22 | apseudo-explain --json and apseudo-template --json crash on slots dataclasses | cli | fixed | | 007 | 2026-07-24 | Explainer AAC-LD audio plays as static in ordinary media players | video | fixed | +| 008 | 2026-07-29 | Production-entry test assumes real scene composition remains blocked | video, tests | open | diff --git a/docs/handoff/sessions/2026-07.md b/docs/handoff/sessions/2026-07.md index 15ce66b..f5e3796 100644 --- a/docs/handoff/sessions/2026-07.md +++ b/docs/handoff/sessions/2026-07.md @@ -1,6 +1,6 @@ # Sessions — 2026-07 -**Last updated:** 2026-07-24 +**Last updated:** 2026-07-29 ## 2026-07-08 @@ -64,3 +64,13 @@ At closeout, `agent-handoff size-report` warns that `AGENTS.md` exceeds its 4096 ## 2026-07-24 — Repository explainer quick-demo delivery Completed the recalibrated T13–T15 quick-demo path while preserving the dormant strict verifier for possible later hardening. Captured two real VS Code frames, generated and retained a scene-aligned `gpt-4o-mini-tts` `marin` narration, rendered narrated and speaker 1920×1080 variants at 4050 frames, corrected production subtitle scaling and narrated loudness, and accepted representative frame review. After an ordinary player reproduced the original AAC-LD streams as static, rerendered both variants as standard AAC-LC from the retained WAV and made that profile part of quick verification. The ignored local package under `dist/video/final/` contains both MP4s, selected WAV, captions, delivery and render manifests, quick-verification report, and checksum inventory. Publication remains out of scope. + +## 2026-07-29 — Project Standards 5.11.0 update + +Updated the Catalog 5 control plane in place from 5.4.0 to 5.11.0. All seven `latest` selections advanced on their existing package-major tracks. Preserved consumer knowledge and the consumer-owned CLI documentation workflow. + +Declared the explainer pipeline as a coverage-disabled first-party Python root, retained the extension's product-local formatter scope, corrected one Project Spec frontmatter key, and made BasedPyright resolve local `src` code before the editable install. Reconciliation is a clean fixed point. + +Reported upgrade friction upstream: project-standards issues 87 (managed-drift diagnostics and two-phase restoration), 88 (Prettier command exceeds declared scope), and 89 (src-layout import precedence); added reproductions to existing issues 78 (VS Code trailing whitespace) and 80 (Codex SessionStart under strict-Python shims). + +All control-plane, Markdown, frontmatter, spec, Ruff, BasedPyright, pip-audit, and Agent Pseudocode checks pass. The full suite remains at its pre-update result of 301 passed and one stale video assertion failed; coverage remains 62%. Recorded that assertion as bug 008. diff --git a/docs/specs/repository-explainer-video.md b/docs/specs/repository-explainer-video.md index 9154c3c..ce82dbd 100644 --- a/docs/specs/repository-explainer-video.md +++ b/docs/specs/repository-explainer-video.md @@ -3,11 +3,10 @@ spec_id: SPEC-NSBJ title: 'Repository Explainer Video' status: approved # draft | review | approved | superseded profile: standard # this is the Standard template; see Appendix D -doc_type: 'spec' owner: 'Chris Purcell' implementer: 'Codex, supervised by the owner' created: '2026-07-23' -last_reviewed: '2026-07-24' +last_reviewed: '2026-07-29' supersedes: null # SPEC id this replaces, if any superseded_by: null # filled in when this spec is retired related: @@ -27,6 +26,7 @@ related: | Version | Date | Author | Change | | --- | --- | --- | --- | +| 0.6 | `2026-07-29` | Codex, owner-authorized | Removed a noncanonical frontmatter key for Project Specification 1.5 conformance; requirements and approved scope are unchanged. | | 0.5 | `2026-07-24` | Chris Purcell, Codex | Recalibrated the release as a quick repository demo and deferred release-grade media assurance. | | 0.4 | `2026-07-23` | Codex, owner-authorized | Clarified provider permission granularity, fixed-frame narration fit, and production-code gate scope during requested Opus convergence. | | 0.3 | `2026-07-23` | Codex | Resolved adversarial-review findings for reproducibility, per-variant delivery, provider fallback, provenance, and repository gates. | diff --git a/pyproject.toml b/pyproject.toml index fd1baa0..aaaf49a 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -121,22 +121,19 @@ target-version = "py314" line-length = 100 src = ["src", "tests", "media/repository-explainer"] extend-exclude = [".claude", ".agents", ".codex", ".continue"] - [tool.ruff.lint] select = ["E", "F", "I", "B", "UP", "SIM", "C4", "PIE", "PTH", "RET", "RUF"] ignore = ["E501"] - [tool.ruff.lint.per-file-ignores] "tests/**/*.py" = ["S101"] - [tool.ruff.format] quote-style = "double" indent-style = "space" docstring-code-format = true [tool.basedpyright] -include = ["src", "tests", "media/repository-explainer/video_pipeline"] -extraPaths = ["media/repository-explainer"] +include = ["src", "tests", "media/repository-explainer"] +extraPaths = ["src", "media/repository-explainer"] typeCheckingMode = "strict" pythonVersion = "3.14" pythonPlatform = "All" diff --git a/scripts/check.py b/scripts/check.py index de043a6..3c44fbb 100644 --- a/scripts/check.py +++ b/scripts/check.py @@ -1,11 +1,17 @@ """Run the selected Python verification gate and stop at the first failure.""" -from __future__ import annotations - import subprocess import sys from collections.abc import Sequence +USAGE = """usage: scripts/check.py [-h] + +Run the verification gate commands in order and stop at the first failure. + +options: + -h, --help show this message and exit +""" + COMMANDS: tuple[tuple[str, ...], ...] = ( ("uv", "run", "ruff", "format", "--check", "."), ("uv", "run", "ruff", "check", "."), @@ -22,8 +28,32 @@ def run_command(command: Sequence[str]) -> int: return subprocess.run(command, check=False).returncode -def main() -> int: - """Run the gate in order and stop at the first failure.""" +def main(argv: Sequence[str]) -> int: + """Resolve arguments before any gate command, then stop at the first failure. + + Only `-h`/`--help` are accepted, and an unrecognized argument outranks them: + `check.py --typo --help` must fail rather than print usage and exit 0, or a + mistyped CI invocation silently skips the whole gate. A `--` ends option + parsing, so it and everything after it are positionals this script never + accepts. No gate command runs on any of these paths. + """ + arguments = list(argv) + separator = arguments.index("--") if "--" in arguments else len(arguments) + unrecognized = next( + ( + argument + for index, argument in enumerate(arguments) + if index >= separator or argument not in {"-h", "--help"} + ), + None, + ) + if unrecognized is not None: + print(f"scripts/check.py: error: unrecognized argument: {unrecognized}", file=sys.stderr) + print(USAGE, end="", file=sys.stderr) + return 2 + if arguments: + print(USAGE, end="") + return 0 for command in COMMANDS: if return_code := run_command(command): return return_code @@ -31,4 +61,4 @@ def main() -> int: if __name__ == "__main__": - sys.exit(main()) + sys.exit(main(sys.argv[1:]))