chipgraph 0.1.0rc1__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- chipgraph-0.1.0rc1/.claude-plugin/marketplace.json +15 -0
- chipgraph-0.1.0rc1/.dockerignore +29 -0
- chipgraph-0.1.0rc1/.editorconfig +15 -0
- chipgraph-0.1.0rc1/.github/CODEOWNERS +1 -0
- chipgraph-0.1.0rc1/.github/workflows/ci.yml +55 -0
- chipgraph-0.1.0rc1/.github/workflows/evals.yml +132 -0
- chipgraph-0.1.0rc1/.github/workflows/image.yml +142 -0
- chipgraph-0.1.0rc1/.github/workflows/release.yml +128 -0
- chipgraph-0.1.0rc1/.gitignore +24 -0
- chipgraph-0.1.0rc1/.pre-commit-config.yaml +7 -0
- chipgraph-0.1.0rc1/.python-version +1 -0
- chipgraph-0.1.0rc1/AGENTS.md +68 -0
- chipgraph-0.1.0rc1/CLAUDE.md +1 -0
- chipgraph-0.1.0rc1/CONTRIBUTING.md +17 -0
- chipgraph-0.1.0rc1/DESIGN.md +1191 -0
- chipgraph-0.1.0rc1/LICENSE +202 -0
- chipgraph-0.1.0rc1/Makefile +52 -0
- chipgraph-0.1.0rc1/PKG-INFO +50 -0
- chipgraph-0.1.0rc1/README.md +27 -0
- chipgraph-0.1.0rc1/SECURITY.md +20 -0
- chipgraph-0.1.0rc1/docker/Dockerfile +114 -0
- chipgraph-0.1.0rc1/docker/README.md +83 -0
- chipgraph-0.1.0rc1/docs/DECISIONS.md +470 -0
- chipgraph-0.1.0rc1/docs/IMPLEMENTATION_PLAN.md +296 -0
- chipgraph-0.1.0rc1/docs/RELEASING.md +85 -0
- chipgraph-0.1.0rc1/docs/RESEARCH.md +99 -0
- chipgraph-0.1.0rc1/docs/archive/DESIGN_v0.1.md +1119 -0
- chipgraph-0.1.0rc1/docs/ask-claude-code/report.py +188 -0
- chipgraph-0.1.0rc1/docs/ask-claude-code/run.sh +93 -0
- chipgraph-0.1.0rc1/docs/examples/README.md +24 -0
- chipgraph-0.1.0rc1/docs/examples/qsoc.chipgraph.yml +142 -0
- chipgraph-0.1.0rc1/docs/plugin-claude-code/report.py +333 -0
- chipgraph-0.1.0rc1/docs/plugin-claude-code/run.sh +132 -0
- chipgraph-0.1.0rc1/docs/runtime-claude-code/report.py +140 -0
- chipgraph-0.1.0rc1/docs/runtime-claude-code/run.sh +80 -0
- chipgraph-0.1.0rc1/docs/spikes/S2.md +66 -0
- chipgraph-0.1.0rc1/docs/spikes/S5.md +68 -0
- chipgraph-0.1.0rc1/docs/spikes/S7.md +101 -0
- chipgraph-0.1.0rc1/docs/spikes/s7/hook_guard.py +95 -0
- chipgraph-0.1.0rc1/docs/spikes/s7/report.py +84 -0
- chipgraph-0.1.0rc1/docs/spikes/s7/run.sh +40 -0
- chipgraph-0.1.0rc1/docs/spikes/s7/s7_server.py +171 -0
- chipgraph-0.1.0rc1/docs/spikes/s7/selftest.py +144 -0
- chipgraph-0.1.0rc1/docs/spikes/s7/setup.sh +79 -0
- chipgraph-0.1.0rc1/docs/triage-claude-code/report.py +210 -0
- chipgraph-0.1.0rc1/docs/triage-claude-code/rules_only_holdout.py +105 -0
- chipgraph-0.1.0rc1/docs/triage-claude-code/rules_only_holdout2.py +138 -0
- chipgraph-0.1.0rc1/docs/triage-claude-code/run.sh +124 -0
- chipgraph-0.1.0rc1/evals/README.md +219 -0
- chipgraph-0.1.0rc1/evals/ask/grade.py +312 -0
- chipgraph-0.1.0rc1/evals/ask/tinysoc.yml +206 -0
- chipgraph-0.1.0rc1/evals/harness/__init__.py +33 -0
- chipgraph-0.1.0rc1/evals/harness/project.py +67 -0
- chipgraph-0.1.0rc1/evals/harness/report.py +154 -0
- chipgraph-0.1.0rc1/evals/harness/run.py +230 -0
- chipgraph-0.1.0rc1/evals/harness/runtimes.py +373 -0
- chipgraph-0.1.0rc1/evals/harness/streams.py +183 -0
- chipgraph-0.1.0rc1/evals/harness/suites.py +119 -0
- chipgraph-0.1.0rc1/evals/harness/tasks.py +84 -0
- chipgraph-0.1.0rc1/evals/run-claude-code.sh +45 -0
- chipgraph-0.1.0rc1/evals/triage/faults.yml +277 -0
- chipgraph-0.1.0rc1/evals/triage/gen_logs.py +435 -0
- chipgraph-0.1.0rc1/evals/triage/grade.py +230 -0
- chipgraph-0.1.0rc1/evals/triage/holdout.yml +167 -0
- chipgraph-0.1.0rc1/evals/triage/holdout2.yml +215 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-01.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-01.log +8 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-02.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-02.log +3 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-03.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-03.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-04.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-04.log +4 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-05.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-05.log +17 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-06.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-06.log +14 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-07.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-07.log +17 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-08.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-08.log +9 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-09.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-09.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-10.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-10.log +1 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-11.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-11.log +17 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-12.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-12.log +17 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-13.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-13.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-14.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-14.log +5 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-15.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-15.log +14 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-16.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-16.log +23 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-17.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-17.log +3 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-18.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-18.log +23 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-19.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-19.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-20.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-20.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-21.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-21.log +16 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-22.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs/log-22.log +3 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-01.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-01.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-02.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-02.log +1 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-03.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-03.log +19 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-04.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-04.log +17 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-05.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-05.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-06.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-06.log +1 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-07.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-07.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-08.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-08.log +5 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-09.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-09.log +4 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-10.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-10.log +19 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-11.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-11.log +16 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-12.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout/hold-12.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-01.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-01.log +36 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-02.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-02.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-03.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-03.log +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-04.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-04.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-05.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-05.log +9 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-06.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-06.log +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-07.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-07.log +1 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-08.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-08.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-09.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-09.log +9 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-10.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-10.log +4 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-11.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-11.log +8 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-12.json +7 -0
- chipgraph-0.1.0rc1/evals/triage/logs-holdout2/h2-12.log +2 -0
- chipgraph-0.1.0rc1/evals/triage/rules_only.py +90 -0
- chipgraph-0.1.0rc1/evals/triage/tb/holdout/tb_soc_regs.sv +144 -0
- chipgraph-0.1.0rc1/evals/triage/tb/holdout2/tb_gpio_pins.sv +89 -0
- chipgraph-0.1.0rc1/evals/triage/tb/holdout2/tb_timer_sva.sv +98 -0
- chipgraph-0.1.0rc1/evals/triage/tb/holdout2/tb_top_irq.sv +108 -0
- chipgraph-0.1.0rc1/evals/triage/tb/holdout2/tb_top_scoreboard.sv +148 -0
- chipgraph-0.1.0rc1/evals/triage/tb/tb_tiny_gpio.sv +101 -0
- chipgraph-0.1.0rc1/evals/triage/tb/tb_tiny_timer.sv +106 -0
- chipgraph-0.1.0rc1/examples/tinysoc/.chipgraph/packs/tinysoc/pack.yml +21 -0
- chipgraph-0.1.0rc1/examples/tinysoc/.chipgraph/packs/tinysoc/rules/lint_manifest.yml +17 -0
- chipgraph-0.1.0rc1/examples/tinysoc/.chipgraph/packs/tinysoc/rules/rtl.yml +22 -0
- chipgraph-0.1.0rc1/examples/tinysoc/.chipgraph.yml +51 -0
- chipgraph-0.1.0rc1/examples/tinysoc/.gitignore +3 -0
- chipgraph-0.1.0rc1/examples/tinysoc/Makefile +27 -0
- chipgraph-0.1.0rc1/examples/tinysoc/README.md +77 -0
- chipgraph-0.1.0rc1/examples/tinysoc/chip.yml +42 -0
- chipgraph-0.1.0rc1/examples/tinysoc/doc/specs/TINY_GPIO_MAS.md +124 -0
- chipgraph-0.1.0rc1/examples/tinysoc/doc/specs/TINY_TIMER_MAS.md +131 -0
- chipgraph-0.1.0rc1/examples/tinysoc/dv/test_tiny_gpio.py +26 -0
- chipgraph-0.1.0rc1/examples/tinysoc/dv/test_tiny_timer.py +38 -0
- chipgraph-0.1.0rc1/examples/tinysoc/filelists/gpio.f +1 -0
- chipgraph-0.1.0rc1/examples/tinysoc/filelists/timer.f +1 -0
- chipgraph-0.1.0rc1/examples/tinysoc/filelists/top.f +3 -0
- chipgraph-0.1.0rc1/examples/tinysoc/rtl/tiny_gpio.sv +54 -0
- chipgraph-0.1.0rc1/examples/tinysoc/rtl/tiny_timer.sv +68 -0
- chipgraph-0.1.0rc1/examples/tinysoc/rtl/tiny_top.sv +67 -0
- chipgraph-0.1.0rc1/examples/tinysoc/scripts/gen_manifest.py +47 -0
- chipgraph-0.1.0rc1/plugin/.claude-plugin/plugin.json +14 -0
- chipgraph-0.1.0rc1/plugin/.mcp.json +8 -0
- chipgraph-0.1.0rc1/plugin/README.md +220 -0
- chipgraph-0.1.0rc1/plugin/agents/asker.md +34 -0
- chipgraph-0.1.0rc1/plugin/agents/author.md +35 -0
- chipgraph-0.1.0rc1/plugin/agents/decider.md +26 -0
- chipgraph-0.1.0rc1/plugin/commands/ask.md +29 -0
- chipgraph-0.1.0rc1/plugin/commands/decide.md +34 -0
- chipgraph-0.1.0rc1/plugin/commands/init-chipgraph.md +34 -0
- chipgraph-0.1.0rc1/plugin/commands/run.md +43 -0
- chipgraph-0.1.0rc1/plugin/commands/status.md +31 -0
- chipgraph-0.1.0rc1/plugin/commands/trace.md +54 -0
- chipgraph-0.1.0rc1/plugin/commands/triage.md +44 -0
- chipgraph-0.1.0rc1/plugin/hooks/guard.py +344 -0
- chipgraph-0.1.0rc1/plugin/hooks/hooks.json +18 -0
- chipgraph-0.1.0rc1/pyproject.toml +135 -0
- chipgraph-0.1.0rc1/renovate.json +19 -0
- chipgraph-0.1.0rc1/schemas/AgentResult.schema.json +84 -0
- chipgraph-0.1.0rc1/schemas/Approval.schema.json +65 -0
- chipgraph-0.1.0rc1/schemas/Artifact.schema.json +160 -0
- chipgraph-0.1.0rc1/schemas/ArtifactRef.schema.json +80 -0
- chipgraph-0.1.0rc1/schemas/CheckResult.schema.json +125 -0
- chipgraph-0.1.0rc1/schemas/CheckSpec.schema.json +42 -0
- chipgraph-0.1.0rc1/schemas/Decision.schema.json +61 -0
- chipgraph-0.1.0rc1/schemas/Event.schema.json +95 -0
- chipgraph-0.1.0rc1/schemas/Finding.schema.json +277 -0
- chipgraph-0.1.0rc1/schemas/GateSpec.schema.json +134 -0
- chipgraph-0.1.0rc1/schemas/README.md +8 -0
- chipgraph-0.1.0rc1/schemas/RuleInstance.schema.json +140 -0
- chipgraph-0.1.0rc1/schemas/RuleSpec.schema.json +262 -0
- chipgraph-0.1.0rc1/schemas/RunManifest.schema.json +100 -0
- chipgraph-0.1.0rc1/schemas/formats/chip.schema.json +311 -0
- chipgraph-0.1.0rc1/schemas/formats/naming-rules.schema.json +180 -0
- chipgraph-0.1.0rc1/schemas/model/BlockEntity.schema.json +175 -0
- chipgraph-0.1.0rc1/schemas/model/ClockEntity.schema.json +163 -0
- chipgraph-0.1.0rc1/schemas/model/DecisionEntity.schema.json +175 -0
- chipgraph-0.1.0rc1/schemas/model/ExtEntity.schema.json +149 -0
- chipgraph-0.1.0rc1/schemas/model/FieldEntity.schema.json +219 -0
- chipgraph-0.1.0rc1/schemas/model/InterfaceEntity.schema.json +162 -0
- chipgraph-0.1.0rc1/schemas/model/InterruptEntity.schema.json +176 -0
- chipgraph-0.1.0rc1/schemas/model/MemoryRegionEntity.schema.json +194 -0
- chipgraph-0.1.0rc1/schemas/model/ModuleEntity.schema.json +175 -0
- chipgraph-0.1.0rc1/schemas/model/OpenItemEntity.schema.json +166 -0
- chipgraph-0.1.0rc1/schemas/model/ParameterEntity.schema.json +184 -0
- chipgraph-0.1.0rc1/schemas/model/PortEntity.schema.json +222 -0
- chipgraph-0.1.0rc1/schemas/model/ProjectEntity.schema.json +149 -0
- chipgraph-0.1.0rc1/schemas/model/RegisterEntity.schema.json +221 -0
- chipgraph-0.1.0rc1/schemas/model/Relation.schema.json +149 -0
- chipgraph-0.1.0rc1/schemas/model/RequirementEntity.schema.json +234 -0
- chipgraph-0.1.0rc1/schemas/model/ResetEntity.schema.json +175 -0
- chipgraph-0.1.0rc1/schemas/model/TestEntity.schema.json +158 -0
- chipgraph-0.1.0rc1/src/chipgraph/__init__.py +7 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/__init__.py +1 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/format/__init__.py +6 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/format/__main__.py +16 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/format/_yaml_lines.py +54 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/format/chip_yaml.py +323 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/format/qsoc_contract.py +246 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/llm/__init__.py +58 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/llm/_budget.py +168 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/llm/_errors.py +50 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/llm/_nda.py +30 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/llm/_retry.py +85 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/llm/anthropic.py +240 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/llm/decide_backend.py +179 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/llm/fake.py +87 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/llm/guard.py +68 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/parser/__init__.py +22 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/parser/generic_regex.py +75 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/parser/verible.py +55 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/parser/verilator.py +46 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/review/__init__.py +7 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/review/file.py +123 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/runner/__init__.py +7 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/runner/local.py +89 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/runtime/__init__.py +5 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/runtime/claude_code/__init__.py +18 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/runtime/claude_code/decisions.py +280 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/runtime/claude_code/runtime.py +102 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/runtime/claude_code/service.py +590 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/tool/__init__.py +7 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/tool/cmd.py +229 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/tool/filelist.py +259 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/tool/pyslang.py +485 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/vcs/__init__.py +1 -0
- chipgraph-0.1.0rc1/src/chipgraph/adapters/vcs/git.py +107 -0
- chipgraph-0.1.0rc1/src/chipgraph/app/__init__.py +10 -0
- chipgraph-0.1.0rc1/src/chipgraph/app/baseline.py +339 -0
- chipgraph-0.1.0rc1/src/chipgraph/app/build.py +139 -0
- chipgraph-0.1.0rc1/src/chipgraph/app/checks.py +193 -0
- chipgraph-0.1.0rc1/src/chipgraph/app/context.py +178 -0
- chipgraph-0.1.0rc1/src/chipgraph/app/errors.py +11 -0
- chipgraph-0.1.0rc1/src/chipgraph/app/executors.py +79 -0
- chipgraph-0.1.0rc1/src/chipgraph/app/findings.py +203 -0
- chipgraph-0.1.0rc1/src/chipgraph/app/ingest.py +523 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/__init__.py +52 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/_cdc_analyze.py +272 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/_cdc_elaborate.py +455 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/_common.py +268 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/_cross.py +96 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/_model.py +64 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/_naming_pyslang.py +235 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/_naming_rules.py +127 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/_xref_syntax.py +260 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/cdc_struct.py +235 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/connect.py +353 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/cross_chip.py +454 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/duplicate.py +151 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/filelist.py +323 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/generated.py +151 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/hardcode.py +233 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/layout.py +155 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/naming.py +311 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/ports_diff.py +203 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/spec_schema.py +257 -0
- chipgraph-0.1.0rc1/src/chipgraph/checks/trace.py +207 -0
- chipgraph-0.1.0rc1/src/chipgraph/cli/__init__.py +1500 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/__init__.py +1 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/config/__init__.py +81 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/config/defaults.py +14 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/config/errors.py +32 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/config/loader.py +598 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/config/models.py +612 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/config/templates.py +340 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/__init__.py +75 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/_paths.py +26 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/agent.py +49 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/artifact.py +68 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/check.py +76 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/event.py +70 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/export.py +128 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/finding.py +171 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/gate.py +50 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/rule.py +177 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/contracts/types.py +45 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/engine/__init__.py +70 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/engine/baseline.py +283 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/engine/decide.py +462 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/engine/gate.py +170 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/engine/graph.py +533 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/engine/records.py +60 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/engine/rules.py +92 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/engine/scheduler.py +540 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/__init__.py +98 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/entities.py +244 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/export.py +16 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/ingest.py +693 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/json_value.py +4 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/keys.py +95 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/model.py +153 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/provenance.py +27 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/query.py +583 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/registry.py +80 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/relations.py +61 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/model/store.py +279 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/plugin_api/__init__.py +81 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/plugin_api/local.py +167 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/plugin_api/pack.py +159 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/plugin_api/protocols.py +177 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/plugin_api/registry.py +111 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/plugin_api/types.py +94 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/runtime/__init__.py +40 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/runtime/executor.py +79 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/runtime/queue.py +380 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/state/__init__.py +1 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/state/artifacts.py +156 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/state/backend.py +117 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/state/findings.py +151 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/state/handoff.py +321 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/state/idempotency.py +59 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/state/journal.py +238 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/state/layout.py +73 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/state/lock.py +195 -0
- chipgraph-0.1.0rc1/src/chipgraph/core/state/trace.py +225 -0
- chipgraph-0.1.0rc1/src/chipgraph/learn/__init__.py +96 -0
- chipgraph-0.1.0rc1/src/chipgraph/learn/draft.py +187 -0
- chipgraph-0.1.0rc1/src/chipgraph/learn/infer.py +580 -0
- chipgraph-0.1.0rc1/src/chipgraph/learn/models.py +145 -0
- chipgraph-0.1.0rc1/src/chipgraph/learn/try_run.py +228 -0
- chipgraph-0.1.0rc1/src/chipgraph/mcp/__init__.py +12 -0
- chipgraph-0.1.0rc1/src/chipgraph/mcp/model_tools.py +167 -0
- chipgraph-0.1.0rc1/src/chipgraph/mcp/server.py +605 -0
- chipgraph-0.1.0rc1/src/chipgraph/orgs/qnsc/naming-v1.yml +113 -0
- chipgraph-0.1.0rc1/src/chipgraph/orgs/qnsc/profile.yml +5 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/__init__.py +8 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/__init__.py +16 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/ask/__init__.py +58 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/ask/_db.py +57 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/ask/_project.py +230 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/ask/answer.py +266 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/ask/check.py +182 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/ask/contract.py +115 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/ask/documents.py +157 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/ask/fts.py +80 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/ask/retrieve.py +331 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/audit/__init__.py +383 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/pack.yml +13 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/triage/__init__.py +64 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/triage/contract.py +94 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/triage/parse.py +371 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/triage/question.py +384 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/triage/report.py +160 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/triage/rules.py +447 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/assist/triage/run.py +224 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/__init__.py +9 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/extract/__init__.py +12 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/extract/_markdown.py +371 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/extract/_text.py +116 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/extract/mas.py +895 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/gen/__init__.py +11 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/gen/agents_md/__init__.py +148 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/gen/agents_md/_context.py +239 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/gen/agents_md/_markers.py +131 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/gen/agents_md/agents_md.md.j2 +178 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/gen/diagram/__init__.py +110 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/gen/diagram/__main__.py +44 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/gen/diagram/_diagrams.py +403 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/gen/diagram/_scene.py +163 -0
- chipgraph-0.1.0rc1/src/chipgraph/packs/spec_core/pack.yml +6 -0
- chipgraph-0.1.0rc1/src/chipgraph/py.typed +0 -0
- chipgraph-0.1.0rc1/tests/adapters/format/__init__.py +1 -0
- chipgraph-0.1.0rc1/tests/adapters/format/fixtures/qsoc_contract.yml +356 -0
- chipgraph-0.1.0rc1/tests/adapters/format/fixtures/tiny_chip.yml +46 -0
- chipgraph-0.1.0rc1/tests/adapters/format/test_chip_yaml.py +172 -0
- chipgraph-0.1.0rc1/tests/adapters/format/test_qsoc_contract.py +176 -0
- chipgraph-0.1.0rc1/tests/adapters/llm/llm_helpers.py +29 -0
- chipgraph-0.1.0rc1/tests/adapters/llm/test_decide_backend.py +193 -0
- chipgraph-0.1.0rc1/tests/adapters/llm/test_llm_anthropic.py +263 -0
- chipgraph-0.1.0rc1/tests/adapters/llm/test_llm_entry_points.py +23 -0
- chipgraph-0.1.0rc1/tests/adapters/llm/test_llm_fake.py +77 -0
- chipgraph-0.1.0rc1/tests/adapters/llm/test_llm_guard.py +267 -0
- chipgraph-0.1.0rc1/tests/adapters/parser/logs/verible.log +4 -0
- chipgraph-0.1.0rc1/tests/adapters/parser/logs/verilator_5020.log +6 -0
- chipgraph-0.1.0rc1/tests/adapters/parser/logs/verilator_5052.log +25 -0
- chipgraph-0.1.0rc1/tests/adapters/parser/test_generic_regex.py +82 -0
- chipgraph-0.1.0rc1/tests/adapters/parser/test_init.py +20 -0
- chipgraph-0.1.0rc1/tests/adapters/parser/test_verible.py +80 -0
- chipgraph-0.1.0rc1/tests/adapters/parser/test_verilator.py +112 -0
- chipgraph-0.1.0rc1/tests/adapters/review/test_file.py +148 -0
- chipgraph-0.1.0rc1/tests/adapters/runner/test_local.py +105 -0
- chipgraph-0.1.0rc1/tests/adapters/runtime/test_claude_code_decisions.py +300 -0
- chipgraph-0.1.0rc1/tests/adapters/runtime/test_claude_code_runtime.py +186 -0
- chipgraph-0.1.0rc1/tests/adapters/test_entry_points.py +14 -0
- chipgraph-0.1.0rc1/tests/adapters/tool/rtl_fixtures/fsm.sv +47 -0
- chipgraph-0.1.0rc1/tests/adapters/tool/rtl_fixtures/simple_core.sv +31 -0
- chipgraph-0.1.0rc1/tests/adapters/tool/rtl_fixtures/test.f +5 -0
- chipgraph-0.1.0rc1/tests/adapters/tool/rtl_fixtures/types_pkg.sv +14 -0
- chipgraph-0.1.0rc1/tests/adapters/tool/rtl_fixtures/wrapper.sv +26 -0
- chipgraph-0.1.0rc1/tests/adapters/tool/test_cmd.py +292 -0
- chipgraph-0.1.0rc1/tests/adapters/tool/test_filelist_reader.py +240 -0
- chipgraph-0.1.0rc1/tests/adapters/tool/test_pyslang.py +375 -0
- chipgraph-0.1.0rc1/tests/adapters/vcs/test_git.py +131 -0
- chipgraph-0.1.0rc1/tests/app/conftest.py +43 -0
- chipgraph-0.1.0rc1/tests/app/test_app_findings.py +174 -0
- chipgraph-0.1.0rc1/tests/app/test_baseline_app.py +144 -0
- chipgraph-0.1.0rc1/tests/app/test_build.py +164 -0
- chipgraph-0.1.0rc1/tests/app/test_checks.py +196 -0
- chipgraph-0.1.0rc1/tests/app/test_context.py +79 -0
- chipgraph-0.1.0rc1/tests/app/test_context_local_plugins.py +152 -0
- chipgraph-0.1.0rc1/tests/app/test_executors.py +84 -0
- chipgraph-0.1.0rc1/tests/app/test_ingest_app.py +202 -0
- chipgraph-0.1.0rc1/tests/app/test_ingest_documents.py +117 -0
- chipgraph-0.1.0rc1/tests/checks/cdc_fixtures/hier_cross.sv +24 -0
- chipgraph-0.1.0rc1/tests/checks/cdc_fixtures/hier_same.sv +23 -0
- chipgraph-0.1.0rc1/tests/checks/cdc_helpers.py +151 -0
- chipgraph-0.1.0rc1/tests/checks/conftest.py +45 -0
- chipgraph-0.1.0rc1/tests/checks/cross_a_helpers.py +126 -0
- chipgraph-0.1.0rc1/tests/checks/naming_fixtures/clean.sv +22 -0
- chipgraph-0.1.0rc1/tests/checks/naming_fixtures/violations.sv +21 -0
- chipgraph-0.1.0rc1/tests/checks/test_cdc_struct.py +221 -0
- chipgraph-0.1.0rc1/tests/checks/test_cross_chip.py +243 -0
- chipgraph-0.1.0rc1/tests/checks/test_cross_duplicate.py +80 -0
- chipgraph-0.1.0rc1/tests/checks/test_cross_ports_diff.py +145 -0
- chipgraph-0.1.0rc1/tests/checks/test_cross_spec_schema.py +124 -0
- chipgraph-0.1.0rc1/tests/checks/test_filelist.py +191 -0
- chipgraph-0.1.0rc1/tests/checks/test_generated.py +110 -0
- chipgraph-0.1.0rc1/tests/checks/test_layout.py +128 -0
- chipgraph-0.1.0rc1/tests/checks/test_naming.py +268 -0
- chipgraph-0.1.0rc1/tests/checks/test_xref_connect.py +108 -0
- chipgraph-0.1.0rc1/tests/checks/test_xref_hardcode.py +150 -0
- chipgraph-0.1.0rc1/tests/checks/test_xref_trace.py +140 -0
- chipgraph-0.1.0rc1/tests/checks/xref_b_helpers.py +138 -0
- chipgraph-0.1.0rc1/tests/cli/conftest.py +23 -0
- chipgraph-0.1.0rc1/tests/cli/test_audit_cli.py +152 -0
- chipgraph-0.1.0rc1/tests/cli/test_baseline_cli.py +171 -0
- chipgraph-0.1.0rc1/tests/cli/test_check_per_block.py +58 -0
- chipgraph-0.1.0rc1/tests/cli/test_cli.py +314 -0
- chipgraph-0.1.0rc1/tests/cli/test_cli_findings.py +147 -0
- chipgraph-0.1.0rc1/tests/cli/test_cli_severity_bind.py +129 -0
- chipgraph-0.1.0rc1/tests/cli/test_config_check_plugins.py +86 -0
- chipgraph-0.1.0rc1/tests/cli/test_eval_cli.py +71 -0
- chipgraph-0.1.0rc1/tests/cli/test_ingest_cli.py +78 -0
- chipgraph-0.1.0rc1/tests/cli/test_learn_cli.py +111 -0
- chipgraph-0.1.0rc1/tests/core/config/config_fakes.py +19 -0
- chipgraph-0.1.0rc1/tests/core/config/templates_fixtures/block/rtl_module.sv.j2 +5 -0
- chipgraph-0.1.0rc1/tests/core/config/templates_fixtures/org/rtl_module.sv.j2 +3 -0
- chipgraph-0.1.0rc1/tests/core/config/templates_fixtures/pack/needs_var.j2 +1 -0
- chipgraph-0.1.0rc1/tests/core/config/templates_fixtures/pack/rtl_module.sv.j2 +18 -0
- chipgraph-0.1.0rc1/tests/core/config/templates_fixtures/pack/sandbox_probe.j2 +1 -0
- chipgraph-0.1.0rc1/tests/core/config/templates_fixtures/pack/whole_replace.j2 +3 -0
- chipgraph-0.1.0rc1/tests/core/config/templates_fixtures/project/header_override.j2 +4 -0
- chipgraph-0.1.0rc1/tests/core/config/templates_fixtures/project/rtl_module.sv.j2 +5 -0
- chipgraph-0.1.0rc1/tests/core/config/templates_fixtures/project_whole/whole_replace.j2 +1 -0
- chipgraph-0.1.0rc1/tests/core/config/test_loader.py +377 -0
- chipgraph-0.1.0rc1/tests/core/config/test_models.py +227 -0
- chipgraph-0.1.0rc1/tests/core/config/test_policy.py +113 -0
- chipgraph-0.1.0rc1/tests/core/config/test_resolved.py +259 -0
- chipgraph-0.1.0rc1/tests/core/config/test_templates.py +204 -0
- chipgraph-0.1.0rc1/tests/core/contracts/test_agent.py +41 -0
- chipgraph-0.1.0rc1/tests/core/contracts/test_artifact.py +67 -0
- chipgraph-0.1.0rc1/tests/core/contracts/test_check.py +76 -0
- chipgraph-0.1.0rc1/tests/core/contracts/test_event.py +58 -0
- chipgraph-0.1.0rc1/tests/core/contracts/test_export.py +57 -0
- chipgraph-0.1.0rc1/tests/core/contracts/test_finding.py +122 -0
- chipgraph-0.1.0rc1/tests/core/contracts/test_gate.py +85 -0
- chipgraph-0.1.0rc1/tests/core/contracts/test_rule.py +167 -0
- chipgraph-0.1.0rc1/tests/core/engine/_resume_kill_worker.py +76 -0
- chipgraph-0.1.0rc1/tests/core/engine/scheduler_fixtures.py +116 -0
- chipgraph-0.1.0rc1/tests/core/engine/test_baseline_core.py +169 -0
- chipgraph-0.1.0rc1/tests/core/engine/test_decide.py +460 -0
- chipgraph-0.1.0rc1/tests/core/engine/test_decide_cfg.py +87 -0
- chipgraph-0.1.0rc1/tests/core/engine/test_gate_evaluator.py +211 -0
- chipgraph-0.1.0rc1/tests/core/engine/test_graph.py +372 -0
- chipgraph-0.1.0rc1/tests/core/engine/test_records.py +82 -0
- chipgraph-0.1.0rc1/tests/core/engine/test_resume_kill.py +132 -0
- chipgraph-0.1.0rc1/tests/core/engine/test_rules.py +130 -0
- chipgraph-0.1.0rc1/tests/core/engine/test_scheduler.py +461 -0
- chipgraph-0.1.0rc1/tests/core/engine/test_scheduler_trace.py +153 -0
- chipgraph-0.1.0rc1/tests/core/model/test_entities.py +223 -0
- chipgraph-0.1.0rc1/tests/core/model/test_entity_registry.py +71 -0
- chipgraph-0.1.0rc1/tests/core/model/test_ingest_core.py +245 -0
- chipgraph-0.1.0rc1/tests/core/model/test_ingest_instances.py +209 -0
- chipgraph-0.1.0rc1/tests/core/model/test_keys.py +79 -0
- chipgraph-0.1.0rc1/tests/core/model/test_model.py +150 -0
- chipgraph-0.1.0rc1/tests/core/model/test_query.py +516 -0
- chipgraph-0.1.0rc1/tests/core/model/test_relations.py +27 -0
- chipgraph-0.1.0rc1/tests/core/model/test_store.py +236 -0
- chipgraph-0.1.0rc1/tests/core/plugin_api/fakes.py +152 -0
- chipgraph-0.1.0rc1/tests/core/plugin_api/local_plugin_fixtures/duplicate.py +23 -0
- chipgraph-0.1.0rc1/tests/core/plugin_api/local_plugin_fixtures/no_register.py +3 -0
- chipgraph-0.1.0rc1/tests/core/plugin_api/local_plugin_fixtures/raises_on_import.py +3 -0
- chipgraph-0.1.0rc1/tests/core/plugin_api/local_plugin_fixtures/tiny_layout.py +63 -0
- chipgraph-0.1.0rc1/tests/core/plugin_api/test_local_plugins.py +265 -0
- chipgraph-0.1.0rc1/tests/core/plugin_api/test_pack.py +148 -0
- chipgraph-0.1.0rc1/tests/core/plugin_api/test_protocols.py +73 -0
- chipgraph-0.1.0rc1/tests/core/plugin_api/test_registry.py +123 -0
- chipgraph-0.1.0rc1/tests/core/plugin_api/test_tool_context.py +18 -0
- chipgraph-0.1.0rc1/tests/core/runtime/test_task_queue.py +213 -0
- chipgraph-0.1.0rc1/tests/core/state/test_artifacts.py +141 -0
- chipgraph-0.1.0rc1/tests/core/state/test_backend.py +116 -0
- chipgraph-0.1.0rc1/tests/core/state/test_findings.py +145 -0
- chipgraph-0.1.0rc1/tests/core/state/test_handoff.py +302 -0
- chipgraph-0.1.0rc1/tests/core/state/test_idempotency.py +53 -0
- chipgraph-0.1.0rc1/tests/core/state/test_journal.py +170 -0
- chipgraph-0.1.0rc1/tests/core/state/test_lock.py +102 -0
- chipgraph-0.1.0rc1/tests/core/state/test_trace.py +120 -0
- chipgraph-0.1.0rc1/tests/e2e/conftest.py +69 -0
- chipgraph-0.1.0rc1/tests/e2e/test_tinysoc.py +195 -0
- chipgraph-0.1.0rc1/tests/evals/test_ask_grader.py +247 -0
- chipgraph-0.1.0rc1/tests/evals/test_eval_claude_code.py +302 -0
- chipgraph-0.1.0rc1/tests/evals/test_eval_framework.py +201 -0
- chipgraph-0.1.0rc1/tests/evals/test_eval_workflow.py +82 -0
- chipgraph-0.1.0rc1/tests/evals/test_triage_grader.py +126 -0
- chipgraph-0.1.0rc1/tests/evals/test_triage_holdout.py +251 -0
- chipgraph-0.1.0rc1/tests/evals/test_triage_holdout2.py +344 -0
- chipgraph-0.1.0rc1/tests/evals/test_triage_samples.py +201 -0
- chipgraph-0.1.0rc1/tests/learn/learn_helpers.py +149 -0
- chipgraph-0.1.0rc1/tests/learn/test_learn_accept.py +170 -0
- chipgraph-0.1.0rc1/tests/learn/test_learn_infer.py +160 -0
- chipgraph-0.1.0rc1/tests/mcp/conftest.py +52 -0
- chipgraph-0.1.0rc1/tests/mcp/runtime_tools_helpers.py +176 -0
- chipgraph-0.1.0rc1/tests/mcp/test_audit_mcp.py +104 -0
- chipgraph-0.1.0rc1/tests/mcp/test_model_tools.py +444 -0
- chipgraph-0.1.0rc1/tests/mcp/test_runtime_tools.py +227 -0
- chipgraph-0.1.0rc1/tests/mcp/test_server.py +223 -0
- chipgraph-0.1.0rc1/tests/mcp/test_stdio.py +53 -0
- chipgraph-0.1.0rc1/tests/packs/assist/ask_helpers.py +45 -0
- chipgraph-0.1.0rc1/tests/packs/assist/audit_helpers.py +95 -0
- chipgraph-0.1.0rc1/tests/packs/assist/test_ask_answer.py +147 -0
- chipgraph-0.1.0rc1/tests/packs/assist/test_ask_check.py +144 -0
- chipgraph-0.1.0rc1/tests/packs/assist/test_ask_context.py +139 -0
- chipgraph-0.1.0rc1/tests/packs/assist/test_ask_fts.py +99 -0
- chipgraph-0.1.0rc1/tests/packs/assist/test_ask_surfaces.py +155 -0
- chipgraph-0.1.0rc1/tests/packs/assist/test_audit.py +219 -0
- chipgraph-0.1.0rc1/tests/packs/assist/test_triage_question.py +180 -0
- chipgraph-0.1.0rc1/tests/packs/assist/test_triage_rules.py +320 -0
- chipgraph-0.1.0rc1/tests/packs/assist/test_triage_run.py +359 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/agents_md_snapshots/full.md +140 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/agents_md_snapshots/qsoc.md +117 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/agents_md_snapshots/tinysoc.md +72 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/conftest.py +15 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/qsoc/block_diagram.drawio +66 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/qsoc/block_diagram.svg +44 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/qsoc/clock_reset_tree.drawio +102 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/qsoc/clock_reset_tree.svg +56 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/qsoc/interrupt_map.drawio +48 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/qsoc/interrupt_map.svg +32 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/qsoc/memory_map.drawio +84 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/qsoc/memory_map.svg +62 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/tiny_chip/block_diagram.drawio +26 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/tiny_chip/block_diagram.svg +16 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/tiny_chip/clock_reset_tree.drawio +39 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/tiny_chip/clock_reset_tree.svg +22 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/tiny_chip/interrupt_map.drawio +18 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/tiny_chip/interrupt_map.svg +12 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/tiny_chip/memory_map.drawio +20 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/diagram_snapshots/tiny_chip/memory_map.svg +14 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/mas_fixtures/QNSC_DMA_MAS.md +407 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/mas_fixtures/QNSC_Interrupt_Map_MAS.md +288 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/mas_fixtures/QNSC_SCRC_MAS.md +591 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/mas_fixtures/QNSC_SYSCSR_MAS.md +314 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/mas_fixtures/QNSC_TIMER_MAS.md +314 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/mas_fixtures/QNSC_UART_MAS.md +318 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/test_agents_md.py +325 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/test_agents_md_cli.py +169 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/test_agents_md_markers.py +111 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/test_diagram.py +267 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/test_mas_extract.py +156 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/test_mas_fixtures.py +133 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/test_mas_modes.py +230 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/test_mas_shorthand.py +120 -0
- chipgraph-0.1.0rc1/tests/packs/spec_core/test_registration.py +25 -0
- chipgraph-0.1.0rc1/tests/plugin/test_guard.py +347 -0
- chipgraph-0.1.0rc1/tests/plugin/test_init_tool.py +205 -0
- chipgraph-0.1.0rc1/tests/plugin/test_plugin_acceptance_report.py +166 -0
- chipgraph-0.1.0rc1/tests/plugin/test_plugin_commands.py +196 -0
- chipgraph-0.1.0rc1/tests/test_example_profiles.py +38 -0
- chipgraph-0.1.0rc1/tests/test_release_metadata.py +70 -0
- chipgraph-0.1.0rc1/tests/test_release_workflow.py +52 -0
- chipgraph-0.1.0rc1/tests/test_version.py +17 -0
- chipgraph-0.1.0rc1/uv.lock +3171 -0
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "chipgraph",
|
|
3
|
+
"description": "chipgraph: an AI agent system for chip (IC) design",
|
|
4
|
+
"owner": {
|
|
5
|
+
"name": "quynhonsemiconductor",
|
|
6
|
+
"url": "https://github.com/quynhonsemiconductor"
|
|
7
|
+
},
|
|
8
|
+
"plugins": [
|
|
9
|
+
{
|
|
10
|
+
"name": "chipgraph",
|
|
11
|
+
"source": "./plugin",
|
|
12
|
+
"description": "chipgraph for chip (IC) design in Claude Code: /chipgraph:status, /chipgraph:trace, /chipgraph:ask, /chipgraph:triage, /chipgraph:init-chipgraph and /chipgraph:run, over the chipgraph MCP server."
|
|
13
|
+
}
|
|
14
|
+
]
|
|
15
|
+
}
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# Root .dockerignore — the build context is the repo root (docker/Dockerfile COPYs
|
|
2
|
+
# pyproject.toml, uv.lock, README.md, src/, and, for the `test` target, tests/ and
|
|
3
|
+
# examples/ from there), so this lives at the root rather than under docker/.
|
|
4
|
+
|
|
5
|
+
.git
|
|
6
|
+
.github
|
|
7
|
+
.venv
|
|
8
|
+
venv
|
|
9
|
+
__pycache__
|
|
10
|
+
*.py[cod]
|
|
11
|
+
*.egg-info
|
|
12
|
+
.eggs
|
|
13
|
+
.mypy_cache
|
|
14
|
+
.ruff_cache
|
|
15
|
+
.pytest_cache
|
|
16
|
+
.cache
|
|
17
|
+
dist
|
|
18
|
+
build
|
|
19
|
+
docs
|
|
20
|
+
doc
|
|
21
|
+
plugin
|
|
22
|
+
.claude-plugin
|
|
23
|
+
evals
|
|
24
|
+
interfaces
|
|
25
|
+
presets
|
|
26
|
+
orgs
|
|
27
|
+
*.md
|
|
28
|
+
!README.md
|
|
29
|
+
.DS_Store
|
|
@@ -0,0 +1,15 @@
|
|
|
1
|
+
root = true
|
|
2
|
+
|
|
3
|
+
[*]
|
|
4
|
+
charset = utf-8
|
|
5
|
+
end_of_line = lf
|
|
6
|
+
insert_final_newline = true
|
|
7
|
+
trim_trailing_whitespace = true
|
|
8
|
+
|
|
9
|
+
[*.py]
|
|
10
|
+
indent_style = space
|
|
11
|
+
indent_size = 4
|
|
12
|
+
|
|
13
|
+
[*.{yml,yaml,json,toml,md}]
|
|
14
|
+
indent_style = space
|
|
15
|
+
indent_size = 2
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
* @Nghia-VanTrong
|
|
@@ -0,0 +1,55 @@
|
|
|
1
|
+
name: CI
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
push:
|
|
6
|
+
branches: [main]
|
|
7
|
+
|
|
8
|
+
permissions:
|
|
9
|
+
contents: read
|
|
10
|
+
|
|
11
|
+
concurrency:
|
|
12
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
13
|
+
cancel-in-progress: true
|
|
14
|
+
|
|
15
|
+
jobs:
|
|
16
|
+
check:
|
|
17
|
+
strategy:
|
|
18
|
+
matrix:
|
|
19
|
+
os: [ubuntu-latest, macos-latest]
|
|
20
|
+
python: ["3.13", "3.14"]
|
|
21
|
+
runs-on: ${{ matrix.os }}
|
|
22
|
+
steps:
|
|
23
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
24
|
+
with:
|
|
25
|
+
persist-credentials: false
|
|
26
|
+
|
|
27
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
28
|
+
with:
|
|
29
|
+
python-version: ${{ matrix.python }}
|
|
30
|
+
|
|
31
|
+
- run: uv sync --locked
|
|
32
|
+
|
|
33
|
+
- run: uv run ruff check .
|
|
34
|
+
|
|
35
|
+
- run: uv run ruff format --check .
|
|
36
|
+
|
|
37
|
+
- run: uv run lint-imports
|
|
38
|
+
|
|
39
|
+
- run: uv run mypy
|
|
40
|
+
|
|
41
|
+
- run: uv run pytest
|
|
42
|
+
|
|
43
|
+
- run: make schemas-check
|
|
44
|
+
|
|
45
|
+
secrets:
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
steps:
|
|
48
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
49
|
+
with:
|
|
50
|
+
persist-credentials: false
|
|
51
|
+
fetch-depth: 0
|
|
52
|
+
|
|
53
|
+
- uses: trufflesecurity/trufflehog@4dd8831c5f12599465d4d45c3c447b4018a34c85 # v3.97.9
|
|
54
|
+
with:
|
|
55
|
+
extra_args: --only-verified
|
|
@@ -0,0 +1,132 @@
|
|
|
1
|
+
name: evals
|
|
2
|
+
|
|
3
|
+
# Real-model evals (task M1-17): `chipgraph eval` with runtime claude-code (headless
|
|
4
|
+
# Claude Code, haiku main session by default) on the ask, triage, triage-holdout and
|
|
5
|
+
# triage-holdout2 suites. Never on push or pull requests: started by hand or weekly. The
|
|
6
|
+
# framework itself is checked on every PR by the fake-runtime tests in the normal CI
|
|
7
|
+
# (tests/evals).
|
|
8
|
+
#
|
|
9
|
+
# Auth: the repository secret CHIPGRAPH_EVALS_CLAUDE_TOKEN, a Claude Code OAuth token of
|
|
10
|
+
# a separate account (`claude setup-token`), passed to `claude` as
|
|
11
|
+
# CLAUDE_CODE_OAUTH_TOKEN. Without the secret the job skips, green, with a notice.
|
|
12
|
+
# Cost cap: --budget-usd per suite (claude's --max-budget-usd per sample, and the suite
|
|
13
|
+
# stops once the summed total_cost_usd reaches it); --time-limit per suite.
|
|
14
|
+
|
|
15
|
+
on:
|
|
16
|
+
workflow_dispatch:
|
|
17
|
+
inputs:
|
|
18
|
+
suite:
|
|
19
|
+
description: Suite to run
|
|
20
|
+
type: choice
|
|
21
|
+
options: [all, ask, triage, triage-holdout, triage-holdout2]
|
|
22
|
+
default: all
|
|
23
|
+
main_model:
|
|
24
|
+
description: Main session model
|
|
25
|
+
type: string
|
|
26
|
+
default: haiku
|
|
27
|
+
budget_usd:
|
|
28
|
+
description: Cost cap per suite, in USD
|
|
29
|
+
type: string
|
|
30
|
+
default: "3"
|
|
31
|
+
schedule:
|
|
32
|
+
- cron: "17 3 * * 1" # Mondays 03:17 UTC
|
|
33
|
+
|
|
34
|
+
permissions:
|
|
35
|
+
contents: read
|
|
36
|
+
|
|
37
|
+
concurrency:
|
|
38
|
+
group: ${{ github.workflow }}
|
|
39
|
+
cancel-in-progress: false
|
|
40
|
+
|
|
41
|
+
env:
|
|
42
|
+
CLAUDE_CODE_VERSION: 2.1.286
|
|
43
|
+
|
|
44
|
+
jobs:
|
|
45
|
+
evals:
|
|
46
|
+
runs-on: ubuntu-latest
|
|
47
|
+
timeout-minutes: 240
|
|
48
|
+
steps:
|
|
49
|
+
- name: Check for the evals secret
|
|
50
|
+
id: auth
|
|
51
|
+
env:
|
|
52
|
+
TOKEN: ${{ secrets.CHIPGRAPH_EVALS_CLAUDE_TOKEN }}
|
|
53
|
+
run: |
|
|
54
|
+
if [ -n "$TOKEN" ]; then
|
|
55
|
+
echo "ok=true" >> "$GITHUB_OUTPUT"
|
|
56
|
+
else
|
|
57
|
+
echo "ok=false" >> "$GITHUB_OUTPUT"
|
|
58
|
+
msg="CHIPGRAPH_EVALS_CLAUDE_TOKEN is not set: real-model evals skipped (see evals/README.md)."
|
|
59
|
+
echo "::notice::$msg"
|
|
60
|
+
echo "$msg" >> "$GITHUB_STEP_SUMMARY"
|
|
61
|
+
fi
|
|
62
|
+
|
|
63
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
64
|
+
if: steps.auth.outputs.ok == 'true'
|
|
65
|
+
with:
|
|
66
|
+
persist-credentials: false
|
|
67
|
+
|
|
68
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
69
|
+
if: steps.auth.outputs.ok == 'true'
|
|
70
|
+
with:
|
|
71
|
+
python-version: "3.14"
|
|
72
|
+
|
|
73
|
+
- uses: actions/setup-node@820762786026740c76f36085b0efc47a31fe5020 # v7.0.0
|
|
74
|
+
if: steps.auth.outputs.ok == 'true'
|
|
75
|
+
with:
|
|
76
|
+
node-version: "24"
|
|
77
|
+
|
|
78
|
+
- name: Install Claude Code
|
|
79
|
+
if: steps.auth.outputs.ok == 'true'
|
|
80
|
+
run: |
|
|
81
|
+
npm install -g "@anthropic-ai/claude-code@${CLAUDE_CODE_VERSION}"
|
|
82
|
+
claude --version
|
|
83
|
+
|
|
84
|
+
- run: uv sync --locked
|
|
85
|
+
if: steps.auth.outputs.ok == 'true'
|
|
86
|
+
|
|
87
|
+
- name: Run the evals
|
|
88
|
+
id: run
|
|
89
|
+
if: steps.auth.outputs.ok == 'true'
|
|
90
|
+
env:
|
|
91
|
+
CLAUDE_CODE_OAUTH_TOKEN: ${{ secrets.CHIPGRAPH_EVALS_CLAUDE_TOKEN }}
|
|
92
|
+
SUITE: ${{ inputs.suite || 'all' }}
|
|
93
|
+
MAIN_MODEL: ${{ inputs.main_model || 'haiku' }}
|
|
94
|
+
BUDGET_USD: ${{ inputs.budget_usd || '3' }}
|
|
95
|
+
EVAL_OUT: ${{ runner.temp }}/eval-report
|
|
96
|
+
run: |
|
|
97
|
+
set -u
|
|
98
|
+
if [ "$SUITE" = all ]; then suites="ask triage triage-holdout triage-holdout2"; else suites="$SUITE"; fi
|
|
99
|
+
mkdir -p "$EVAL_OUT"
|
|
100
|
+
failed=""
|
|
101
|
+
for suite in $suites; do
|
|
102
|
+
echo "::group::chipgraph eval $suite"
|
|
103
|
+
rc=0
|
|
104
|
+
uv run chipgraph eval "$suite" --runtime claude-code \
|
|
105
|
+
--main-model "$MAIN_MODEL" --budget-usd "$BUDGET_USD" \
|
|
106
|
+
--out "$EVAL_OUT/$suite" || rc=$?
|
|
107
|
+
echo "::endgroup::"
|
|
108
|
+
if [ -f "$EVAL_OUT/$suite/summary.md" ]; then
|
|
109
|
+
cat "$EVAL_OUT/$suite/summary.md" >> "$GITHUB_STEP_SUMMARY"
|
|
110
|
+
else
|
|
111
|
+
echo "chipgraph eval $suite: no report (exit $rc)" >> "$GITHUB_STEP_SUMMARY"
|
|
112
|
+
fi
|
|
113
|
+
[ "$rc" -eq 0 ] || failed="$failed $suite"
|
|
114
|
+
done
|
|
115
|
+
echo "failed=$failed" >> "$GITHUB_OUTPUT"
|
|
116
|
+
|
|
117
|
+
- name: Upload the eval report
|
|
118
|
+
if: always() && steps.auth.outputs.ok == 'true'
|
|
119
|
+
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
120
|
+
with:
|
|
121
|
+
name: eval-report-${{ github.run_id }}
|
|
122
|
+
path: ${{ runner.temp }}/eval-report
|
|
123
|
+
if-no-files-found: error
|
|
124
|
+
retention-days: 90
|
|
125
|
+
|
|
126
|
+
- name: Fail if a suite failed
|
|
127
|
+
if: steps.auth.outputs.ok == 'true' && steps.run.outputs.failed != ''
|
|
128
|
+
env:
|
|
129
|
+
FAILED: ${{ steps.run.outputs.failed }}
|
|
130
|
+
run: |
|
|
131
|
+
echo "::error::eval suites failed:$FAILED"
|
|
132
|
+
exit 1
|
|
@@ -0,0 +1,142 @@
|
|
|
1
|
+
name: image
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
pull_request:
|
|
5
|
+
paths:
|
|
6
|
+
- docker/**
|
|
7
|
+
- pyproject.toml
|
|
8
|
+
- uv.lock
|
|
9
|
+
- src/**
|
|
10
|
+
- tests/e2e/**
|
|
11
|
+
- examples/**
|
|
12
|
+
- .github/workflows/image.yml
|
|
13
|
+
push:
|
|
14
|
+
branches: [main]
|
|
15
|
+
tags: ["v*"]
|
|
16
|
+
paths:
|
|
17
|
+
- docker/**
|
|
18
|
+
- pyproject.toml
|
|
19
|
+
- uv.lock
|
|
20
|
+
- src/**
|
|
21
|
+
- tests/e2e/**
|
|
22
|
+
- examples/**
|
|
23
|
+
- .github/workflows/image.yml
|
|
24
|
+
|
|
25
|
+
permissions:
|
|
26
|
+
contents: read
|
|
27
|
+
|
|
28
|
+
concurrency:
|
|
29
|
+
group: ${{ github.workflow }}-${{ github.ref }}
|
|
30
|
+
cancel-in-progress: true
|
|
31
|
+
|
|
32
|
+
env:
|
|
33
|
+
IMAGE: ghcr.io/quynhonsemiconductor/chipgraph-eda
|
|
34
|
+
|
|
35
|
+
jobs:
|
|
36
|
+
build-test:
|
|
37
|
+
name: build test image, run tinysoc e2e
|
|
38
|
+
runs-on: ubuntu-latest
|
|
39
|
+
permissions:
|
|
40
|
+
contents: read
|
|
41
|
+
steps:
|
|
42
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
43
|
+
with:
|
|
44
|
+
persist-credentials: false
|
|
45
|
+
|
|
46
|
+
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
|
|
47
|
+
|
|
48
|
+
- uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
|
|
49
|
+
with:
|
|
50
|
+
context: .
|
|
51
|
+
file: docker/Dockerfile
|
|
52
|
+
target: test
|
|
53
|
+
tags: chipgraph-eda:test
|
|
54
|
+
load: true
|
|
55
|
+
push: false
|
|
56
|
+
cache-from: type=gha
|
|
57
|
+
cache-to: type=gha,mode=max
|
|
58
|
+
|
|
59
|
+
- name: Run the tinysoc e2e suite inside the image
|
|
60
|
+
env:
|
|
61
|
+
REPORT_DIR: ${{ runner.temp }}/e2e-report
|
|
62
|
+
run: |
|
|
63
|
+
set -eu
|
|
64
|
+
mkdir -p "$REPORT_DIR"
|
|
65
|
+
docker run --rm \
|
|
66
|
+
-v "$REPORT_DIR:/tmp/report" \
|
|
67
|
+
chipgraph-eda:test \
|
|
68
|
+
sh -c 'uv run --no-sync pytest -m e2e tests/e2e -q --junitxml=/tmp/report/e2e-junit.xml'
|
|
69
|
+
|
|
70
|
+
- name: Fail if the e2e tests did not actually run
|
|
71
|
+
env:
|
|
72
|
+
REPORT_DIR: ${{ runner.temp }}/e2e-report
|
|
73
|
+
run: |
|
|
74
|
+
python3 - "$REPORT_DIR/e2e-junit.xml" <<'PY'
|
|
75
|
+
import sys
|
|
76
|
+
import xml.etree.ElementTree as ET
|
|
77
|
+
|
|
78
|
+
root = ET.parse(sys.argv[1]).getroot()
|
|
79
|
+
suite = root if root.tag == "testsuite" else root.find("testsuite")
|
|
80
|
+
if suite is None:
|
|
81
|
+
raise SystemExit("no <testsuite> found in the junit report")
|
|
82
|
+
|
|
83
|
+
tests = int(suite.get("tests", 0))
|
|
84
|
+
failures = int(suite.get("failures", 0))
|
|
85
|
+
errors = int(suite.get("errors", 0))
|
|
86
|
+
skipped = int(suite.get("skipped", 0))
|
|
87
|
+
passed = tests - failures - errors - skipped
|
|
88
|
+
|
|
89
|
+
print(f"tests={tests} passed={passed} failures={failures} errors={errors} skipped={skipped}")
|
|
90
|
+
|
|
91
|
+
if skipped:
|
|
92
|
+
raise SystemExit(
|
|
93
|
+
f"{skipped} e2e test(s) were skipped inside the image "
|
|
94
|
+
"(verilator/make missing?) — the image must run them, not skip them"
|
|
95
|
+
)
|
|
96
|
+
if failures or errors:
|
|
97
|
+
raise SystemExit("e2e tests failed inside the image")
|
|
98
|
+
if passed < 5:
|
|
99
|
+
raise SystemExit(f"expected at least 5 passing e2e tests, got {passed}")
|
|
100
|
+
PY
|
|
101
|
+
|
|
102
|
+
publish:
|
|
103
|
+
name: publish image to GHCR
|
|
104
|
+
needs: build-test
|
|
105
|
+
if: >-
|
|
106
|
+
github.event_name == 'push' &&
|
|
107
|
+
(github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
|
|
108
|
+
runs-on: ubuntu-latest
|
|
109
|
+
permissions:
|
|
110
|
+
contents: read
|
|
111
|
+
packages: write # push chipgraph-eda to ghcr.io
|
|
112
|
+
steps:
|
|
113
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
114
|
+
with:
|
|
115
|
+
persist-credentials: false
|
|
116
|
+
|
|
117
|
+
- uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
|
|
118
|
+
|
|
119
|
+
- id: meta
|
|
120
|
+
uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
|
|
121
|
+
with:
|
|
122
|
+
images: ${{ env.IMAGE }}
|
|
123
|
+
tags: |
|
|
124
|
+
type=raw,value=main,enable={{is_default_branch}}
|
|
125
|
+
type=sha,prefix=sha-,format=short
|
|
126
|
+
type=semver,pattern={{version}}
|
|
127
|
+
|
|
128
|
+
- uses: docker/login-action@dbcb813823bdd20940b903addbd779551569679f # v4.6.0
|
|
129
|
+
with:
|
|
130
|
+
registry: ghcr.io
|
|
131
|
+
username: ${{ github.actor }}
|
|
132
|
+
password: ${{ secrets.GITHUB_TOKEN }}
|
|
133
|
+
|
|
134
|
+
- uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
|
|
135
|
+
with:
|
|
136
|
+
context: .
|
|
137
|
+
file: docker/Dockerfile
|
|
138
|
+
push: true
|
|
139
|
+
tags: ${{ steps.meta.outputs.tags }}
|
|
140
|
+
labels: ${{ steps.meta.outputs.labels }}
|
|
141
|
+
cache-from: type=gha
|
|
142
|
+
cache-to: type=gha,mode=max
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
name: Release
|
|
2
|
+
|
|
3
|
+
on:
|
|
4
|
+
push:
|
|
5
|
+
tags: ["v*"]
|
|
6
|
+
workflow_dispatch:
|
|
7
|
+
inputs:
|
|
8
|
+
target:
|
|
9
|
+
description: "Where to publish"
|
|
10
|
+
required: true
|
|
11
|
+
type: choice
|
|
12
|
+
options: ["testpypi", "pypi"]
|
|
13
|
+
default: "testpypi"
|
|
14
|
+
|
|
15
|
+
permissions:
|
|
16
|
+
contents: read
|
|
17
|
+
|
|
18
|
+
jobs:
|
|
19
|
+
build:
|
|
20
|
+
runs-on: ubuntu-latest
|
|
21
|
+
outputs:
|
|
22
|
+
version: ${{ steps.version.outputs.version }}
|
|
23
|
+
steps:
|
|
24
|
+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
|
|
25
|
+
with:
|
|
26
|
+
persist-credentials: false
|
|
27
|
+
|
|
28
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
29
|
+
with:
|
|
30
|
+
python-version: "3.13"
|
|
31
|
+
|
|
32
|
+
- name: Check that the tag matches pyproject.toml's version
|
|
33
|
+
if: startsWith(github.ref, 'refs/tags/')
|
|
34
|
+
run: |
|
|
35
|
+
tag="${GITHUB_REF_NAME#v}"
|
|
36
|
+
version="$(uv run --no-project python -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')"
|
|
37
|
+
if [ "$tag" != "$version" ]; then
|
|
38
|
+
echo "::error::tag v$tag does not match pyproject.toml version $version"
|
|
39
|
+
exit 1
|
|
40
|
+
fi
|
|
41
|
+
|
|
42
|
+
- name: Read the version
|
|
43
|
+
id: version
|
|
44
|
+
run: |
|
|
45
|
+
version="$(uv run --no-project python -c 'import tomllib; print(tomllib.load(open("pyproject.toml", "rb"))["project"]["version"])')"
|
|
46
|
+
echo "version=$version" >> "$GITHUB_OUTPUT"
|
|
47
|
+
|
|
48
|
+
- run: uv build
|
|
49
|
+
|
|
50
|
+
- uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7.0.1
|
|
51
|
+
with:
|
|
52
|
+
name: dist
|
|
53
|
+
path: dist/
|
|
54
|
+
|
|
55
|
+
publish-testpypi:
|
|
56
|
+
needs: build
|
|
57
|
+
if: |
|
|
58
|
+
(startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'rc')) ||
|
|
59
|
+
(github.event_name == 'workflow_dispatch' && inputs.target == 'testpypi')
|
|
60
|
+
runs-on: ubuntu-latest
|
|
61
|
+
environment: testpypi
|
|
62
|
+
permissions:
|
|
63
|
+
id-token: write
|
|
64
|
+
steps:
|
|
65
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
66
|
+
with:
|
|
67
|
+
name: dist
|
|
68
|
+
path: dist/
|
|
69
|
+
|
|
70
|
+
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
71
|
+
with:
|
|
72
|
+
repository-url: https://test.pypi.org/legacy/
|
|
73
|
+
|
|
74
|
+
# A release candidate goes to TestPyPI first; this job installs that exact build from
|
|
75
|
+
# TestPyPI and runs it. Only if it works does the same build go on to PyPI, because the
|
|
76
|
+
# marketplace plugin runs `uvx chipgraph@<version>`, which resolves from PyPI.
|
|
77
|
+
smoke-testpypi:
|
|
78
|
+
needs: [build, publish-testpypi]
|
|
79
|
+
runs-on: ubuntu-latest
|
|
80
|
+
steps:
|
|
81
|
+
- uses: astral-sh/setup-uv@c18668ad3cf93ea998bef934396af7bb5c839dc7 # v10.2.0
|
|
82
|
+
with:
|
|
83
|
+
python-version: "3.13"
|
|
84
|
+
|
|
85
|
+
- name: Install the TestPyPI build with uvx and run it
|
|
86
|
+
env:
|
|
87
|
+
VERSION: ${{ needs.build.outputs.version }}
|
|
88
|
+
run: |
|
|
89
|
+
# TestPyPI can take a minute to serve a new upload: retry for up to ~5 minutes.
|
|
90
|
+
for attempt in 1 2 3 4 5 6 7 8 9 10; do
|
|
91
|
+
if out="$(uvx --no-cache --index https://test.pypi.org/simple/ \
|
|
92
|
+
--index-strategy unsafe-best-match "chipgraph@$VERSION" --version 2>&1)"; then
|
|
93
|
+
echo "$out"
|
|
94
|
+
case "$out" in
|
|
95
|
+
*"$VERSION"*) ;;
|
|
96
|
+
*) echo "::error::expected version $VERSION, got: $out"; exit 1 ;;
|
|
97
|
+
esac
|
|
98
|
+
uvx --no-cache --index https://test.pypi.org/simple/ \
|
|
99
|
+
--index-strategy unsafe-best-match "chipgraph@$VERSION" --help > /dev/null
|
|
100
|
+
exit 0
|
|
101
|
+
fi
|
|
102
|
+
echo "attempt $attempt: not installable yet"; sleep 30
|
|
103
|
+
done
|
|
104
|
+
echo "::error::chipgraph $VERSION could not be installed from TestPyPI"
|
|
105
|
+
exit 1
|
|
106
|
+
|
|
107
|
+
# A final tag goes straight to PyPI; a release-candidate tag only after the TestPyPI
|
|
108
|
+
# smoke test passed. Either way the `pypi` environment's reviewer must approve.
|
|
109
|
+
publish-pypi:
|
|
110
|
+
needs: [build, smoke-testpypi]
|
|
111
|
+
if: |
|
|
112
|
+
!cancelled() && needs.build.result == 'success' && (
|
|
113
|
+
(startsWith(github.ref, 'refs/tags/') && !contains(github.ref_name, 'rc')) ||
|
|
114
|
+
(startsWith(github.ref, 'refs/tags/') && contains(github.ref_name, 'rc') &&
|
|
115
|
+
needs.smoke-testpypi.result == 'success') ||
|
|
116
|
+
(github.event_name == 'workflow_dispatch' && inputs.target == 'pypi')
|
|
117
|
+
)
|
|
118
|
+
runs-on: ubuntu-latest
|
|
119
|
+
environment: pypi
|
|
120
|
+
permissions:
|
|
121
|
+
id-token: write
|
|
122
|
+
steps:
|
|
123
|
+
- uses: actions/download-artifact@3e5f45b2cfb9172054b4087a40e8e0b5a5461e7c # v8.0.1
|
|
124
|
+
with:
|
|
125
|
+
name: dist
|
|
126
|
+
path: dist/
|
|
127
|
+
|
|
128
|
+
- uses: pypa/gh-action-pypi-publish@dc37677b2e1c63e2034f94d8a5b11f265b73ba33 # v1.14.2
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.egg-info/
|
|
6
|
+
.eggs/
|
|
7
|
+
build/
|
|
8
|
+
dist/
|
|
9
|
+
|
|
10
|
+
# uv / venv
|
|
11
|
+
.venv/
|
|
12
|
+
venv/
|
|
13
|
+
|
|
14
|
+
# Caches
|
|
15
|
+
.mypy_cache/
|
|
16
|
+
.ruff_cache/
|
|
17
|
+
.pytest_cache/
|
|
18
|
+
.cache/
|
|
19
|
+
|
|
20
|
+
# chipgraph runtime state
|
|
21
|
+
.chipgraph/state/
|
|
22
|
+
|
|
23
|
+
# OS
|
|
24
|
+
.DS_Store
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
3.14
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
# AGENTS.md — working on the chipgraph repository
|
|
2
|
+
|
|
3
|
+
`chipgraph` is an AI agent system for chip (IC) design. It treats a chip project as a
|
|
4
|
+
**build graph**: specs, RTL, tests and reports are artifacts; rules produce them (code,
|
|
5
|
+
AI agents or humans); deterministic EDA checks verify every step; humans approve at gates.
|
|
6
|
+
All of this runs over a typed **Design Model** of the chip.
|
|
7
|
+
|
|
8
|
+
This file tells coding agents (and humans) how to work on this repository.
|
|
9
|
+
|
|
10
|
+
## Read first, in this order
|
|
11
|
+
|
|
12
|
+
1. [`docs/IMPLEMENTATION_PLAN.md`](docs/IMPLEMENTATION_PLAN.md): find your task ID, its `depends`, `writes` and `accept`.
|
|
13
|
+
2. [`DESIGN.md`](DESIGN.md): the section your task refers to. It is written in Vietnamese; identifiers are English.
|
|
14
|
+
3. [`docs/DECISIONS.md`](docs/DECISIONS.md): the reasons behind the design. Do not re-litigate a decision in code; propose an ADR instead.
|
|
15
|
+
|
|
16
|
+
## Hard rules
|
|
17
|
+
|
|
18
|
+
1. **One task, one PR.** Branch `feat/<task-id>-<slug>`, for example `feat/m0-06-graph`. Take a task only when every `depends` is merged.
|
|
19
|
+
2. **Stay inside `writes`.** If you need to change another file, open an issue and stop.
|
|
20
|
+
3. **Contracts are frozen.** Do not change `src/chipgraph/core/contracts/` or `src/chipgraph/core/plugin_api/` unless your task says so. Other agents build against them.
|
|
21
|
+
4. **Core knows nothing about chips or tools.** `chipgraph.core` must not import `chipgraph.adapters` or any pack, and must not contain project, bus, PDK or tool names (QSoC, APB, GF180, Verilator). `import-linter` enforces the import rule in CI.
|
|
22
|
+
5. **Tests for every `accept` criterion.** CI never calls a real model: use `adapters/llm/fake.py`. Real-model evals run only in the nightly `evals` job.
|
|
23
|
+
6. **Public repository.** Never commit secrets, API keys, internal or NDA data, or files from private projects. Examples and fixtures use open-source IP and PDKs only (`examples/tinysoc`, GF180, Sky130).
|
|
24
|
+
7. **Nothing from the teacher's flow.** Do not copy files, prompts or code from `VLSIT_RTL_Generator_AI_Model`. chipgraph is independent.
|
|
25
|
+
8. **Commits and PRs** use Conventional Commits (`feat:`, `fix:`, `docs:`, `test:`, `chore:`). Do not add AI attribution lines ("Co-Authored-By", "Generated with …") to commits or PR descriptions.
|
|
26
|
+
|
|
27
|
+
## Commands
|
|
28
|
+
|
|
29
|
+
```bash
|
|
30
|
+
uv sync # install (Python 3.14; 3.13 supported)
|
|
31
|
+
uv run chipgraph --help # CLI
|
|
32
|
+
uv run pytest # all tests
|
|
33
|
+
uv run pytest tests/e2e # end-to-end on examples/tinysoc (needs the EDA tools or the chipgraph-eda image)
|
|
34
|
+
uv run ruff check . && uv run ruff format --check .
|
|
35
|
+
uv run mypy src/chipgraph/core
|
|
36
|
+
uv run lint-imports # dependency rules
|
|
37
|
+
make schemas # regenerate schemas/ from the pydantic contracts
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
## Layout
|
|
41
|
+
|
|
42
|
+
```
|
|
43
|
+
src/chipgraph/core/ contracts, engine, model, runtime, state, config, plugin_api
|
|
44
|
+
src/chipgraph/adapters/ tool, parser, format, llm, runtime, runner, vcs, review
|
|
45
|
+
src/chipgraph/checks/ built-in checks
|
|
46
|
+
src/chipgraph/cli/ mcp/ user surfaces
|
|
47
|
+
src/chipgraph/packs/ built-in packs: pack.yml + code, one snake_case dir each (D36)
|
|
48
|
+
src/chipgraph/orgs/ presets/ interfaces/ built-in data, not code
|
|
49
|
+
plugin/ Claude Code plugin
|
|
50
|
+
examples/tinysoc/ open-source sample project for end-to-end tests
|
|
51
|
+
evals/ Inspect AI evals
|
|
52
|
+
docs/ plan, decisions, research, spikes, pilots
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
## Code style
|
|
56
|
+
|
|
57
|
+
- Modern typing (PEP 604 unions, PEP 695 generics). `mypy --strict` for `core/`.
|
|
58
|
+
- Data models are pydantic v2 with a `schema_version` field. Data files (rules, packs, profiles) have a JSON Schema in `schemas/`.
|
|
59
|
+
- Async I/O with `asyncio`. Subprocesses go through a `Runner`, never direct `subprocess` calls in core.
|
|
60
|
+
- Every adapter returns the shared result schema (`CheckResult`, `AgentResult` …), never raw logs.
|
|
61
|
+
- Names: packs, rules, checks, roles and skills are `lower_snake_case` with a namespace, `<pack>/<name>`.
|
|
62
|
+
- Code, comments and docstrings in English.
|
|
63
|
+
|
|
64
|
+
## Definition of done
|
|
65
|
+
|
|
66
|
+
See `docs/IMPLEMENTATION_PLAN.md`, section 10. In short: only `writes` touched, tests for
|
|
67
|
+
every `accept`, CI green, docs updated, no secrets, and a PR description with the task ID,
|
|
68
|
+
what changed, how it was verified and remaining risks.
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
@AGENTS.md
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
# Contributing
|
|
2
|
+
|
|
3
|
+
Work is organized as tasks in [`docs/IMPLEMENTATION_PLAN.md`](docs/IMPLEMENTATION_PLAN.md),
|
|
4
|
+
each with an ID, `depends`, `writes` and `accept` criteria. The working rules are in
|
|
5
|
+
[`AGENTS.md`](AGENTS.md) — read it before opening a PR.
|
|
6
|
+
|
|
7
|
+
In short:
|
|
8
|
+
|
|
9
|
+
- Pick a task whose `depends` are already merged. Only touch files in its `writes`.
|
|
10
|
+
- One task, one PR. Branch name: `feat/<task-id>-<slug>` (e.g. `feat/m0-06-graph`).
|
|
11
|
+
- Commit messages follow [Conventional Commits](https://www.conventionalcommits.org/)
|
|
12
|
+
(`feat:`, `fix:`, `docs:`, `test:`, `chore:`).
|
|
13
|
+
- Run `make check` (lint, type, test) before pushing.
|
|
14
|
+
- Do not add AI attribution lines ("Co-Authored-By", "Generated with …") to commits or
|
|
15
|
+
PR descriptions.
|
|
16
|
+
- A PR description names the task ID, what changed, how it was verified, and remaining
|
|
17
|
+
risks.
|