{
  "generated_at": "2026-07-02T20:04:55.781098+00:00",
  "steps": [
    {
      "name": "build wheel and sdist",
      "passed": true,
      "stdout": "d/bdist.linux-x86_64/wheel/grimoire_build\ncopying build/lib/grimoire_build/bench.py -> build/bdist.linux-x86_64/wheel/./grimoire_build\ncopying build/lib/grimoire_build/__init__.py -> build/bdist.linux-x86_64/wheel/./grimoire_build\ncopying build/lib/grimoire_build/stacks.py -> build/bdist.linux-x86_64/wheel/./grimoire_build\ncopying build/lib/grimoire_build/lexicon.py -> build/bdist.linux-x86_64/wheel/./grimoire_build\ncopying build/lib/grimoire_build/sources.py -> build/bdist.linux-x86_64/wheel/./grimoire_build\ncopying build/lib/grimoire_build/architecture.py -> build/bdist.linux-x86_64/wheel/./grimoire_build\ncopying build/lib/grimoire_build/seals.py -> build/bdist.linux-x86_64/wheel/./grimoire_build\ncopying build/lib/grimoire_build/exports.py -> build/bdist.linux-x86_64/wheel/./grimoire_build\ncopying build/lib/grimoire_build/site.py -> build/bdist.linux-x86_64/wheel/./grimoire_build\ncopying build/lib/grimoire_build/spells.py -> build/bdist.linux-x86_64/wheel/./grimoire_build\ncopying build/lib/check_package_index.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/check_canon_audit_decision.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/generate_seals.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/run_warded_ab.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/surface_adapters.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/check_hardness_intake.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/run_hardness_bench.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/run_adversarial_harness.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/create_adoption_report.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/validate_data.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/sync_scaffold.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/run_evaluations.py -> build/bdist.linux-x86_64/wheel/.\ncopying build/lib/check_adoption_intake.py -> build/bdist.linux-x86_64/wheel/.\nrunning install_egg_info\nCopying scripts/software_grimoire.egg-info to build/bdist.linux-x86_64/wheel/./software_grimoire-3.0.0-py3.11.egg-info\nrunning install_scripts\ncreating build/bdist.linux-x86_64/wheel/software_grimoire-3.0.0.dist-info/WHEEL\ncreating '/home/runner/work/software-grimoire/software-grimoire/dist/.tmp-8lgykisf/software_grimoire-3.0.0-py3-none-any.whl' and adding 'build/bdist.linux-x86_64/wheel' to it\nadding 'bootstrap_project.py'\nadding 'check_adoption_intake.py'\nadding 'check_canon_audit_decision.py'\nadding 'check_hardness_intake.py'\nadding 'check_package.py'\nadding 'check_package_index.py'\nadding 'check_package_publish_workflow.py'\nadding 'create_adoption_report.py'\nadding 'generate_seals.py'\nadding 'grimoire.py'\nadding 'import_hardness_model_run.py'\nadding 'install_assets.py'\nadding 'run_adversarial_harness.py'\nadding 'run_bench.py'\nadding 'run_evaluations.py'\nadding 'run_execution_bench.py'\nadding 'run_hardness_bench.py'\nadding 'run_hardness_model_surfaces.py'\nadding 'run_jailbreak_resilience.py'\nadding 'run_model_artifact_execution.py'\nadding 'run_warded_ab.py'\nadding 'smoke_public_site.py'\nadding 'surface_adapters.py'\nadding 'sync_scaffold.py'\nadding 'validate_data.py'\nadding 'grimoire_build/__init__.py'\nadding 'grimoire_build/architecture.py'\nadding 'grimoire_build/bench.py'\nadding 'grimoire_build/exports.py'\nadding 'grimoire_build/lexicon.py'\nadding 'grimoire_build/seals.py'\nadding 'grimoire_build/site.py'\nadding 'grimoire_build/sources.py'\nadding 'grimoire_build/spells.py'\nadding 'grimoire_build/stacks.py'\nadding 'software_grimoire-3.0.0.dist-info/licenses/LICENSE'\nadding 'software_grimoire-3.0.0.dist-info/METADATA'\nadding 'software_grimoire-3.0.0.dist-info/WHEEL'\nadding 'software_grimoire-3.0.0.dist-info/entry_points.txt'\nadding 'software_grimoire-3.0.0.dist-info/top_level.txt'\nadding 'software_grimoire-3.0.0.dist-info/RECORD'\nremoving build/bdist.linux-x86_64/wheel\nSuccessfully built software_grimoire-3.0.0.tar.gz and software_grimoire-3.0.0-py3-none-any.whl\n",
      "stderr": "* Creating isolated environment: venv+pip...\n* Installing packages in isolated environment:\n  - setuptools>=68\n  - wheel\n* Getting build dependencies for sdist...\n/home/runner/work/software-grimoire/software-grimoire/tmp/grimoire-subprocess-smoavh_m/build-env-hex08hl_/lib/python3.11/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated\n!!\n\n        ********************************************************************************\n        Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).\n\n        By 2027-Feb-18, you need to update your project and remove deprecated calls\n        or your builds will no longer be supported.\n\n        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.\n        ********************************************************************************\n\n!!\n  corresp(dist, value, root_dir)\n* Building sdist...\n/home/runner/work/software-grimoire/software-grimoire/tmp/grimoire-subprocess-smoavh_m/build-env-hex08hl_/lib/python3.11/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated\n!!\n\n        ********************************************************************************\n        Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).\n\n        By 2027-Feb-18, you need to update your project and remove deprecated calls\n        or your builds will no longer be supported.\n\n        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.\n        ********************************************************************************\n\n!!\n  corresp(dist, value, root_dir)\n* Building wheel from sdist\n* Creating isolated environment: venv+pip...\n* Installing packages in isolated environment:\n  - setuptools>=68\n  - wheel\n* Getting build dependencies for wheel...\n/home/runner/work/software-grimoire/software-grimoire/tmp/grimoire-subprocess-smoavh_m/build-env-pvckhzv9/lib/python3.11/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated\n!!\n\n        ********************************************************************************\n        Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).\n\n        By 2027-Feb-18, you need to update your project and remove deprecated calls\n        or your builds will no longer be supported.\n\n        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.\n        ********************************************************************************\n\n!!\n  corresp(dist, value, root_dir)\n* Building wheel...\n/home/runner/work/software-grimoire/software-grimoire/tmp/grimoire-subprocess-smoavh_m/build-env-pvckhzv9/lib/python3.11/site-packages/setuptools/config/_apply_pyprojecttoml.py:82: SetuptoolsDeprecationWarning: `project.license` as a TOML table is deprecated\n!!\n\n        ********************************************************************************\n        Please use a simple string containing a SPDX expression for `project.license`. You can also use `project.license-files`. (Both options available on setuptools>=77.0.0).\n\n        By 2027-Feb-18, you need to update your project and remove deprecated calls\n        or your builds will no longer be supported.\n\n        See https://packaging.python.org/en/latest/guides/writing-pyproject-toml/#license for details.\n        ********************************************************************************\n\n!!\n  corresp(dist, value, root_dir)\n"
    },
    {
      "name": "create venv",
      "passed": true,
      "stdout": "",
      "stderr": ""
    },
    {
      "name": "install wheel",
      "passed": true,
      "stdout": "Processing ./dist/software_grimoire-3.0.0-py3-none-any.whl\nCollecting jsonschema>=4.0 (from software-grimoire==3.0.0)\n  Using cached jsonschema-4.26.0-py3-none-any.whl.metadata (7.6 kB)\nCollecting pytest>=7.0 (from software-grimoire==3.0.0)\n  Using cached pytest-9.1.1-py3-none-any.whl.metadata (7.6 kB)\nCollecting attrs>=22.2.0 (from jsonschema>=4.0->software-grimoire==3.0.0)\n  Using cached attrs-26.1.0-py3-none-any.whl.metadata (8.8 kB)\nCollecting jsonschema-specifications>=2023.03.6 (from jsonschema>=4.0->software-grimoire==3.0.0)\n  Using cached jsonschema_specifications-2025.9.1-py3-none-any.whl.metadata (2.9 kB)\nCollecting referencing>=0.28.4 (from jsonschema>=4.0->software-grimoire==3.0.0)\n  Using cached referencing-0.37.0-py3-none-any.whl.metadata (2.8 kB)\nCollecting rpds-py>=0.25.0 (from jsonschema>=4.0->software-grimoire==3.0.0)\n  Using cached rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.metadata (4.1 kB)\nCollecting iniconfig>=1.0.1 (from pytest>=7.0->software-grimoire==3.0.0)\n  Using cached iniconfig-2.3.0-py3-none-any.whl.metadata (2.5 kB)\nCollecting packaging>=22 (from pytest>=7.0->software-grimoire==3.0.0)\n  Using cached packaging-26.2-py3-none-any.whl.metadata (3.5 kB)\nCollecting pluggy<2,>=1.5 (from pytest>=7.0->software-grimoire==3.0.0)\n  Using cached pluggy-1.6.0-py3-none-any.whl.metadata (4.8 kB)\nCollecting pygments>=2.7.2 (from pytest>=7.0->software-grimoire==3.0.0)\n  Using cached pygments-2.20.0-py3-none-any.whl.metadata (2.5 kB)\nCollecting typing-extensions>=4.4.0 (from referencing>=0.28.4->jsonschema>=4.0->software-grimoire==3.0.0)\n  Using cached typing_extensions-4.16.0-py3-none-any.whl.metadata (3.3 kB)\nUsing cached jsonschema-4.26.0-py3-none-any.whl (90 kB)\nUsing cached pytest-9.1.1-py3-none-any.whl (386 kB)\nUsing cached attrs-26.1.0-py3-none-any.whl (67 kB)\nUsing cached iniconfig-2.3.0-py3-none-any.whl (7.5 kB)\nUsing cached jsonschema_specifications-2025.9.1-py3-none-any.whl (18 kB)\nUsing cached packaging-26.2-py3-none-any.whl (100 kB)\nUsing cached pluggy-1.6.0-py3-none-any.whl (20 kB)\nUsing cached pygments-2.20.0-py3-none-any.whl (1.2 MB)\nUsing cached referencing-0.37.0-py3-none-any.whl (26 kB)\nUsing cached rpds_py-2026.6.3-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl (371 kB)\nUsing cached typing_extensions-4.16.0-py3-none-any.whl (45 kB)\nInstalling collected packages: typing-extensions, rpds-py, pygments, pluggy, packaging, iniconfig, attrs, referencing, pytest, jsonschema-specifications, jsonschema, software-grimoire\nSuccessfully installed attrs-26.1.0 iniconfig-2.3.0 jsonschema-4.26.0 jsonschema-specifications-2025.9.1 packaging-26.2 pluggy-1.6.0 pygments-2.20.0 pytest-9.1.1 referencing-0.37.0 rpds-py-2026.6.3 software-grimoire-3.0.0 typing-extensions-4.16.0\n",
      "stderr": "\n[notice] A new release of pip is available: 24.0 -> 26.1.2\n[notice] To update, run: python -m pip install --upgrade pip\n"
    },
    {
      "name": "python -m pip show software-grimoire",
      "passed": true,
      "stdout": "Name: software-grimoire\nVersion: 3.0.0\nSummary: Operative vocabulary, prompt-spells, and stackcraft for AI-assisted software engineering.\nHome-page: \nAuthor: Corben Sorenson\nAuthor-email: \nLicense: MIT\nLocation: /home/runner/work/software-grimoire/software-grimoire/tmp/grimoire-package-check-boijd5qt/venv/lib/python3.11/site-packages\nRequires: jsonschema, pytest\nRequired-by: \n",
      "stderr": ""
    },
    {
      "name": "grimoire --help",
      "passed": true,
      "stdout": "usage: grimoire [-h]\n                {generate,validate,seal,new,export,install,adoption,canon,bench,package,seals,render,test,all}\n                ...\n\nSoftware Grimoire maintenance CLI\n\npositional arguments:\n  {generate,validate,seal,new,export,install,adoption,canon,bench,package,seals,render,test,all}\n    generate            regenerate Quarto pages and structured data\n    validate            validate repository data or one spell/stack JSON file\n    seal                compute a working seal for one spell or stack JSON\n                        file\n    new                 create a local scaffold\n    export              list generated installable exports\n    install             install generated assets to a local destination\n    adoption            adoption evidence utilities\n    canon               canon governance utilities\n    bench               bench utilities\n    package             package and package-index release utilities\n    seals               regenerate seal summary data\n    render              render the Quarto site\n    test                run repository tests\n    all                 generate, validate, render, and test\n\noptions:\n  -h, --help            show this help message and exit\n",
      "stderr": ""
    },
    {
      "name": "grimoire-create-adoption-report --help",
      "passed": true,
      "stdout": "usage: grimoire-create-adoption-report [-h] --id ID --title TITLE --provenance\n                                       {project-owned,reviewer-supplied,external-user}\n                                       --task TASK --spell-or-stack-used\n                                       SPELL_OR_STACK_USED --surface SURFACE\n                                       --artifact-produced ARTIFACT_PRODUCED\n                                       --verification-performed\n                                       VERIFICATION_PERFORMED --time-cost\n                                       TIME_COST --failure-or-friction\n                                       FAILURE_OR_FRICTION --reuse-decision\n                                       REUSE_DECISION [--notes NOTES]\n                                       [--write-report WRITE_REPORT]\n\nCreate a schema-valid standalone adoption evidence report.\n\noptions:\n  -h, --help            show this help message and exit\n  --id ID               stable id like adoption.team-task.v1\n  --title TITLE\n  --provenance {project-owned,reviewer-supplied,external-user}\n  --task TASK\n  --spell-or-stack-used SPELL_OR_STACK_USED\n  --surface SURFACE\n  --artifact-produced ARTIFACT_PRODUCED\n  --verification-performed VERIFICATION_PERFORMED\n  --time-cost TIME_COST\n  --failure-or-friction FAILURE_OR_FRICTION\n  --reuse-decision REUSE_DECISION\n  --notes NOTES\n  --write-report WRITE_REPORT\n",
      "stderr": ""
    },
    {
      "name": "grimoire-check-adoption-intake --help",
      "passed": true,
      "stdout": "usage: grimoire-check-adoption-intake [-h] {validate} ...\n\nValidate an adoption-report intake decision without publishing evidence.\n\npositional arguments:\n  {validate}\n    validate  validate one adoption intake decision JSON record\n\noptions:\n  -h, --help  show this help message and exit\n",
      "stderr": ""
    },
    {
      "name": "grimoire-check-hardness-intake --help",
      "passed": true,
      "stdout": "usage: grimoire-check-hardness-intake [-h] {validate} ...\n\nValidate a Bench v4 hardness-import intake decision.\n\npositional arguments:\n  {validate}\n    validate  validate one hardness intake decision JSON record\n\noptions:\n  -h, --help  show this help message and exit\n",
      "stderr": ""
    },
    {
      "name": "grimoire-check-package-publish-workflow --help",
      "passed": true,
      "stdout": "usage: grimoire-check-package-publish-workflow [-h]\n\nValidate the manual package-index publish workflow contract.\n\noptions:\n  -h, --help  show this help message and exit\n",
      "stderr": ""
    },
    {
      "name": "grimoire-install-assets --help",
      "passed": true,
      "stdout": "usage: grimoire-install-assets [-h]\n                               [--target {all,claude-code,codex,cursor,markdown,prompts,stacks}]\n                               --dest DEST [--write] [--force]\n\nInstall generated Software Grimoire assets\n\noptions:\n  -h, --help            show this help message and exit\n  --target {all,claude-code,codex,cursor,markdown,prompts,stacks}\n  --dest DEST           destination directory\n  --write               actually copy files; default is dry-run\n  --force               overwrite existing files, keeping a .bak copy\n",
      "stderr": ""
    },
    {
      "name": "grimoire-run-bench --help",
      "passed": true,
      "stdout": "usage: grimoire-run-bench [-h]\n                          {evaluations,jailbreak-resilience,execution,all,import}\n                          ...\n\nBench v2 facade for Software Grimoire evaluations.\n\npositional arguments:\n  {evaluations,jailbreak-resilience,execution,all,import}\n    evaluations         run field-spell evaluations\n    jailbreak-resilience\n                        run jailbreak-resilience bench\n    execution           run execution-graded clean/trap bench\n    all                 run all project-owned benches\n    import              validate a manual reviewer-supplied run record\n\noptions:\n  -h, --help            show this help message and exit\n",
      "stderr": ""
    },
    {
      "name": "grimoire-run-hardness-bench --help",
      "passed": true,
      "stdout": "usage: grimoire-run-hardness-bench [-h]\n                                   [--case {agentic-release-handoff,ambiguity-disabled-status,blast-radius-beta-flag,hidden-invariant-event-order,misleading-context-tax-discount}]\n                                   [--repetitions REPETITIONS]\n                                   [--write-report WRITE_REPORT]\n\nRun Bench v4 hardness-ladder artifacts in repo-local sandboxes.\n\noptions:\n  -h, --help            show this help message and exit\n  --case {agentic-release-handoff,ambiguity-disabled-status,blast-radius-beta-flag,hidden-invariant-event-order,misleading-context-tax-discount}\n                        case to run; repeatable\n  --repetitions REPETITIONS\n  --write-report WRITE_REPORT\n",
      "stderr": ""
    },
    {
      "name": "grimoire-import-hardness-run --help",
      "passed": true,
      "stdout": "usage: grimoire-import-hardness-run [-h] {validate} ...\n\nValidate a reviewer-supplied Bench v4 hardness model-run import.\n\npositional arguments:\n  {validate}\n    validate  validate and execute-check one manual hardness import record\n\noptions:\n  -h, --help  show this help message and exit\n",
      "stderr": ""
    },
    {
      "name": "grimoire-check-package-index --help",
      "passed": true,
      "stdout": "usage: grimoire-check-package-index [-h] [--index {pypi,testpypi}]\n                                    [--package PACKAGE] [--version VERSION]\n                                    [--uploader UPLOADER]\n                                    [--package-url PACKAGE_URL] [--dry-run]\n                                    [--write-report WRITE_REPORT]\n\nSmoke-test an installed package from a public package index.\n\noptions:\n  -h, --help            show this help message and exit\n  --index {pypi,testpypi}\n  --package PACKAGE\n  --version VERSION\n  --uploader UPLOADER   named human maintainer who performed the upload\n  --package-url PACKAGE_URL\n                        public package URL recorded after upload\n  --dry-run             record the command contract without installing from an\n                        index\n  --write-report WRITE_REPORT\n",
      "stderr": ""
    },
    {
      "name": "grimoire-check-canon-decision --help",
      "passed": true,
      "stdout": "usage: grimoire-check-canon-decision [-h] {validate} ...\n\nValidate a human canon-audit decision record without claiming signoff.\n\npositional arguments:\n  {validate}\n    validate  validate one canon-audit decision JSON record\n\noptions:\n  -h, --help  show this help message and exit\n",
      "stderr": ""
    }
  ],
  "passed": true
}
