chipgraph 0.1.0__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.
Files changed (934) hide show
  1. chipgraph-0.1.0/.claude-plugin/marketplace.json +15 -0
  2. chipgraph-0.1.0/.dockerignore +31 -0
  3. chipgraph-0.1.0/.editorconfig +15 -0
  4. chipgraph-0.1.0/.github/CODEOWNERS +5 -0
  5. chipgraph-0.1.0/.github/workflows/ci.yml +144 -0
  6. chipgraph-0.1.0/.github/workflows/evals.yml +132 -0
  7. chipgraph-0.1.0/.github/workflows/image.yml +194 -0
  8. chipgraph-0.1.0/.github/workflows/release-please.yml +17 -0
  9. chipgraph-0.1.0/.github/workflows/release-uv-lock.yml +77 -0
  10. chipgraph-0.1.0/.github/workflows/release.yml +138 -0
  11. chipgraph-0.1.0/.github/workflows/security.yml +52 -0
  12. chipgraph-0.1.0/.gitignore +24 -0
  13. chipgraph-0.1.0/.gitleaks.toml +13 -0
  14. chipgraph-0.1.0/.pre-commit-config.yaml +7 -0
  15. chipgraph-0.1.0/.python-version +1 -0
  16. chipgraph-0.1.0/.release-please-manifest.json +1 -0
  17. chipgraph-0.1.0/AGENTS.md +68 -0
  18. chipgraph-0.1.0/CHANGELOG.md +99 -0
  19. chipgraph-0.1.0/CLAUDE.md +1 -0
  20. chipgraph-0.1.0/CONTRIBUTING.md +17 -0
  21. chipgraph-0.1.0/DESIGN.md +1191 -0
  22. chipgraph-0.1.0/LICENSE +202 -0
  23. chipgraph-0.1.0/Makefile +54 -0
  24. chipgraph-0.1.0/PKG-INFO +53 -0
  25. chipgraph-0.1.0/README.md +27 -0
  26. chipgraph-0.1.0/SECURITY.md +20 -0
  27. chipgraph-0.1.0/docker/Dockerfile +134 -0
  28. chipgraph-0.1.0/docker/README.md +86 -0
  29. chipgraph-0.1.0/docs/DECISIONS.md +475 -0
  30. chipgraph-0.1.0/docs/IMPLEMENTATION_PLAN.md +298 -0
  31. chipgraph-0.1.0/docs/RELEASING.md +85 -0
  32. chipgraph-0.1.0/docs/REQUIREMENT_IDS.md +268 -0
  33. chipgraph-0.1.0/docs/RESEARCH.md +99 -0
  34. chipgraph-0.1.0/docs/agent-loop-claude-code/fixture.py +208 -0
  35. chipgraph-0.1.0/docs/agent-loop-claude-code/report.py +320 -0
  36. chipgraph-0.1.0/docs/agent-loop-claude-code/run.sh +85 -0
  37. chipgraph-0.1.0/docs/archive/DESIGN_v0.1.md +1119 -0
  38. chipgraph-0.1.0/docs/ask-claude-code/report.py +188 -0
  39. chipgraph-0.1.0/docs/ask-claude-code/run.sh +93 -0
  40. chipgraph-0.1.0/docs/examples/README.md +24 -0
  41. chipgraph-0.1.0/docs/examples/qsoc.chipgraph.yml +166 -0
  42. chipgraph-0.1.0/docs/isolation-claude-code/fixture.py +302 -0
  43. chipgraph-0.1.0/docs/isolation-claude-code/report.py +494 -0
  44. chipgraph-0.1.0/docs/isolation-claude-code/run.sh +188 -0
  45. chipgraph-0.1.0/docs/plugin-claude-code/report.py +333 -0
  46. chipgraph-0.1.0/docs/plugin-claude-code/run.sh +132 -0
  47. chipgraph-0.1.0/docs/roles-claude-code/fixture.py +173 -0
  48. chipgraph-0.1.0/docs/roles-claude-code/report.py +268 -0
  49. chipgraph-0.1.0/docs/roles-claude-code/run.sh +87 -0
  50. chipgraph-0.1.0/docs/rtl-claude-code/TINY_PWM_MAS.md +123 -0
  51. chipgraph-0.1.0/docs/rtl-claude-code/exemplars/a/ex_a_counter.sv +37 -0
  52. chipgraph-0.1.0/docs/rtl-claude-code/exemplars/a/ex_a_flag.sv +34 -0
  53. chipgraph-0.1.0/docs/rtl-claude-code/exemplars/b/ex_b_counter.sv +42 -0
  54. chipgraph-0.1.0/docs/rtl-claude-code/exemplars/b/ex_b_flag.sv +43 -0
  55. chipgraph-0.1.0/docs/rtl-claude-code/fixture.py +242 -0
  56. chipgraph-0.1.0/docs/rtl-claude-code/fmt_trim.py +30 -0
  57. chipgraph-0.1.0/docs/rtl-claude-code/pwm.plan.yml +28 -0
  58. chipgraph-0.1.0/docs/rtl-claude-code/report.py +299 -0
  59. chipgraph-0.1.0/docs/rtl-claude-code/run.sh +100 -0
  60. chipgraph-0.1.0/docs/rtl-target-claude-code/fixture.py +241 -0
  61. chipgraph-0.1.0/docs/rtl-target-claude-code/report.py +551 -0
  62. chipgraph-0.1.0/docs/rtl-target-claude-code/run.sh +169 -0
  63. chipgraph-0.1.0/docs/rtl-target-claude-code/sandbox.py +179 -0
  64. chipgraph-0.1.0/docs/runtime-claude-code/report.py +140 -0
  65. chipgraph-0.1.0/docs/runtime-claude-code/run.sh +80 -0
  66. chipgraph-0.1.0/docs/spikes/S2.md +66 -0
  67. chipgraph-0.1.0/docs/spikes/S3.md +251 -0
  68. chipgraph-0.1.0/docs/spikes/S5.md +68 -0
  69. chipgraph-0.1.0/docs/spikes/S7.md +101 -0
  70. chipgraph-0.1.0/docs/spikes/s3/gpio_tb.py +93 -0
  71. chipgraph-0.1.0/docs/spikes/s3/icarus_dump.v +8 -0
  72. chipgraph-0.1.0/docs/spikes/s3/parse_results.py +171 -0
  73. chipgraph-0.1.0/docs/spikes/s3/probe_configure.py +64 -0
  74. chipgraph-0.1.0/docs/spikes/s3/run.sh +26 -0
  75. chipgraph-0.1.0/docs/spikes/s3/run_all.py +243 -0
  76. chipgraph-0.1.0/docs/spikes/s3/run_edalize.py +183 -0
  77. chipgraph-0.1.0/docs/spikes/s3/run_runner.py +91 -0
  78. chipgraph-0.1.0/docs/spikes/s3/s3_common.py +144 -0
  79. chipgraph-0.1.0/docs/spikes/s3/setup_venv.sh +39 -0
  80. chipgraph-0.1.0/docs/spikes/s7/hook_guard.py +95 -0
  81. chipgraph-0.1.0/docs/spikes/s7/report.py +84 -0
  82. chipgraph-0.1.0/docs/spikes/s7/run.sh +40 -0
  83. chipgraph-0.1.0/docs/spikes/s7/s7_server.py +171 -0
  84. chipgraph-0.1.0/docs/spikes/s7/selftest.py +144 -0
  85. chipgraph-0.1.0/docs/spikes/s7/setup.sh +79 -0
  86. chipgraph-0.1.0/docs/tb-claude-code/fixture.py +139 -0
  87. chipgraph-0.1.0/docs/tb-claude-code/report.py +329 -0
  88. chipgraph-0.1.0/docs/tb-claude-code/run.sh +95 -0
  89. chipgraph-0.1.0/docs/triage-claude-code/report.py +210 -0
  90. chipgraph-0.1.0/docs/triage-claude-code/rules_only_holdout.py +105 -0
  91. chipgraph-0.1.0/docs/triage-claude-code/rules_only_holdout2.py +138 -0
  92. chipgraph-0.1.0/docs/triage-claude-code/run.sh +124 -0
  93. chipgraph-0.1.0/docs/wrapper-claude-code/fixture.py +102 -0
  94. chipgraph-0.1.0/docs/wrapper-claude-code/report.py +317 -0
  95. chipgraph-0.1.0/docs/wrapper-claude-code/run.sh +110 -0
  96. chipgraph-0.1.0/evals/README.md +397 -0
  97. chipgraph-0.1.0/evals/ask/grade.py +312 -0
  98. chipgraph-0.1.0/evals/ask/tinysoc.yml +206 -0
  99. chipgraph-0.1.0/evals/harness/__init__.py +41 -0
  100. chipgraph-0.1.0/evals/harness/authors.py +397 -0
  101. chipgraph-0.1.0/evals/harness/project.py +67 -0
  102. chipgraph-0.1.0/evals/harness/report.py +232 -0
  103. chipgraph-0.1.0/evals/harness/review.py +355 -0
  104. chipgraph-0.1.0/evals/harness/run.py +286 -0
  105. chipgraph-0.1.0/evals/harness/runtimes.py +373 -0
  106. chipgraph-0.1.0/evals/harness/streams.py +183 -0
  107. chipgraph-0.1.0/evals/harness/suites.py +210 -0
  108. chipgraph-0.1.0/evals/harness/tasks.py +91 -0
  109. chipgraph-0.1.0/evals/review/defects.yml +278 -0
  110. chipgraph-0.1.0/evals/review/defects2.yml +350 -0
  111. chipgraph-0.1.0/evals/review/grade.py +370 -0
  112. chipgraph-0.1.0/evals/rtl/__init__.py +43 -0
  113. chipgraph-0.1.0/evals/rtl/diffsim.py +360 -0
  114. chipgraph-0.1.0/evals/rtl/fixtures/common/design/common/rtl/qnsc_sync.sv +42 -0
  115. chipgraph-0.1.0/evals/rtl/fixtures/rom/design/rom/rom.f +45 -0
  116. chipgraph-0.1.0/evals/rtl/fixtures/rom/design/rom/rtl/m_qnsc_rom_wr_resp.sv +83 -0
  117. chipgraph-0.1.0/evals/rtl/fixtures/rom/doc/specs/QNSC_ROM_MAS.md +264 -0
  118. chipgraph-0.1.0/evals/rtl/fixtures/syscsr/design/syscsr/rtl/m_qnsc_syscsr_dbg_en.sv +36 -0
  119. chipgraph-0.1.0/evals/rtl/fixtures/syscsr/design/syscsr/syscsr.f +32 -0
  120. chipgraph-0.1.0/evals/rtl/fixtures/syscsr/doc/specs/QNSC_SYSCSR_MAS.md +382 -0
  121. chipgraph-0.1.0/evals/rtl/fixtures.py +254 -0
  122. chipgraph-0.1.0/evals/rtl/grade.py +267 -0
  123. chipgraph-0.1.0/evals/rtl/metrics.py +200 -0
  124. chipgraph-0.1.0/evals/rtl/mutants.py +316 -0
  125. chipgraph-0.1.0/evals/rtl/plans/rom_wr_resp.plan.yml +52 -0
  126. chipgraph-0.1.0/evals/rtl/plans/syscsr_dbg_en.plan.yml +44 -0
  127. chipgraph-0.1.0/evals/rtl/problems.py +285 -0
  128. chipgraph-0.1.0/evals/rtl/problems.yml +179 -0
  129. chipgraph-0.1.0/evals/rtl/project.py +348 -0
  130. chipgraph-0.1.0/evals/rtl/reference/rom_wr_resp.py +146 -0
  131. chipgraph-0.1.0/evals/rtl/reference/syscsr_dbg_en.py +84 -0
  132. chipgraph-0.1.0/evals/rtl/static.py +89 -0
  133. chipgraph-0.1.0/evals/rtl/stimulus.py +78 -0
  134. chipgraph-0.1.0/evals/rtl/tbsim.py +227 -0
  135. chipgraph-0.1.0/evals/run-claude-code.sh +45 -0
  136. chipgraph-0.1.0/evals/triage/faults.yml +277 -0
  137. chipgraph-0.1.0/evals/triage/gen_logs.py +441 -0
  138. chipgraph-0.1.0/evals/triage/grade.py +230 -0
  139. chipgraph-0.1.0/evals/triage/holdout.yml +167 -0
  140. chipgraph-0.1.0/evals/triage/holdout2.yml +215 -0
  141. chipgraph-0.1.0/evals/triage/logs/log-01.json +7 -0
  142. chipgraph-0.1.0/evals/triage/logs/log-01.log +8 -0
  143. chipgraph-0.1.0/evals/triage/logs/log-02.json +7 -0
  144. chipgraph-0.1.0/evals/triage/logs/log-02.log +3 -0
  145. chipgraph-0.1.0/evals/triage/logs/log-03.json +7 -0
  146. chipgraph-0.1.0/evals/triage/logs/log-03.log +2 -0
  147. chipgraph-0.1.0/evals/triage/logs/log-04.json +7 -0
  148. chipgraph-0.1.0/evals/triage/logs/log-04.log +4 -0
  149. chipgraph-0.1.0/evals/triage/logs/log-05.json +7 -0
  150. chipgraph-0.1.0/evals/triage/logs/log-05.log +17 -0
  151. chipgraph-0.1.0/evals/triage/logs/log-06.json +7 -0
  152. chipgraph-0.1.0/evals/triage/logs/log-06.log +14 -0
  153. chipgraph-0.1.0/evals/triage/logs/log-07.json +7 -0
  154. chipgraph-0.1.0/evals/triage/logs/log-07.log +17 -0
  155. chipgraph-0.1.0/evals/triage/logs/log-08.json +7 -0
  156. chipgraph-0.1.0/evals/triage/logs/log-08.log +9 -0
  157. chipgraph-0.1.0/evals/triage/logs/log-09.json +7 -0
  158. chipgraph-0.1.0/evals/triage/logs/log-09.log +2 -0
  159. chipgraph-0.1.0/evals/triage/logs/log-10.json +7 -0
  160. chipgraph-0.1.0/evals/triage/logs/log-10.log +1 -0
  161. chipgraph-0.1.0/evals/triage/logs/log-11.json +7 -0
  162. chipgraph-0.1.0/evals/triage/logs/log-11.log +17 -0
  163. chipgraph-0.1.0/evals/triage/logs/log-12.json +7 -0
  164. chipgraph-0.1.0/evals/triage/logs/log-12.log +17 -0
  165. chipgraph-0.1.0/evals/triage/logs/log-13.json +7 -0
  166. chipgraph-0.1.0/evals/triage/logs/log-13.log +2 -0
  167. chipgraph-0.1.0/evals/triage/logs/log-14.json +7 -0
  168. chipgraph-0.1.0/evals/triage/logs/log-14.log +5 -0
  169. chipgraph-0.1.0/evals/triage/logs/log-15.json +7 -0
  170. chipgraph-0.1.0/evals/triage/logs/log-15.log +14 -0
  171. chipgraph-0.1.0/evals/triage/logs/log-16.json +7 -0
  172. chipgraph-0.1.0/evals/triage/logs/log-16.log +23 -0
  173. chipgraph-0.1.0/evals/triage/logs/log-17.json +7 -0
  174. chipgraph-0.1.0/evals/triage/logs/log-17.log +3 -0
  175. chipgraph-0.1.0/evals/triage/logs/log-18.json +7 -0
  176. chipgraph-0.1.0/evals/triage/logs/log-18.log +23 -0
  177. chipgraph-0.1.0/evals/triage/logs/log-19.json +7 -0
  178. chipgraph-0.1.0/evals/triage/logs/log-19.log +2 -0
  179. chipgraph-0.1.0/evals/triage/logs/log-20.json +7 -0
  180. chipgraph-0.1.0/evals/triage/logs/log-20.log +2 -0
  181. chipgraph-0.1.0/evals/triage/logs/log-21.json +7 -0
  182. chipgraph-0.1.0/evals/triage/logs/log-21.log +16 -0
  183. chipgraph-0.1.0/evals/triage/logs/log-22.json +7 -0
  184. chipgraph-0.1.0/evals/triage/logs/log-22.log +3 -0
  185. chipgraph-0.1.0/evals/triage/logs-holdout/hold-01.json +7 -0
  186. chipgraph-0.1.0/evals/triage/logs-holdout/hold-01.log +2 -0
  187. chipgraph-0.1.0/evals/triage/logs-holdout/hold-02.json +7 -0
  188. chipgraph-0.1.0/evals/triage/logs-holdout/hold-02.log +1 -0
  189. chipgraph-0.1.0/evals/triage/logs-holdout/hold-03.json +7 -0
  190. chipgraph-0.1.0/evals/triage/logs-holdout/hold-03.log +19 -0
  191. chipgraph-0.1.0/evals/triage/logs-holdout/hold-04.json +7 -0
  192. chipgraph-0.1.0/evals/triage/logs-holdout/hold-04.log +17 -0
  193. chipgraph-0.1.0/evals/triage/logs-holdout/hold-05.json +7 -0
  194. chipgraph-0.1.0/evals/triage/logs-holdout/hold-05.log +2 -0
  195. chipgraph-0.1.0/evals/triage/logs-holdout/hold-06.json +7 -0
  196. chipgraph-0.1.0/evals/triage/logs-holdout/hold-06.log +1 -0
  197. chipgraph-0.1.0/evals/triage/logs-holdout/hold-07.json +7 -0
  198. chipgraph-0.1.0/evals/triage/logs-holdout/hold-07.log +2 -0
  199. chipgraph-0.1.0/evals/triage/logs-holdout/hold-08.json +7 -0
  200. chipgraph-0.1.0/evals/triage/logs-holdout/hold-08.log +5 -0
  201. chipgraph-0.1.0/evals/triage/logs-holdout/hold-09.json +7 -0
  202. chipgraph-0.1.0/evals/triage/logs-holdout/hold-09.log +4 -0
  203. chipgraph-0.1.0/evals/triage/logs-holdout/hold-10.json +7 -0
  204. chipgraph-0.1.0/evals/triage/logs-holdout/hold-10.log +19 -0
  205. chipgraph-0.1.0/evals/triage/logs-holdout/hold-11.json +7 -0
  206. chipgraph-0.1.0/evals/triage/logs-holdout/hold-11.log +16 -0
  207. chipgraph-0.1.0/evals/triage/logs-holdout/hold-12.json +7 -0
  208. chipgraph-0.1.0/evals/triage/logs-holdout/hold-12.log +2 -0
  209. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-01.json +7 -0
  210. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-01.log +36 -0
  211. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-02.json +7 -0
  212. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-02.log +2 -0
  213. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-03.json +7 -0
  214. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-03.log +7 -0
  215. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-04.json +7 -0
  216. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-04.log +2 -0
  217. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-05.json +7 -0
  218. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-05.log +9 -0
  219. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-06.json +7 -0
  220. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-06.log +7 -0
  221. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-07.json +7 -0
  222. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-07.log +1 -0
  223. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-08.json +7 -0
  224. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-08.log +2 -0
  225. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-09.json +7 -0
  226. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-09.log +9 -0
  227. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-10.json +7 -0
  228. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-10.log +4 -0
  229. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-11.json +7 -0
  230. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-11.log +8 -0
  231. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-12.json +7 -0
  232. chipgraph-0.1.0/evals/triage/logs-holdout2/h2-12.log +2 -0
  233. chipgraph-0.1.0/evals/triage/rules_only.py +90 -0
  234. chipgraph-0.1.0/evals/triage/tb/holdout/tb_soc_regs.sv +144 -0
  235. chipgraph-0.1.0/evals/triage/tb/holdout2/tb_gpio_pins.sv +89 -0
  236. chipgraph-0.1.0/evals/triage/tb/holdout2/tb_timer_sva.sv +98 -0
  237. chipgraph-0.1.0/evals/triage/tb/holdout2/tb_top_irq.sv +108 -0
  238. chipgraph-0.1.0/evals/triage/tb/holdout2/tb_top_scoreboard.sv +148 -0
  239. chipgraph-0.1.0/evals/triage/tb/tb_tiny_gpio.sv +101 -0
  240. chipgraph-0.1.0/evals/triage/tb/tb_tiny_timer.sv +106 -0
  241. chipgraph-0.1.0/examples/tinysoc/.chipgraph/naming.yml +48 -0
  242. chipgraph-0.1.0/examples/tinysoc/.chipgraph/packs/tinysoc/pack.yml +21 -0
  243. chipgraph-0.1.0/examples/tinysoc/.chipgraph/packs/tinysoc/rules/lint_manifest.yml +17 -0
  244. chipgraph-0.1.0/examples/tinysoc/.chipgraph/packs/tinysoc/rules/rtl.yml +22 -0
  245. chipgraph-0.1.0/examples/tinysoc/.chipgraph.yml +87 -0
  246. chipgraph-0.1.0/examples/tinysoc/.gitignore +3 -0
  247. chipgraph-0.1.0/examples/tinysoc/Makefile +36 -0
  248. chipgraph-0.1.0/examples/tinysoc/README.md +88 -0
  249. chipgraph-0.1.0/examples/tinysoc/chip.yml +42 -0
  250. chipgraph-0.1.0/examples/tinysoc/doc/specs/TINY_GPIO_MAS.md +124 -0
  251. chipgraph-0.1.0/examples/tinysoc/doc/specs/TINY_TIMER_MAS.md +131 -0
  252. chipgraph-0.1.0/examples/tinysoc/dv/tb_tiny_gpio.py +82 -0
  253. chipgraph-0.1.0/examples/tinysoc/dv/test_tiny_gpio.py +26 -0
  254. chipgraph-0.1.0/examples/tinysoc/dv/test_tiny_timer.py +38 -0
  255. chipgraph-0.1.0/examples/tinysoc/filelists/gpio.f +1 -0
  256. chipgraph-0.1.0/examples/tinysoc/filelists/timer.f +1 -0
  257. chipgraph-0.1.0/examples/tinysoc/filelists/tiny_fifo_wrap.f +2 -0
  258. chipgraph-0.1.0/examples/tinysoc/filelists/top.f +3 -0
  259. chipgraph-0.1.0/examples/tinysoc/rtl/emacs/tiny_fifo_wrap.src.sv +41 -0
  260. chipgraph-0.1.0/examples/tinysoc/rtl/tiny_fifo_wrap.sv +82 -0
  261. chipgraph-0.1.0/examples/tinysoc/rtl/tiny_gpio.sv +54 -0
  262. chipgraph-0.1.0/examples/tinysoc/rtl/tiny_timer.sv +68 -0
  263. chipgraph-0.1.0/examples/tinysoc/rtl/tiny_top.sv +67 -0
  264. chipgraph-0.1.0/examples/tinysoc/scripts/gen_manifest.py +47 -0
  265. chipgraph-0.1.0/examples/tinysoc/vendor/MANIFEST.sha256 +5 -0
  266. chipgraph-0.1.0/examples/tinysoc/vendor/vendor_fifo/vendor_fifo.f +1 -0
  267. chipgraph-0.1.0/examples/tinysoc/vendor/vendor_fifo/vendor_fifo.sv +71 -0
  268. chipgraph-0.1.0/plugin/.claude-plugin/plugin.json +14 -0
  269. chipgraph-0.1.0/plugin/.mcp.json +8 -0
  270. chipgraph-0.1.0/plugin/README.md +388 -0
  271. chipgraph-0.1.0/plugin/agents/asker.md +34 -0
  272. chipgraph-0.1.0/plugin/agents/author.md +37 -0
  273. chipgraph-0.1.0/plugin/agents/critic.md +50 -0
  274. chipgraph-0.1.0/plugin/agents/decider.md +26 -0
  275. chipgraph-0.1.0/plugin/agents/planner.md +34 -0
  276. chipgraph-0.1.0/plugin/agents/researcher.md +32 -0
  277. chipgraph-0.1.0/plugin/agents/rtl-author.md +42 -0
  278. chipgraph-0.1.0/plugin/agents/tb-author.md +41 -0
  279. chipgraph-0.1.0/plugin/commands/ask.md +29 -0
  280. chipgraph-0.1.0/plugin/commands/decide.md +34 -0
  281. chipgraph-0.1.0/plugin/commands/init-chipgraph.md +34 -0
  282. chipgraph-0.1.0/plugin/commands/plan.md +84 -0
  283. chipgraph-0.1.0/plugin/commands/rtl.md +74 -0
  284. chipgraph-0.1.0/plugin/commands/run.md +72 -0
  285. chipgraph-0.1.0/plugin/commands/status.md +31 -0
  286. chipgraph-0.1.0/plugin/commands/trace.md +54 -0
  287. chipgraph-0.1.0/plugin/commands/triage.md +44 -0
  288. chipgraph-0.1.0/plugin/hooks/guard.py +612 -0
  289. chipgraph-0.1.0/plugin/hooks/hooks.json +18 -0
  290. chipgraph-0.1.0/pyproject.toml +154 -0
  291. chipgraph-0.1.0/release-please-config.json +28 -0
  292. chipgraph-0.1.0/renovate.json +19 -0
  293. chipgraph-0.1.0/schemas/AgentResult.schema.json +84 -0
  294. chipgraph-0.1.0/schemas/Approval.schema.json +65 -0
  295. chipgraph-0.1.0/schemas/Artifact.schema.json +160 -0
  296. chipgraph-0.1.0/schemas/ArtifactRef.schema.json +80 -0
  297. chipgraph-0.1.0/schemas/CheckResult.schema.json +125 -0
  298. chipgraph-0.1.0/schemas/CheckSpec.schema.json +42 -0
  299. chipgraph-0.1.0/schemas/Decision.schema.json +61 -0
  300. chipgraph-0.1.0/schemas/Event.schema.json +95 -0
  301. chipgraph-0.1.0/schemas/Finding.schema.json +277 -0
  302. chipgraph-0.1.0/schemas/GateSpec.schema.json +134 -0
  303. chipgraph-0.1.0/schemas/README.md +8 -0
  304. chipgraph-0.1.0/schemas/RuleInstance.schema.json +140 -0
  305. chipgraph-0.1.0/schemas/RuleSpec.schema.json +262 -0
  306. chipgraph-0.1.0/schemas/RunManifest.schema.json +100 -0
  307. chipgraph-0.1.0/schemas/formats/chip.schema.json +311 -0
  308. chipgraph-0.1.0/schemas/formats/naming-rules.schema.json +180 -0
  309. chipgraph-0.1.0/schemas/formats/plan.schema.json +265 -0
  310. chipgraph-0.1.0/schemas/model/BlockEntity.schema.json +175 -0
  311. chipgraph-0.1.0/schemas/model/ClockEntity.schema.json +163 -0
  312. chipgraph-0.1.0/schemas/model/DecisionEntity.schema.json +175 -0
  313. chipgraph-0.1.0/schemas/model/ExtEntity.schema.json +149 -0
  314. chipgraph-0.1.0/schemas/model/FieldEntity.schema.json +219 -0
  315. chipgraph-0.1.0/schemas/model/InterfaceEntity.schema.json +162 -0
  316. chipgraph-0.1.0/schemas/model/InterruptEntity.schema.json +176 -0
  317. chipgraph-0.1.0/schemas/model/MemoryRegionEntity.schema.json +194 -0
  318. chipgraph-0.1.0/schemas/model/ModuleEntity.schema.json +175 -0
  319. chipgraph-0.1.0/schemas/model/OpenItemEntity.schema.json +166 -0
  320. chipgraph-0.1.0/schemas/model/ParameterEntity.schema.json +184 -0
  321. chipgraph-0.1.0/schemas/model/PortEntity.schema.json +222 -0
  322. chipgraph-0.1.0/schemas/model/ProjectEntity.schema.json +149 -0
  323. chipgraph-0.1.0/schemas/model/RegisterEntity.schema.json +221 -0
  324. chipgraph-0.1.0/schemas/model/Relation.schema.json +149 -0
  325. chipgraph-0.1.0/schemas/model/RequirementEntity.schema.json +234 -0
  326. chipgraph-0.1.0/schemas/model/ResetEntity.schema.json +175 -0
  327. chipgraph-0.1.0/schemas/model/TestEntity.schema.json +158 -0
  328. chipgraph-0.1.0/schemas/roles/ReviewReport.schema.json +155 -0
  329. chipgraph-0.1.0/schemas/roles/RoleSpec.schema.json +187 -0
  330. chipgraph-0.1.0/schemas/roles/SkillSpec.schema.json +56 -0
  331. chipgraph-0.1.0/src/chipgraph/__init__.py +7 -0
  332. chipgraph-0.1.0/src/chipgraph/adapters/__init__.py +1 -0
  333. chipgraph-0.1.0/src/chipgraph/adapters/format/__init__.py +6 -0
  334. chipgraph-0.1.0/src/chipgraph/adapters/format/__main__.py +16 -0
  335. chipgraph-0.1.0/src/chipgraph/adapters/format/_yaml_lines.py +54 -0
  336. chipgraph-0.1.0/src/chipgraph/adapters/format/chip_yaml.py +323 -0
  337. chipgraph-0.1.0/src/chipgraph/adapters/format/qsoc_contract.py +246 -0
  338. chipgraph-0.1.0/src/chipgraph/adapters/llm/__init__.py +58 -0
  339. chipgraph-0.1.0/src/chipgraph/adapters/llm/_budget.py +173 -0
  340. chipgraph-0.1.0/src/chipgraph/adapters/llm/_errors.py +50 -0
  341. chipgraph-0.1.0/src/chipgraph/adapters/llm/_nda.py +30 -0
  342. chipgraph-0.1.0/src/chipgraph/adapters/llm/_retry.py +85 -0
  343. chipgraph-0.1.0/src/chipgraph/adapters/llm/anthropic.py +247 -0
  344. chipgraph-0.1.0/src/chipgraph/adapters/llm/decide_backend.py +179 -0
  345. chipgraph-0.1.0/src/chipgraph/adapters/llm/fake.py +87 -0
  346. chipgraph-0.1.0/src/chipgraph/adapters/llm/guard.py +68 -0
  347. chipgraph-0.1.0/src/chipgraph/adapters/parser/__init__.py +22 -0
  348. chipgraph-0.1.0/src/chipgraph/adapters/parser/cocotb.py +304 -0
  349. chipgraph-0.1.0/src/chipgraph/adapters/parser/generic_regex.py +75 -0
  350. chipgraph-0.1.0/src/chipgraph/adapters/parser/verible.py +55 -0
  351. chipgraph-0.1.0/src/chipgraph/adapters/parser/verilator.py +46 -0
  352. chipgraph-0.1.0/src/chipgraph/adapters/review/__init__.py +7 -0
  353. chipgraph-0.1.0/src/chipgraph/adapters/review/file.py +123 -0
  354. chipgraph-0.1.0/src/chipgraph/adapters/review/github.py +886 -0
  355. chipgraph-0.1.0/src/chipgraph/adapters/runner/__init__.py +7 -0
  356. chipgraph-0.1.0/src/chipgraph/adapters/runner/local.py +122 -0
  357. chipgraph-0.1.0/src/chipgraph/adapters/runtime/__init__.py +5 -0
  358. chipgraph-0.1.0/src/chipgraph/adapters/runtime/claude_code/__init__.py +24 -0
  359. chipgraph-0.1.0/src/chipgraph/adapters/runtime/claude_code/agents.py +158 -0
  360. chipgraph-0.1.0/src/chipgraph/adapters/runtime/claude_code/decisions.py +280 -0
  361. chipgraph-0.1.0/src/chipgraph/adapters/runtime/claude_code/guarded.py +310 -0
  362. chipgraph-0.1.0/src/chipgraph/adapters/runtime/claude_code/isolation.py +482 -0
  363. chipgraph-0.1.0/src/chipgraph/adapters/runtime/claude_code/loop.py +342 -0
  364. chipgraph-0.1.0/src/chipgraph/adapters/runtime/claude_code/previous.py +419 -0
  365. chipgraph-0.1.0/src/chipgraph/adapters/runtime/claude_code/review.py +492 -0
  366. chipgraph-0.1.0/src/chipgraph/adapters/runtime/claude_code/runtime.py +192 -0
  367. chipgraph-0.1.0/src/chipgraph/adapters/runtime/claude_code/service.py +2285 -0
  368. chipgraph-0.1.0/src/chipgraph/adapters/tool/__init__.py +7 -0
  369. chipgraph-0.1.0/src/chipgraph/adapters/tool/cmd.py +229 -0
  370. chipgraph-0.1.0/src/chipgraph/adapters/tool/edalize.py +773 -0
  371. chipgraph-0.1.0/src/chipgraph/adapters/tool/filelist.py +259 -0
  372. chipgraph-0.1.0/src/chipgraph/adapters/tool/pyslang.py +485 -0
  373. chipgraph-0.1.0/src/chipgraph/adapters/vcs/__init__.py +1 -0
  374. chipgraph-0.1.0/src/chipgraph/adapters/vcs/git.py +521 -0
  375. chipgraph-0.1.0/src/chipgraph/app/__init__.py +10 -0
  376. chipgraph-0.1.0/src/chipgraph/app/baseline.py +339 -0
  377. chipgraph-0.1.0/src/chipgraph/app/build.py +332 -0
  378. chipgraph-0.1.0/src/chipgraph/app/checks.py +202 -0
  379. chipgraph-0.1.0/src/chipgraph/app/context.py +191 -0
  380. chipgraph-0.1.0/src/chipgraph/app/errors.py +11 -0
  381. chipgraph-0.1.0/src/chipgraph/app/executors.py +79 -0
  382. chipgraph-0.1.0/src/chipgraph/app/findings.py +203 -0
  383. chipgraph-0.1.0/src/chipgraph/app/ingest.py +523 -0
  384. chipgraph-0.1.0/src/chipgraph/checks/__init__.py +52 -0
  385. chipgraph-0.1.0/src/chipgraph/checks/_cdc_analyze.py +272 -0
  386. chipgraph-0.1.0/src/chipgraph/checks/_cdc_elaborate.py +455 -0
  387. chipgraph-0.1.0/src/chipgraph/checks/_common.py +268 -0
  388. chipgraph-0.1.0/src/chipgraph/checks/_cross.py +96 -0
  389. chipgraph-0.1.0/src/chipgraph/checks/_model.py +64 -0
  390. chipgraph-0.1.0/src/chipgraph/checks/_naming_pyslang.py +235 -0
  391. chipgraph-0.1.0/src/chipgraph/checks/_naming_rules.py +127 -0
  392. chipgraph-0.1.0/src/chipgraph/checks/_xref_syntax.py +260 -0
  393. chipgraph-0.1.0/src/chipgraph/checks/cdc_struct.py +235 -0
  394. chipgraph-0.1.0/src/chipgraph/checks/connect.py +353 -0
  395. chipgraph-0.1.0/src/chipgraph/checks/cross_chip.py +454 -0
  396. chipgraph-0.1.0/src/chipgraph/checks/duplicate.py +153 -0
  397. chipgraph-0.1.0/src/chipgraph/checks/filelist.py +323 -0
  398. chipgraph-0.1.0/src/chipgraph/checks/format.py +268 -0
  399. chipgraph-0.1.0/src/chipgraph/checks/generated.py +151 -0
  400. chipgraph-0.1.0/src/chipgraph/checks/hardcode.py +233 -0
  401. chipgraph-0.1.0/src/chipgraph/checks/layout.py +155 -0
  402. chipgraph-0.1.0/src/chipgraph/checks/naming.py +311 -0
  403. chipgraph-0.1.0/src/chipgraph/checks/plan_check.py +901 -0
  404. chipgraph-0.1.0/src/chipgraph/checks/ports_diff.py +203 -0
  405. chipgraph-0.1.0/src/chipgraph/checks/spec_schema.py +277 -0
  406. chipgraph-0.1.0/src/chipgraph/checks/style.py +910 -0
  407. chipgraph-0.1.0/src/chipgraph/checks/tb_static.py +599 -0
  408. chipgraph-0.1.0/src/chipgraph/checks/trace.py +224 -0
  409. chipgraph-0.1.0/src/chipgraph/checks/vendor_guard.py +369 -0
  410. chipgraph-0.1.0/src/chipgraph/checks/wrap_check.py +486 -0
  411. chipgraph-0.1.0/src/chipgraph/cli/__init__.py +1688 -0
  412. chipgraph-0.1.0/src/chipgraph/cli/next_steps.py +137 -0
  413. chipgraph-0.1.0/src/chipgraph/core/__init__.py +1 -0
  414. chipgraph-0.1.0/src/chipgraph/core/config/__init__.py +93 -0
  415. chipgraph-0.1.0/src/chipgraph/core/config/defaults.py +14 -0
  416. chipgraph-0.1.0/src/chipgraph/core/config/errors.py +32 -0
  417. chipgraph-0.1.0/src/chipgraph/core/config/loader.py +766 -0
  418. chipgraph-0.1.0/src/chipgraph/core/config/models.py +845 -0
  419. chipgraph-0.1.0/src/chipgraph/core/config/templates.py +340 -0
  420. chipgraph-0.1.0/src/chipgraph/core/contracts/__init__.py +75 -0
  421. chipgraph-0.1.0/src/chipgraph/core/contracts/_paths.py +26 -0
  422. chipgraph-0.1.0/src/chipgraph/core/contracts/agent.py +49 -0
  423. chipgraph-0.1.0/src/chipgraph/core/contracts/artifact.py +68 -0
  424. chipgraph-0.1.0/src/chipgraph/core/contracts/check.py +76 -0
  425. chipgraph-0.1.0/src/chipgraph/core/contracts/event.py +70 -0
  426. chipgraph-0.1.0/src/chipgraph/core/contracts/export.py +128 -0
  427. chipgraph-0.1.0/src/chipgraph/core/contracts/finding.py +171 -0
  428. chipgraph-0.1.0/src/chipgraph/core/contracts/gate.py +50 -0
  429. chipgraph-0.1.0/src/chipgraph/core/contracts/rule.py +177 -0
  430. chipgraph-0.1.0/src/chipgraph/core/contracts/types.py +45 -0
  431. chipgraph-0.1.0/src/chipgraph/core/engine/__init__.py +70 -0
  432. chipgraph-0.1.0/src/chipgraph/core/engine/agent_rule.py +1362 -0
  433. chipgraph-0.1.0/src/chipgraph/core/engine/baseline.py +283 -0
  434. chipgraph-0.1.0/src/chipgraph/core/engine/decide.py +462 -0
  435. chipgraph-0.1.0/src/chipgraph/core/engine/fanout.py +1358 -0
  436. chipgraph-0.1.0/src/chipgraph/core/engine/gate.py +170 -0
  437. chipgraph-0.1.0/src/chipgraph/core/engine/graph.py +647 -0
  438. chipgraph-0.1.0/src/chipgraph/core/engine/records.py +60 -0
  439. chipgraph-0.1.0/src/chipgraph/core/engine/rules.py +92 -0
  440. chipgraph-0.1.0/src/chipgraph/core/engine/scheduler.py +637 -0
  441. chipgraph-0.1.0/src/chipgraph/core/engine/select.py +1239 -0
  442. chipgraph-0.1.0/src/chipgraph/core/engine/targets.py +342 -0
  443. chipgraph-0.1.0/src/chipgraph/core/model/__init__.py +98 -0
  444. chipgraph-0.1.0/src/chipgraph/core/model/entities.py +244 -0
  445. chipgraph-0.1.0/src/chipgraph/core/model/export.py +16 -0
  446. chipgraph-0.1.0/src/chipgraph/core/model/ingest.py +693 -0
  447. chipgraph-0.1.0/src/chipgraph/core/model/json_value.py +4 -0
  448. chipgraph-0.1.0/src/chipgraph/core/model/keys.py +95 -0
  449. chipgraph-0.1.0/src/chipgraph/core/model/model.py +153 -0
  450. chipgraph-0.1.0/src/chipgraph/core/model/provenance.py +27 -0
  451. chipgraph-0.1.0/src/chipgraph/core/model/query.py +583 -0
  452. chipgraph-0.1.0/src/chipgraph/core/model/registry.py +80 -0
  453. chipgraph-0.1.0/src/chipgraph/core/model/relations.py +61 -0
  454. chipgraph-0.1.0/src/chipgraph/core/model/store.py +279 -0
  455. chipgraph-0.1.0/src/chipgraph/core/plugin_api/__init__.py +81 -0
  456. chipgraph-0.1.0/src/chipgraph/core/plugin_api/local.py +167 -0
  457. chipgraph-0.1.0/src/chipgraph/core/plugin_api/pack.py +159 -0
  458. chipgraph-0.1.0/src/chipgraph/core/plugin_api/protocols.py +177 -0
  459. chipgraph-0.1.0/src/chipgraph/core/plugin_api/registry.py +111 -0
  460. chipgraph-0.1.0/src/chipgraph/core/plugin_api/types.py +94 -0
  461. chipgraph-0.1.0/src/chipgraph/core/runtime/__init__.py +41 -0
  462. chipgraph-0.1.0/src/chipgraph/core/runtime/executor.py +79 -0
  463. chipgraph-0.1.0/src/chipgraph/core/runtime/queue.py +565 -0
  464. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/__init__.py +91 -0
  465. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/data/author.md +41 -0
  466. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/data/critic.md +56 -0
  467. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/data/planner.md +38 -0
  468. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/data/researcher.md +37 -0
  469. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/data/rtl-author.md +64 -0
  470. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/data/tb-author.md +48 -0
  471. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/data/triage.md +34 -0
  472. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/policy.py +299 -0
  473. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/registry.py +52 -0
  474. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/review.py +275 -0
  475. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/schema.py +82 -0
  476. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/skills.py +134 -0
  477. chipgraph-0.1.0/src/chipgraph/core/runtime/roles/spec.py +232 -0
  478. chipgraph-0.1.0/src/chipgraph/core/state/__init__.py +1 -0
  479. chipgraph-0.1.0/src/chipgraph/core/state/artifacts.py +156 -0
  480. chipgraph-0.1.0/src/chipgraph/core/state/backend.py +117 -0
  481. chipgraph-0.1.0/src/chipgraph/core/state/findings.py +151 -0
  482. chipgraph-0.1.0/src/chipgraph/core/state/handoff.py +411 -0
  483. chipgraph-0.1.0/src/chipgraph/core/state/idempotency.py +59 -0
  484. chipgraph-0.1.0/src/chipgraph/core/state/journal.py +238 -0
  485. chipgraph-0.1.0/src/chipgraph/core/state/layout.py +82 -0
  486. chipgraph-0.1.0/src/chipgraph/core/state/lock.py +195 -0
  487. chipgraph-0.1.0/src/chipgraph/core/state/trace.py +225 -0
  488. chipgraph-0.1.0/src/chipgraph/learn/__init__.py +96 -0
  489. chipgraph-0.1.0/src/chipgraph/learn/draft.py +187 -0
  490. chipgraph-0.1.0/src/chipgraph/learn/infer.py +580 -0
  491. chipgraph-0.1.0/src/chipgraph/learn/models.py +145 -0
  492. chipgraph-0.1.0/src/chipgraph/learn/try_run.py +228 -0
  493. chipgraph-0.1.0/src/chipgraph/mcp/__init__.py +12 -0
  494. chipgraph-0.1.0/src/chipgraph/mcp/model_tools.py +167 -0
  495. chipgraph-0.1.0/src/chipgraph/mcp/server.py +787 -0
  496. chipgraph-0.1.0/src/chipgraph/orgs/qnsc/naming-v1.yml +113 -0
  497. chipgraph-0.1.0/src/chipgraph/orgs/qnsc/profile.yml +5 -0
  498. chipgraph-0.1.0/src/chipgraph/packs/__init__.py +8 -0
  499. chipgraph-0.1.0/src/chipgraph/packs/assist/__init__.py +16 -0
  500. chipgraph-0.1.0/src/chipgraph/packs/assist/ask/__init__.py +58 -0
  501. chipgraph-0.1.0/src/chipgraph/packs/assist/ask/_db.py +57 -0
  502. chipgraph-0.1.0/src/chipgraph/packs/assist/ask/_project.py +230 -0
  503. chipgraph-0.1.0/src/chipgraph/packs/assist/ask/answer.py +266 -0
  504. chipgraph-0.1.0/src/chipgraph/packs/assist/ask/check.py +182 -0
  505. chipgraph-0.1.0/src/chipgraph/packs/assist/ask/contract.py +115 -0
  506. chipgraph-0.1.0/src/chipgraph/packs/assist/ask/documents.py +157 -0
  507. chipgraph-0.1.0/src/chipgraph/packs/assist/ask/fts.py +80 -0
  508. chipgraph-0.1.0/src/chipgraph/packs/assist/ask/retrieve.py +331 -0
  509. chipgraph-0.1.0/src/chipgraph/packs/assist/audit/__init__.py +383 -0
  510. chipgraph-0.1.0/src/chipgraph/packs/assist/pack.yml +13 -0
  511. chipgraph-0.1.0/src/chipgraph/packs/assist/triage/__init__.py +64 -0
  512. chipgraph-0.1.0/src/chipgraph/packs/assist/triage/contract.py +94 -0
  513. chipgraph-0.1.0/src/chipgraph/packs/assist/triage/parse.py +371 -0
  514. chipgraph-0.1.0/src/chipgraph/packs/assist/triage/question.py +384 -0
  515. chipgraph-0.1.0/src/chipgraph/packs/assist/triage/report.py +160 -0
  516. chipgraph-0.1.0/src/chipgraph/packs/assist/triage/rules.py +447 -0
  517. chipgraph-0.1.0/src/chipgraph/packs/assist/triage/run.py +224 -0
  518. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/__init__.py +19 -0
  519. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/layout.py +144 -0
  520. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/pack.yml +25 -0
  521. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/plan/__init__.py +34 -0
  522. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/plan/__main__.py +16 -0
  523. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/plan/context.py +82 -0
  524. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/plan/expand.py +94 -0
  525. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/plan/model.py +150 -0
  526. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/plan/resolver.py +400 -0
  527. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/plan/show.py +176 -0
  528. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/pr/__init__.py +11 -0
  529. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/pr/body.py +165 -0
  530. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/pr/gate.py +110 -0
  531. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/pr/open.py +397 -0
  532. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/rtl/__init__.py +9 -0
  533. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/rtl/context.py +272 -0
  534. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/rules/open_pr.yml +30 -0
  535. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/rules/plan.yml +28 -0
  536. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/rules/plan_expand.yml +29 -0
  537. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/rules/pr_gate.yml +27 -0
  538. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/rules/review.yml +31 -0
  539. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/rules/rtl_module.yml +53 -0
  540. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/skills/lang-sv-rtl.md +58 -0
  541. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/skills/org-naming.md +29 -0
  542. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/skills/plan-modules.md +63 -0
  543. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/skills/review-diff.md +41 -0
  544. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/targets/plan.yml +11 -0
  545. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/targets/rtl.yml +20 -0
  546. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/wrapper/__init__.py +24 -0
  547. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/wrapper/common.py +171 -0
  548. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/wrapper/context.py +222 -0
  549. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/wrapper/emacs.py +626 -0
  550. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/wrapper/expansion.py +304 -0
  551. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/wrapper/lisp.py +504 -0
  552. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/wrapper/resolver.py +60 -0
  553. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/wrapper/rules/wrapper.yml +41 -0
  554. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/wrapper/rules/wrapper_gen.yml +35 -0
  555. chipgraph-0.1.0/src/chipgraph/packs/digital_rtl/wrapper/skills/wrapper-auto.md +120 -0
  556. chipgraph-0.1.0/src/chipgraph/packs/dv/__init__.py +15 -0
  557. chipgraph-0.1.0/src/chipgraph/packs/dv/declaration.py +392 -0
  558. chipgraph-0.1.0/src/chipgraph/packs/dv/interface.py +596 -0
  559. chipgraph-0.1.0/src/chipgraph/packs/dv/pack.yml +14 -0
  560. chipgraph-0.1.0/src/chipgraph/packs/dv/rules/tb_module.yml +42 -0
  561. chipgraph-0.1.0/src/chipgraph/packs/dv/skills/dv/cocotb.md +72 -0
  562. chipgraph-0.1.0/src/chipgraph/packs/spec_core/__init__.py +9 -0
  563. chipgraph-0.1.0/src/chipgraph/packs/spec_core/extract/__init__.py +12 -0
  564. chipgraph-0.1.0/src/chipgraph/packs/spec_core/extract/_markdown.py +371 -0
  565. chipgraph-0.1.0/src/chipgraph/packs/spec_core/extract/_text.py +116 -0
  566. chipgraph-0.1.0/src/chipgraph/packs/spec_core/extract/mas.py +975 -0
  567. chipgraph-0.1.0/src/chipgraph/packs/spec_core/gen/__init__.py +11 -0
  568. chipgraph-0.1.0/src/chipgraph/packs/spec_core/gen/agents_md/__init__.py +148 -0
  569. chipgraph-0.1.0/src/chipgraph/packs/spec_core/gen/agents_md/_context.py +239 -0
  570. chipgraph-0.1.0/src/chipgraph/packs/spec_core/gen/agents_md/_markers.py +131 -0
  571. chipgraph-0.1.0/src/chipgraph/packs/spec_core/gen/agents_md/agents_md.md.j2 +178 -0
  572. chipgraph-0.1.0/src/chipgraph/packs/spec_core/gen/diagram/__init__.py +110 -0
  573. chipgraph-0.1.0/src/chipgraph/packs/spec_core/gen/diagram/__main__.py +44 -0
  574. chipgraph-0.1.0/src/chipgraph/packs/spec_core/gen/diagram/_diagrams.py +403 -0
  575. chipgraph-0.1.0/src/chipgraph/packs/spec_core/gen/diagram/_scene.py +163 -0
  576. chipgraph-0.1.0/src/chipgraph/packs/spec_core/pack.yml +6 -0
  577. chipgraph-0.1.0/src/chipgraph/py.typed +0 -0
  578. chipgraph-0.1.0/tests/adapters/format/__init__.py +1 -0
  579. chipgraph-0.1.0/tests/adapters/format/fixtures/qsoc_contract.yml +356 -0
  580. chipgraph-0.1.0/tests/adapters/format/fixtures/tiny_chip.yml +46 -0
  581. chipgraph-0.1.0/tests/adapters/format/test_chip_yaml.py +172 -0
  582. chipgraph-0.1.0/tests/adapters/format/test_qsoc_contract.py +176 -0
  583. chipgraph-0.1.0/tests/adapters/llm/llm_helpers.py +29 -0
  584. chipgraph-0.1.0/tests/adapters/llm/test_decide_backend.py +193 -0
  585. chipgraph-0.1.0/tests/adapters/llm/test_llm_anthropic.py +264 -0
  586. chipgraph-0.1.0/tests/adapters/llm/test_llm_entry_points.py +23 -0
  587. chipgraph-0.1.0/tests/adapters/llm/test_llm_fake.py +77 -0
  588. chipgraph-0.1.0/tests/adapters/llm/test_llm_guard.py +275 -0
  589. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/icarus_assert.xml +8 -0
  590. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/icarus_build_error.log +4 -0
  591. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/icarus_crash.xml +10 -0
  592. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/icarus_import_error.log +33 -0
  593. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/icarus_no_gpi_users.log +5 -0
  594. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/icarus_pass.xml +2 -0
  595. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/verilator_assert.xml +8 -0
  596. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/verilator_build_error.log +7 -0
  597. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/verilator_crash.xml +10 -0
  598. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/verilator_import_error.log +33 -0
  599. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/verilator_no_gpi_users.log +1 -0
  600. chipgraph-0.1.0/tests/adapters/parser/logs/cocotb/verilator_pass.xml +2 -0
  601. chipgraph-0.1.0/tests/adapters/parser/logs/verible.log +4 -0
  602. chipgraph-0.1.0/tests/adapters/parser/logs/verilator_5020.log +6 -0
  603. chipgraph-0.1.0/tests/adapters/parser/logs/verilator_5052.log +25 -0
  604. chipgraph-0.1.0/tests/adapters/parser/test_cocotb.py +324 -0
  605. chipgraph-0.1.0/tests/adapters/parser/test_generic_regex.py +82 -0
  606. chipgraph-0.1.0/tests/adapters/parser/test_init.py +20 -0
  607. chipgraph-0.1.0/tests/adapters/parser/test_verible.py +80 -0
  608. chipgraph-0.1.0/tests/adapters/parser/test_verilator.py +112 -0
  609. chipgraph-0.1.0/tests/adapters/review/github_api_helpers.py +281 -0
  610. chipgraph-0.1.0/tests/adapters/review/test_file.py +148 -0
  611. chipgraph-0.1.0/tests/adapters/review/test_github_http.py +64 -0
  612. chipgraph-0.1.0/tests/adapters/review/test_github_no_merge.py +128 -0
  613. chipgraph-0.1.0/tests/adapters/review/test_github_review.py +505 -0
  614. chipgraph-0.1.0/tests/adapters/review/test_github_wiring.py +98 -0
  615. chipgraph-0.1.0/tests/adapters/runner/test_local.py +105 -0
  616. chipgraph-0.1.0/tests/adapters/runner/test_local_process_group.py +90 -0
  617. chipgraph-0.1.0/tests/adapters/runtime/agent_loop_helpers.py +66 -0
  618. chipgraph-0.1.0/tests/adapters/runtime/claude_code/test_isolation.py +1040 -0
  619. chipgraph-0.1.0/tests/adapters/runtime/previous_helpers.py +187 -0
  620. chipgraph-0.1.0/tests/adapters/runtime/tb_author_helpers.py +160 -0
  621. chipgraph-0.1.0/tests/adapters/runtime/test_claude_code_agents.py +118 -0
  622. chipgraph-0.1.0/tests/adapters/runtime/test_claude_code_decisions.py +300 -0
  623. chipgraph-0.1.0/tests/adapters/runtime/test_claude_code_loop.py +326 -0
  624. chipgraph-0.1.0/tests/adapters/runtime/test_claude_code_loop_bound.py +108 -0
  625. chipgraph-0.1.0/tests/adapters/runtime/test_claude_code_previous.py +525 -0
  626. chipgraph-0.1.0/tests/adapters/runtime/test_claude_code_review.py +410 -0
  627. chipgraph-0.1.0/tests/adapters/runtime/test_claude_code_roles.py +221 -0
  628. chipgraph-0.1.0/tests/adapters/runtime/test_claude_code_runtime.py +186 -0
  629. chipgraph-0.1.0/tests/adapters/runtime/test_claude_code_tb_author.py +262 -0
  630. chipgraph-0.1.0/tests/adapters/runtime/test_tb_acceptance_report.py +140 -0
  631. chipgraph-0.1.0/tests/adapters/test_entry_points.py +14 -0
  632. chipgraph-0.1.0/tests/adapters/tool/rtl_fixtures/fsm.sv +47 -0
  633. chipgraph-0.1.0/tests/adapters/tool/rtl_fixtures/simple_core.sv +31 -0
  634. chipgraph-0.1.0/tests/adapters/tool/rtl_fixtures/test.f +5 -0
  635. chipgraph-0.1.0/tests/adapters/tool/rtl_fixtures/types_pkg.sv +14 -0
  636. chipgraph-0.1.0/tests/adapters/tool/rtl_fixtures/wrapper.sv +26 -0
  637. chipgraph-0.1.0/tests/adapters/tool/test_cmd.py +292 -0
  638. chipgraph-0.1.0/tests/adapters/tool/test_edalize.py +700 -0
  639. chipgraph-0.1.0/tests/adapters/tool/test_filelist_reader.py +240 -0
  640. chipgraph-0.1.0/tests/adapters/tool/test_pyslang.py +375 -0
  641. chipgraph-0.1.0/tests/adapters/vcs/test_git.py +131 -0
  642. chipgraph-0.1.0/tests/adapters/vcs/test_git_fanout.py +166 -0
  643. chipgraph-0.1.0/tests/adapters/vcs/test_git_push.py +307 -0
  644. chipgraph-0.1.0/tests/app/conftest.py +43 -0
  645. chipgraph-0.1.0/tests/app/test_app_findings.py +174 -0
  646. chipgraph-0.1.0/tests/app/test_baseline_app.py +144 -0
  647. chipgraph-0.1.0/tests/app/test_build.py +164 -0
  648. chipgraph-0.1.0/tests/app/test_checks.py +196 -0
  649. chipgraph-0.1.0/tests/app/test_context.py +79 -0
  650. chipgraph-0.1.0/tests/app/test_context_local_plugins.py +152 -0
  651. chipgraph-0.1.0/tests/app/test_executors.py +84 -0
  652. chipgraph-0.1.0/tests/app/test_ingest_app.py +202 -0
  653. chipgraph-0.1.0/tests/app/test_ingest_documents.py +117 -0
  654. chipgraph-0.1.0/tests/checks/cdc_fixtures/hier_cross.sv +24 -0
  655. chipgraph-0.1.0/tests/checks/cdc_fixtures/hier_same.sv +23 -0
  656. chipgraph-0.1.0/tests/checks/cdc_helpers.py +151 -0
  657. chipgraph-0.1.0/tests/checks/conftest.py +45 -0
  658. chipgraph-0.1.0/tests/checks/cross_a_helpers.py +126 -0
  659. chipgraph-0.1.0/tests/checks/naming_fixtures/clean.sv +22 -0
  660. chipgraph-0.1.0/tests/checks/naming_fixtures/violations.sv +21 -0
  661. chipgraph-0.1.0/tests/checks/test_cdc_struct.py +221 -0
  662. chipgraph-0.1.0/tests/checks/test_cross_chip.py +243 -0
  663. chipgraph-0.1.0/tests/checks/test_cross_duplicate.py +80 -0
  664. chipgraph-0.1.0/tests/checks/test_cross_ports_diff.py +145 -0
  665. chipgraph-0.1.0/tests/checks/test_cross_spec_schema.py +124 -0
  666. chipgraph-0.1.0/tests/checks/test_filelist.py +191 -0
  667. chipgraph-0.1.0/tests/checks/test_format_check.py +134 -0
  668. chipgraph-0.1.0/tests/checks/test_generated.py +110 -0
  669. chipgraph-0.1.0/tests/checks/test_layout.py +128 -0
  670. chipgraph-0.1.0/tests/checks/test_naming.py +268 -0
  671. chipgraph-0.1.0/tests/checks/test_spec_schema_missing_id.py +123 -0
  672. chipgraph-0.1.0/tests/checks/test_style_check.py +357 -0
  673. chipgraph-0.1.0/tests/checks/test_tb_static.py +360 -0
  674. chipgraph-0.1.0/tests/checks/test_trace_req_ids.py +118 -0
  675. chipgraph-0.1.0/tests/checks/test_vendor_guard.py +193 -0
  676. chipgraph-0.1.0/tests/checks/test_vendor_guard_hostile.py +247 -0
  677. chipgraph-0.1.0/tests/checks/test_xref_connect.py +108 -0
  678. chipgraph-0.1.0/tests/checks/test_xref_hardcode.py +150 -0
  679. chipgraph-0.1.0/tests/checks/test_xref_trace.py +140 -0
  680. chipgraph-0.1.0/tests/checks/xref_b_helpers.py +138 -0
  681. chipgraph-0.1.0/tests/cli/conftest.py +23 -0
  682. chipgraph-0.1.0/tests/cli/test_audit_cli.py +160 -0
  683. chipgraph-0.1.0/tests/cli/test_baseline_cli.py +171 -0
  684. chipgraph-0.1.0/tests/cli/test_check_per_block.py +58 -0
  685. chipgraph-0.1.0/tests/cli/test_cli.py +314 -0
  686. chipgraph-0.1.0/tests/cli/test_cli_findings.py +147 -0
  687. chipgraph-0.1.0/tests/cli/test_cli_severity_bind.py +129 -0
  688. chipgraph-0.1.0/tests/cli/test_config_check_plugins.py +86 -0
  689. chipgraph-0.1.0/tests/cli/test_eval_cli.py +71 -0
  690. chipgraph-0.1.0/tests/cli/test_ingest_cli.py +78 -0
  691. chipgraph-0.1.0/tests/cli/test_learn_cli.py +111 -0
  692. chipgraph-0.1.0/tests/cli/test_rtl_target_cli.py +211 -0
  693. chipgraph-0.1.0/tests/core/config/config_fakes.py +19 -0
  694. chipgraph-0.1.0/tests/core/config/templates_fixtures/block/rtl_module.sv.j2 +5 -0
  695. chipgraph-0.1.0/tests/core/config/templates_fixtures/org/rtl_module.sv.j2 +3 -0
  696. chipgraph-0.1.0/tests/core/config/templates_fixtures/pack/needs_var.j2 +1 -0
  697. chipgraph-0.1.0/tests/core/config/templates_fixtures/pack/rtl_module.sv.j2 +18 -0
  698. chipgraph-0.1.0/tests/core/config/templates_fixtures/pack/sandbox_probe.j2 +1 -0
  699. chipgraph-0.1.0/tests/core/config/templates_fixtures/pack/whole_replace.j2 +3 -0
  700. chipgraph-0.1.0/tests/core/config/templates_fixtures/project/header_override.j2 +4 -0
  701. chipgraph-0.1.0/tests/core/config/templates_fixtures/project/rtl_module.sv.j2 +5 -0
  702. chipgraph-0.1.0/tests/core/config/templates_fixtures/project_whole/whole_replace.j2 +1 -0
  703. chipgraph-0.1.0/tests/core/config/test_loader.py +377 -0
  704. chipgraph-0.1.0/tests/core/config/test_models.py +227 -0
  705. chipgraph-0.1.0/tests/core/config/test_plan_cfg.py +54 -0
  706. chipgraph-0.1.0/tests/core/config/test_policy.py +113 -0
  707. chipgraph-0.1.0/tests/core/config/test_resolved.py +259 -0
  708. chipgraph-0.1.0/tests/core/config/test_select_cfg.py +72 -0
  709. chipgraph-0.1.0/tests/core/config/test_style_config.py +37 -0
  710. chipgraph-0.1.0/tests/core/config/test_templates.py +204 -0
  711. chipgraph-0.1.0/tests/core/config/test_wrappers_cfg.py +123 -0
  712. chipgraph-0.1.0/tests/core/contracts/test_agent.py +41 -0
  713. chipgraph-0.1.0/tests/core/contracts/test_artifact.py +67 -0
  714. chipgraph-0.1.0/tests/core/contracts/test_check.py +76 -0
  715. chipgraph-0.1.0/tests/core/contracts/test_event.py +58 -0
  716. chipgraph-0.1.0/tests/core/contracts/test_export.py +57 -0
  717. chipgraph-0.1.0/tests/core/contracts/test_finding.py +122 -0
  718. chipgraph-0.1.0/tests/core/contracts/test_gate.py +85 -0
  719. chipgraph-0.1.0/tests/core/contracts/test_rule.py +167 -0
  720. chipgraph-0.1.0/tests/core/engine/_fanout_kill_worker.py +39 -0
  721. chipgraph-0.1.0/tests/core/engine/_resume_kill_worker.py +76 -0
  722. chipgraph-0.1.0/tests/core/engine/agent_rule_helpers.py +238 -0
  723. chipgraph-0.1.0/tests/core/engine/fanout_helpers.py +110 -0
  724. chipgraph-0.1.0/tests/core/engine/scheduler_fixtures.py +116 -0
  725. chipgraph-0.1.0/tests/core/engine/select_helpers.py +282 -0
  726. chipgraph-0.1.0/tests/core/engine/test_agent_rule_loop.py +407 -0
  727. chipgraph-0.1.0/tests/core/engine/test_agent_rule_pieces.py +322 -0
  728. chipgraph-0.1.0/tests/core/engine/test_agent_rule_wiring.py +139 -0
  729. chipgraph-0.1.0/tests/core/engine/test_baseline_core.py +169 -0
  730. chipgraph-0.1.0/tests/core/engine/test_decide.py +460 -0
  731. chipgraph-0.1.0/tests/core/engine/test_decide_cfg.py +87 -0
  732. chipgraph-0.1.0/tests/core/engine/test_fanout.py +570 -0
  733. chipgraph-0.1.0/tests/core/engine/test_fanout_candidates.py +172 -0
  734. chipgraph-0.1.0/tests/core/engine/test_fanout_cleanup.py +259 -0
  735. chipgraph-0.1.0/tests/core/engine/test_fanout_pieces.py +132 -0
  736. chipgraph-0.1.0/tests/core/engine/test_feedback_filter.py +207 -0
  737. chipgraph-0.1.0/tests/core/engine/test_gate_evaluator.py +211 -0
  738. chipgraph-0.1.0/tests/core/engine/test_graph.py +372 -0
  739. chipgraph-0.1.0/tests/core/engine/test_graph_entries.py +105 -0
  740. chipgraph-0.1.0/tests/core/engine/test_records.py +82 -0
  741. chipgraph-0.1.0/tests/core/engine/test_resume_kill.py +132 -0
  742. chipgraph-0.1.0/tests/core/engine/test_rules.py +130 -0
  743. chipgraph-0.1.0/tests/core/engine/test_scheduler.py +461 -0
  744. chipgraph-0.1.0/tests/core/engine/test_scheduler_trace.py +153 -0
  745. chipgraph-0.1.0/tests/core/engine/test_select_budget.py +324 -0
  746. chipgraph-0.1.0/tests/core/engine/test_select_key.py +394 -0
  747. chipgraph-0.1.0/tests/core/engine/test_select_workspace.py +353 -0
  748. chipgraph-0.1.0/tests/core/engine/test_targets.py +183 -0
  749. chipgraph-0.1.0/tests/core/engine/test_targets_hostile.py +200 -0
  750. chipgraph-0.1.0/tests/core/model/test_entities.py +223 -0
  751. chipgraph-0.1.0/tests/core/model/test_entity_registry.py +71 -0
  752. chipgraph-0.1.0/tests/core/model/test_ingest_core.py +245 -0
  753. chipgraph-0.1.0/tests/core/model/test_ingest_instances.py +209 -0
  754. chipgraph-0.1.0/tests/core/model/test_keys.py +79 -0
  755. chipgraph-0.1.0/tests/core/model/test_model.py +150 -0
  756. chipgraph-0.1.0/tests/core/model/test_query.py +516 -0
  757. chipgraph-0.1.0/tests/core/model/test_relations.py +27 -0
  758. chipgraph-0.1.0/tests/core/model/test_store.py +236 -0
  759. chipgraph-0.1.0/tests/core/plugin_api/fakes.py +152 -0
  760. chipgraph-0.1.0/tests/core/plugin_api/local_plugin_fixtures/duplicate.py +23 -0
  761. chipgraph-0.1.0/tests/core/plugin_api/local_plugin_fixtures/no_register.py +3 -0
  762. chipgraph-0.1.0/tests/core/plugin_api/local_plugin_fixtures/raises_on_import.py +3 -0
  763. chipgraph-0.1.0/tests/core/plugin_api/local_plugin_fixtures/tiny_layout.py +63 -0
  764. chipgraph-0.1.0/tests/core/plugin_api/test_local_plugins.py +265 -0
  765. chipgraph-0.1.0/tests/core/plugin_api/test_pack.py +148 -0
  766. chipgraph-0.1.0/tests/core/plugin_api/test_protocols.py +73 -0
  767. chipgraph-0.1.0/tests/core/plugin_api/test_registry.py +123 -0
  768. chipgraph-0.1.0/tests/core/plugin_api/test_tool_context.py +18 -0
  769. chipgraph-0.1.0/tests/core/runtime/skill_fixtures/README.md +7 -0
  770. chipgraph-0.1.0/tests/core/runtime/skill_fixtures/alpha/pack.yml +5 -0
  771. chipgraph-0.1.0/tests/core/runtime/skill_fixtures/alpha/skills/cocotb.md +7 -0
  772. chipgraph-0.1.0/tests/core/runtime/skill_fixtures/alpha/skills/rtl.md +7 -0
  773. chipgraph-0.1.0/tests/core/runtime/skill_fixtures/badrole/pack.yml +5 -0
  774. chipgraph-0.1.0/tests/core/runtime/skill_fixtures/badrole/writer.md +7 -0
  775. chipgraph-0.1.0/tests/core/runtime/skill_fixtures/beta/more/naming.md +7 -0
  776. chipgraph-0.1.0/tests/core/runtime/skill_fixtures/beta/pack.yml +5 -0
  777. chipgraph-0.1.0/tests/core/runtime/skill_fixtures/dup/pack.yml +5 -0
  778. chipgraph-0.1.0/tests/core/runtime/skill_fixtures/dup/rtl.md +7 -0
  779. chipgraph-0.1.0/tests/core/runtime/test_review_report.py +225 -0
  780. chipgraph-0.1.0/tests/core/runtime/test_role_policy.py +241 -0
  781. chipgraph-0.1.0/tests/core/runtime/test_roles.py +248 -0
  782. chipgraph-0.1.0/tests/core/runtime/test_rtl_author_role.py +103 -0
  783. chipgraph-0.1.0/tests/core/runtime/test_skills.py +96 -0
  784. chipgraph-0.1.0/tests/core/runtime/test_task_queue.py +277 -0
  785. chipgraph-0.1.0/tests/core/runtime/test_task_queue_budget.py +134 -0
  786. chipgraph-0.1.0/tests/core/state/test_artifacts.py +141 -0
  787. chipgraph-0.1.0/tests/core/state/test_backend.py +116 -0
  788. chipgraph-0.1.0/tests/core/state/test_findings.py +145 -0
  789. chipgraph-0.1.0/tests/core/state/test_handoff.py +302 -0
  790. chipgraph-0.1.0/tests/core/state/test_idempotency.py +53 -0
  791. chipgraph-0.1.0/tests/core/state/test_journal.py +170 -0
  792. chipgraph-0.1.0/tests/core/state/test_lock.py +102 -0
  793. chipgraph-0.1.0/tests/core/state/test_trace.py +120 -0
  794. chipgraph-0.1.0/tests/e2e/conftest.py +69 -0
  795. chipgraph-0.1.0/tests/e2e/fixtures/cocotb/gpio_tb_broken.py +60 -0
  796. chipgraph-0.1.0/tests/e2e/fixtures/cocotb/gpio_tb_import_error.py +6 -0
  797. chipgraph-0.1.0/tests/e2e/test_sim_edalize.py +188 -0
  798. chipgraph-0.1.0/tests/e2e/test_tb_module_sim.py +111 -0
  799. chipgraph-0.1.0/tests/e2e/test_tinysoc.py +203 -0
  800. chipgraph-0.1.0/tests/e2e_github/test_rtl_target_pr.py +203 -0
  801. chipgraph-0.1.0/tests/e2e_github/test_sandbox_pr.py +118 -0
  802. chipgraph-0.1.0/tests/evals/rtl_eval_helpers.py +66 -0
  803. chipgraph-0.1.0/tests/evals/test_ask_grader.py +247 -0
  804. chipgraph-0.1.0/tests/evals/test_eval_claude_code.py +302 -0
  805. chipgraph-0.1.0/tests/evals/test_eval_framework.py +202 -0
  806. chipgraph-0.1.0/tests/evals/test_eval_review.py +343 -0
  807. chipgraph-0.1.0/tests/evals/test_eval_review_holdout2.py +355 -0
  808. chipgraph-0.1.0/tests/evals/test_eval_review_toolsearch.py +53 -0
  809. chipgraph-0.1.0/tests/evals/test_eval_workflow.py +84 -0
  810. chipgraph-0.1.0/tests/evals/test_rtl_data.py +192 -0
  811. chipgraph-0.1.0/tests/evals/test_rtl_fixtures.py +104 -0
  812. chipgraph-0.1.0/tests/evals/test_rtl_graders.py +139 -0
  813. chipgraph-0.1.0/tests/evals/test_rtl_suites.py +326 -0
  814. chipgraph-0.1.0/tests/evals/test_triage_grader.py +126 -0
  815. chipgraph-0.1.0/tests/evals/test_triage_holdout.py +251 -0
  816. chipgraph-0.1.0/tests/evals/test_triage_holdout2.py +344 -0
  817. chipgraph-0.1.0/tests/evals/test_triage_samples.py +201 -0
  818. chipgraph-0.1.0/tests/learn/learn_helpers.py +149 -0
  819. chipgraph-0.1.0/tests/learn/test_learn_accept.py +170 -0
  820. chipgraph-0.1.0/tests/learn/test_learn_infer.py +160 -0
  821. chipgraph-0.1.0/tests/mcp/conftest.py +52 -0
  822. chipgraph-0.1.0/tests/mcp/runtime_tools_helpers.py +176 -0
  823. chipgraph-0.1.0/tests/mcp/test_audit_mcp.py +113 -0
  824. chipgraph-0.1.0/tests/mcp/test_model_tools.py +444 -0
  825. chipgraph-0.1.0/tests/mcp/test_plan_rtl_session.py +293 -0
  826. chipgraph-0.1.0/tests/mcp/test_runtime_tools.py +227 -0
  827. chipgraph-0.1.0/tests/mcp/test_server.py +224 -0
  828. chipgraph-0.1.0/tests/mcp/test_stdio.py +53 -0
  829. chipgraph-0.1.0/tests/packs/assist/ask_helpers.py +45 -0
  830. chipgraph-0.1.0/tests/packs/assist/audit_helpers.py +95 -0
  831. chipgraph-0.1.0/tests/packs/assist/test_ask_answer.py +147 -0
  832. chipgraph-0.1.0/tests/packs/assist/test_ask_check.py +144 -0
  833. chipgraph-0.1.0/tests/packs/assist/test_ask_context.py +139 -0
  834. chipgraph-0.1.0/tests/packs/assist/test_ask_fts.py +99 -0
  835. chipgraph-0.1.0/tests/packs/assist/test_ask_surfaces.py +155 -0
  836. chipgraph-0.1.0/tests/packs/assist/test_audit.py +227 -0
  837. chipgraph-0.1.0/tests/packs/assist/test_triage_question.py +180 -0
  838. chipgraph-0.1.0/tests/packs/assist/test_triage_rules.py +320 -0
  839. chipgraph-0.1.0/tests/packs/assist/test_triage_run.py +359 -0
  840. chipgraph-0.1.0/tests/packs/digital_rtl/plan_fixtures/gpio.plan.yml +44 -0
  841. chipgraph-0.1.0/tests/packs/digital_rtl/plan_fixtures/timer.plan.yml +56 -0
  842. chipgraph-0.1.0/tests/packs/digital_rtl/plan_helpers.py +186 -0
  843. chipgraph-0.1.0/tests/packs/digital_rtl/rtl_author_helpers.py +322 -0
  844. chipgraph-0.1.0/tests/packs/digital_rtl/rtl_target_helpers.py +457 -0
  845. chipgraph-0.1.0/tests/packs/digital_rtl/test_digital_rtl_pack.py +70 -0
  846. chipgraph-0.1.0/tests/packs/digital_rtl/test_isolated_flow.py +498 -0
  847. chipgraph-0.1.0/tests/packs/digital_rtl/test_plan_check_rules.py +371 -0
  848. chipgraph-0.1.0/tests/packs/digital_rtl/test_plan_e2e.py +99 -0
  849. chipgraph-0.1.0/tests/packs/digital_rtl/test_plan_pack.py +195 -0
  850. chipgraph-0.1.0/tests/packs/digital_rtl/test_plan_resolver.py +245 -0
  851. chipgraph-0.1.0/tests/packs/digital_rtl/test_plan_show_cli.py +114 -0
  852. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_acceptance_report.py +139 -0
  853. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_claude_code.py +267 -0
  854. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_context.py +83 -0
  855. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_e2e.py +61 -0
  856. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_module_rule.py +125 -0
  857. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_previous_e2e.py +88 -0
  858. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_style_follows.py +80 -0
  859. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_target_chain.py +260 -0
  860. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_target_denied.py +214 -0
  861. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_target_graph.py +284 -0
  862. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_target_layout.py +214 -0
  863. chipgraph-0.1.0/tests/packs/digital_rtl/test_rtl_target_pull_request.py +753 -0
  864. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrap_check.py +438 -0
  865. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrap_check_hostile.py +212 -0
  866. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrapper_acceptance_report.py +204 -0
  867. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrapper_e2e.py +122 -0
  868. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrapper_expansion.py +144 -0
  869. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrapper_generator.py +345 -0
  870. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrapper_generator_hostile.py +336 -0
  871. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrapper_lisp.py +106 -0
  872. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrapper_lisp_emacs.py +350 -0
  873. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrapper_lisp_hostile.py +242 -0
  874. chipgraph-0.1.0/tests/packs/digital_rtl/test_wrapper_pack.py +311 -0
  875. chipgraph-0.1.0/tests/packs/digital_rtl/wrapper_helpers.py +284 -0
  876. chipgraph-0.1.0/tests/packs/dv/test_dv_cocotb_skill.py +60 -0
  877. chipgraph-0.1.0/tests/packs/dv/test_dv_declaration.py +181 -0
  878. chipgraph-0.1.0/tests/packs/dv/test_dv_interface.py +268 -0
  879. chipgraph-0.1.0/tests/packs/dv/test_dv_pack.py +128 -0
  880. chipgraph-0.1.0/tests/packs/spec_core/agents_md_snapshots/full.md +140 -0
  881. chipgraph-0.1.0/tests/packs/spec_core/agents_md_snapshots/qsoc.md +120 -0
  882. chipgraph-0.1.0/tests/packs/spec_core/agents_md_snapshots/tinysoc.md +99 -0
  883. chipgraph-0.1.0/tests/packs/spec_core/conftest.py +15 -0
  884. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/qsoc/block_diagram.drawio +66 -0
  885. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/qsoc/block_diagram.svg +44 -0
  886. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/qsoc/clock_reset_tree.drawio +102 -0
  887. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/qsoc/clock_reset_tree.svg +56 -0
  888. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/qsoc/interrupt_map.drawio +48 -0
  889. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/qsoc/interrupt_map.svg +32 -0
  890. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/qsoc/memory_map.drawio +84 -0
  891. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/qsoc/memory_map.svg +62 -0
  892. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/tiny_chip/block_diagram.drawio +26 -0
  893. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/tiny_chip/block_diagram.svg +16 -0
  894. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/tiny_chip/clock_reset_tree.drawio +39 -0
  895. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/tiny_chip/clock_reset_tree.svg +22 -0
  896. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/tiny_chip/interrupt_map.drawio +18 -0
  897. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/tiny_chip/interrupt_map.svg +12 -0
  898. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/tiny_chip/memory_map.drawio +20 -0
  899. chipgraph-0.1.0/tests/packs/spec_core/diagram_snapshots/tiny_chip/memory_map.svg +14 -0
  900. chipgraph-0.1.0/tests/packs/spec_core/mas_fixtures/QNSC_DMA_MAS.md +407 -0
  901. chipgraph-0.1.0/tests/packs/spec_core/mas_fixtures/QNSC_Interrupt_Map_MAS.md +288 -0
  902. chipgraph-0.1.0/tests/packs/spec_core/mas_fixtures/QNSC_SCRC_MAS.md +591 -0
  903. chipgraph-0.1.0/tests/packs/spec_core/mas_fixtures/QNSC_SYSCSR_MAS.md +314 -0
  904. chipgraph-0.1.0/tests/packs/spec_core/mas_fixtures/QNSC_TIMER_MAS.md +314 -0
  905. chipgraph-0.1.0/tests/packs/spec_core/mas_fixtures/QNSC_UART_MAS.md +318 -0
  906. chipgraph-0.1.0/tests/packs/spec_core/test_agents_md.py +326 -0
  907. chipgraph-0.1.0/tests/packs/spec_core/test_agents_md_cli.py +169 -0
  908. chipgraph-0.1.0/tests/packs/spec_core/test_agents_md_markers.py +111 -0
  909. chipgraph-0.1.0/tests/packs/spec_core/test_diagram.py +267 -0
  910. chipgraph-0.1.0/tests/packs/spec_core/test_mas_extract.py +156 -0
  911. chipgraph-0.1.0/tests/packs/spec_core/test_mas_fixtures.py +133 -0
  912. chipgraph-0.1.0/tests/packs/spec_core/test_mas_missing_id.py +263 -0
  913. chipgraph-0.1.0/tests/packs/spec_core/test_mas_modes.py +230 -0
  914. chipgraph-0.1.0/tests/packs/spec_core/test_mas_shorthand.py +120 -0
  915. chipgraph-0.1.0/tests/packs/spec_core/test_registration.py +25 -0
  916. chipgraph-0.1.0/tests/plugin/agent_loop_helpers_plugin.py +23 -0
  917. chipgraph-0.1.0/tests/plugin/test_agent_loop_acceptance_report.py +163 -0
  918. chipgraph-0.1.0/tests/plugin/test_guard.py +347 -0
  919. chipgraph-0.1.0/tests/plugin/test_guard_budget_state.py +63 -0
  920. chipgraph-0.1.0/tests/plugin/test_guard_reads.py +338 -0
  921. chipgraph-0.1.0/tests/plugin/test_init_tool.py +205 -0
  922. chipgraph-0.1.0/tests/plugin/test_plan_rtl_commands.py +140 -0
  923. chipgraph-0.1.0/tests/plugin/test_plugin_acceptance_report.py +166 -0
  924. chipgraph-0.1.0/tests/plugin/test_plugin_commands.py +228 -0
  925. chipgraph-0.1.0/tests/plugin/test_roles_acceptance_report.py +196 -0
  926. chipgraph-0.1.0/tests/plugin/test_rtl_target_acceptance.py +377 -0
  927. chipgraph-0.1.0/tests/plugin/test_run_command_loop.py +55 -0
  928. chipgraph-0.1.0/tests/plugin/test_two_way_permissions.py +347 -0
  929. chipgraph-0.1.0/tests/test_example_profiles.py +38 -0
  930. chipgraph-0.1.0/tests/test_image_workflow.py +63 -0
  931. chipgraph-0.1.0/tests/test_release_metadata.py +70 -0
  932. chipgraph-0.1.0/tests/test_release_workflow.py +54 -0
  933. chipgraph-0.1.0/tests/test_version.py +17 -0
  934. chipgraph-0.1.0/uv.lock +3381 -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,31 @@
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
+ !docs/tb-claude-code/
21
+ !docs/tb-claude-code/fixture.py
22
+ doc
23
+ plugin
24
+ .claude-plugin
25
+ evals
26
+ interfaces
27
+ presets
28
+ orgs
29
+ *.md
30
+ !README.md
31
+ .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,5 @@
1
+ # Default owner for everything in this repo.
2
+ # Enforced via the main-protection ruleset (require_code_owner_review).
3
+ # Org docs: quynhonsemiconductor/.github → docs/ORG-GOVERNANCE.md (the area-team model).
4
+
5
+ * @quynhonsemiconductor/ai-leads
@@ -0,0 +1,144 @@
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
+ timeout-minutes: 20
23
+ steps:
24
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
25
+ with:
26
+ persist-credentials: false
27
+
28
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
29
+ with:
30
+ python-version: ${{ matrix.python }}
31
+
32
+ - run: uv sync --locked
33
+
34
+ - run: uv run ruff check .
35
+
36
+ - run: uv run ruff format --check .
37
+
38
+ - run: uv run lint-imports
39
+
40
+ - run: uv run mypy
41
+
42
+ - run: uv run pytest
43
+
44
+ - run: make schemas-check
45
+
46
+ # The `edalize` sim adapter (M2-05) on Linux: Verilator from the OSS CAD Suite release
47
+ # docker/Dockerfile pins, the C++ build deps of a Verilator model and Icarus from apt,
48
+ # and the `sim` extra. Runs the sample cocotb testbench (examples/tinysoc/dv) and the
49
+ # failure cases through EdalizeTool with a real LocalRunner, and fails on any skip.
50
+ sim:
51
+ name: sim (cocotb, verilator + icarus, py${{ matrix.python }})
52
+ strategy:
53
+ fail-fast: false
54
+ matrix:
55
+ python: ["3.13", "3.14"]
56
+ runs-on: ubuntu-latest
57
+ timeout-minutes: 30
58
+ steps:
59
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
60
+ with:
61
+ persist-credentials: false
62
+
63
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
64
+ with:
65
+ python-version: ${{ matrix.python }}
66
+
67
+ - name: Install OSS CAD Suite (the release docker/Dockerfile pins), for Verilator
68
+ run: |
69
+ set -euo pipefail
70
+ date="$(sed -n 's/^ARG OSS_CAD_SUITE_DATE=//p' docker/Dockerfile)"
71
+ sha256="$(sed -n 's/^ARG OSS_CAD_SUITE_SHA256_AMD64=//p' docker/Dockerfile)"
72
+ file="oss-cad-suite-linux-x64-${date//-/}.tgz"
73
+ url="https://github.com/YosysHQ/oss-cad-suite-build/releases/download/${date}/${file}"
74
+ curl -fsSL -o "$RUNNER_TEMP/oss-cad-suite.tgz" "$url"
75
+ echo "${sha256} $RUNNER_TEMP/oss-cad-suite.tgz" | sha256sum -c -
76
+ tar -xzf "$RUNNER_TEMP/oss-cad-suite.tgz" -C "$RUNNER_TEMP"
77
+ rm -f "$RUNNER_TEMP/oss-cad-suite.tgz"
78
+ echo "$RUNNER_TEMP/oss-cad-suite/bin" >> "$GITHUB_PATH"
79
+
80
+ # g++: Verilator compiles the model; liblz4-dev/zlib1g-dev: its FST writer. Icarus
81
+ # from apt, ahead of the suite's on PATH: the suite's `vvp` wrapper loads the
82
+ # suite's own cocotb libgpi and no test runs (docs/spikes/S3.md, pitfall 4).
83
+ - name: Install the C++ build deps of a Verilator model, and Icarus from apt
84
+ run: |
85
+ set -euo pipefail
86
+ sudo apt-get update
87
+ sudo apt-get install -y --no-install-recommends \
88
+ g++ make liblz4-dev zlib1g-dev iverilog
89
+ mkdir -p "$RUNNER_TEMP/apt-icarus"
90
+ ln -sf /usr/bin/iverilog /usr/bin/vvp "$RUNNER_TEMP/apt-icarus/"
91
+ echo "$RUNNER_TEMP/apt-icarus" >> "$GITHUB_PATH"
92
+
93
+ - run: uv sync --locked --extra sim
94
+
95
+ - name: Tool versions
96
+ env:
97
+ PYTHON_VERSION: ${{ matrix.python }}
98
+ run: |
99
+ {
100
+ echo "### sim toolchain, py${PYTHON_VERSION}"
101
+ echo '```'
102
+ echo "verilator: $(verilator --version) ($(command -v verilator))"
103
+ echo "iverilog: $(iverilog -V 2>&1 | head -n 1) ($(command -v vvp))"
104
+ echo "g++: $(g++ --version | head -n 1)"
105
+ echo "python: $(uv run --no-sync python --version)"
106
+ uv run --no-sync python -c 'import importlib.metadata as m; print("edalize: ", m.version("edalize")); print("cocotb: ", m.version("cocotb"))'
107
+ echo "cocotb-config: $(uv run --no-sync which cocotb-config)"
108
+ echo '```'
109
+ } | tee -a "$GITHUB_STEP_SUMMARY"
110
+
111
+ - name: Run the cocotb testbenches through EdalizeTool
112
+ run: >-
113
+ uv run --no-sync pytest -q
114
+ tests/e2e/test_sim_edalize.py tests/adapters/tool/test_edalize.py
115
+ tests/adapters/parser/test_cocotb.py
116
+ --junitxml="$RUNNER_TEMP/sim-junit.xml"
117
+
118
+ - name: Fail if a sim test was skipped
119
+ run: |
120
+ python3 - "$RUNNER_TEMP/sim-junit.xml" <<'PY'
121
+ import sys
122
+ import xml.etree.ElementTree as ET
123
+
124
+ root = ET.parse(sys.argv[1]).getroot()
125
+ suite = root if root.tag == "testsuite" else root.find("testsuite")
126
+ tests, skipped = int(suite.get("tests", 0)), int(suite.get("skipped", 0))
127
+ print(f"tests={tests} skipped={skipped}")
128
+ if skipped or tests == 0:
129
+ raise SystemExit("sim tests were skipped: the toolchain or the `sim` extra is missing")
130
+ PY
131
+
132
+ secrets:
133
+ runs-on: ubuntu-latest
134
+ timeout-minutes: 10
135
+ steps:
136
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
137
+ with:
138
+ persist-credentials: false
139
+ fetch-depth: 0
140
+
141
+ # The org's shared scanner (gitleaks CLI, canary-checked before trusting a
142
+ # clean result), pinned like every other ci ref. Replaces the upstream
143
+ # trufflehog action this repo carried on its own.
144
+ - uses: quynhonsemiconductor/ci/actions/scan-secrets@956804ad4aa2dcf930909553d306d72b3708fd5d # v1.34.1+ci#308
@@ -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 cleanly, green, with a
12
+ # ::notice:: and a line in the run summary (owner decision 2026-11-04). There is no
13
+ # schedule: this workflow runs by hand only, so a green skip can never read as a weekly
14
+ # eval that passed.
15
+ # Cost cap: --budget-usd per suite (claude's --max-budget-usd per sample, and the suite
16
+ # stops once the summed total_cost_usd reaches it); --time-limit per suite.
17
+
18
+ on:
19
+ workflow_dispatch:
20
+ inputs:
21
+ suite:
22
+ description: Suite to run
23
+ type: choice
24
+ options: [all, ask, triage, triage-holdout, triage-holdout2]
25
+ default: all
26
+ main_model:
27
+ description: Main session model (workers stay on haiku)
28
+ type: string
29
+ default: sonnet
30
+ budget_usd:
31
+ description: Cost cap per suite, in USD
32
+ type: string
33
+ default: "3"
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@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
69
+ if: steps.auth.outputs.ok == 'true'
70
+ with:
71
+ python-version: "3.14"
72
+
73
+ - uses: actions/setup-node@949feb2413d6458794dcd2491c4babbbce0c15c1 # v7.1.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 || 'sonnet' }}
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@cf430e030ddbb5b0abf93d22962f4752f3646cd9 # v7.0.2
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,194 @@
1
+ name: image
2
+
3
+ # zizmor 1.5.2 (the version the shared action installs) anchors cache-poisoning at
4
+ # the workflow's trigger, not at the cache step, so the inline form on the build
5
+ # actions does not cover it — CONFIRMED 2026-11-04 against a local 1.5.2 (two
6
+ # findings, both image.yml:3:1). The risk is closed in the workflow instead: the
7
+ # PR-running build job READS the GHA cache but never writes it (cache-to is
8
+ # conditional on a push), and the job that writes and publishes runs only on
9
+ # push/tag. OWNER RE-CHECK: when the shared action's pinned zizmor is raised to
10
+ # >=1.30 (which reports nothing here), delete this ignore and confirm the check
11
+ # still passes.
12
+ on: # zizmor: ignore[cache-poisoning]
13
+ pull_request:
14
+ push:
15
+ branches: [main]
16
+ tags: ["v*"]
17
+
18
+ permissions:
19
+ contents: read
20
+
21
+ concurrency:
22
+ group: ${{ github.workflow }}-${{ github.ref }}
23
+ cancel-in-progress: true
24
+
25
+ env:
26
+ IMAGE: ghcr.io/quynhonsemiconductor/chipgraph-eda
27
+
28
+ jobs:
29
+ build-test:
30
+ name: build test image, run tinysoc e2e
31
+ runs-on: ubuntu-latest
32
+ timeout-minutes: 30
33
+ outputs:
34
+ relevant: ${{ steps.changes.outputs.relevant }}
35
+ permissions:
36
+ contents: read
37
+ steps:
38
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
39
+ with:
40
+ persist-credentials: false
41
+ fetch-depth: 2 # the merge commit and both parents: enough to diff against the base
42
+
43
+ # The job always runs, so it can be a required check; when nothing the image is built
44
+ # from changed, every later step is skipped and the job still reports success.
45
+ - name: Decide whether the image is affected
46
+ id: changes
47
+ env:
48
+ EVENT: ${{ github.event_name }}
49
+ REF: ${{ github.ref }}
50
+ # Paths the test image is built from or tested with.
51
+ RELEVANT: '^(docker/|pyproject\.toml$|uv\.lock$|src/|tests/e2e/|examples/|docs/tb-claude-code/|\.dockerignore$|\.github/workflows/image\.yml$)'
52
+ run: |
53
+ set -eu
54
+ relevant=false
55
+ files=""
56
+ if [ "$EVENT" = push ] && [ "${REF#refs/tags/}" != "$REF" ]; then
57
+ relevant=true # a release tag always builds
58
+ elif ! files="$(git diff --name-only HEAD^1 HEAD)"; then
59
+ relevant=true # cannot tell: build
60
+ elif printf '%s\n' "$files" | grep -Eq "$RELEVANT"; then
61
+ relevant=true
62
+ fi
63
+ echo "relevant=$relevant" >> "$GITHUB_OUTPUT"
64
+ {
65
+ echo "### image job: relevant=$relevant"
66
+ echo '```'
67
+ printf '%s\n' "$files"
68
+ echo '```'
69
+ } >> "$GITHUB_STEP_SUMMARY"
70
+
71
+ - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
72
+ if: steps.changes.outputs.relevant == 'true'
73
+
74
+ # A pull request may READ the cache but never WRITE it: this job runs for
75
+ # PRs, and the trusted publish job below reuses the same scope. A cache
76
+ # entry a PR could plant would ride into the published image (zizmor
77
+ # cache-poisoning, the reason the write is conditional rather than ignored).
78
+ - uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
79
+ if: steps.changes.outputs.relevant == 'true'
80
+ with:
81
+ context: .
82
+ file: docker/Dockerfile
83
+ target: test
84
+ tags: chipgraph-eda:test
85
+ load: true
86
+ push: false
87
+ cache-from: type=gha
88
+ cache-to: ${{ github.event_name == 'push' && 'type=gha,mode=max' || '' }}
89
+
90
+ - name: Tool versions in the image
91
+ if: steps.changes.outputs.relevant == 'true'
92
+ run: |
93
+ set -o pipefail
94
+ {
95
+ echo "### chipgraph-eda:test toolchain"
96
+ echo '```'
97
+ docker run --rm chipgraph-eda:test sh -c '
98
+ echo "verilator: $(verilator --version) ($(command -v verilator))"
99
+ echo "iverilog: $(iverilog -V 2>&1 | head -n 1) ($(command -v vvp))"
100
+ echo "g++: $(g++ --version | head -n 1)"
101
+ echo "python: $(uv run --no-sync python --version)"
102
+ uv run --no-sync python -c "import importlib.metadata as m; print(\"edalize: \", m.version(\"edalize\")); print(\"cocotb: \", m.version(\"cocotb\"))"
103
+ '
104
+ echo '```'
105
+ } | tee -a "$GITHUB_STEP_SUMMARY"
106
+
107
+ - name: Run the tinysoc e2e suite inside the image
108
+ if: steps.changes.outputs.relevant == 'true'
109
+ env:
110
+ REPORT_DIR: ${{ runner.temp }}/e2e-report
111
+ run: |
112
+ set -eu
113
+ mkdir -p "$REPORT_DIR"
114
+ docker run --rm \
115
+ -v "$REPORT_DIR:/tmp/report" \
116
+ chipgraph-eda:test \
117
+ sh -c 'uv run --no-sync pytest -m e2e tests/e2e -q --junitxml=/tmp/report/e2e-junit.xml'
118
+
119
+ - name: Fail if the e2e tests did not actually run
120
+ if: steps.changes.outputs.relevant == 'true'
121
+ env:
122
+ REPORT_DIR: ${{ runner.temp }}/e2e-report
123
+ run: |
124
+ python3 - "$REPORT_DIR/e2e-junit.xml" <<'PY'
125
+ import sys
126
+ import xml.etree.ElementTree as ET
127
+
128
+ root = ET.parse(sys.argv[1]).getroot()
129
+ suite = root if root.tag == "testsuite" else root.find("testsuite")
130
+ if suite is None:
131
+ raise SystemExit("no <testsuite> found in the junit report")
132
+
133
+ tests = int(suite.get("tests", 0))
134
+ failures = int(suite.get("failures", 0))
135
+ errors = int(suite.get("errors", 0))
136
+ skipped = int(suite.get("skipped", 0))
137
+ passed = tests - failures - errors - skipped
138
+
139
+ print(f"tests={tests} passed={passed} failures={failures} errors={errors} skipped={skipped}")
140
+
141
+ if skipped:
142
+ raise SystemExit(
143
+ f"{skipped} e2e test(s) were skipped inside the image "
144
+ "(verilator/make missing?) — the image must run them, not skip them"
145
+ )
146
+ if failures or errors:
147
+ raise SystemExit("e2e tests failed inside the image")
148
+ if passed < 5:
149
+ raise SystemExit(f"expected at least 5 passing e2e tests, got {passed}")
150
+ PY
151
+
152
+ publish:
153
+ name: publish image to GHCR
154
+ needs: build-test
155
+ if: >-
156
+ needs.build-test.outputs.relevant == 'true' &&
157
+ github.event_name == 'push' &&
158
+ (github.ref == 'refs/heads/main' || startsWith(github.ref, 'refs/tags/v'))
159
+ runs-on: ubuntu-latest
160
+ timeout-minutes: 20
161
+ permissions:
162
+ contents: read
163
+ packages: write # push chipgraph-eda to ghcr.io
164
+ steps:
165
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
166
+ with:
167
+ persist-credentials: false
168
+
169
+ - uses: docker/setup-buildx-action@f87e5991a6d7451dcb8d9637bfbc97413f497069 # v4.4.1
170
+
171
+ - id: meta
172
+ uses: docker/metadata-action@dc802804100637a589fabce1cb79ff13a1411302 # v6.2.0
173
+ with:
174
+ images: ${{ env.IMAGE }}
175
+ tags: |
176
+ type=raw,value=main,enable={{is_default_branch}}
177
+ type=sha,prefix=sha-,format=short
178
+ type=semver,pattern={{version}}
179
+
180
+ - uses: docker/login-action@81c6f93d4bc991e510b342a00b419b3bb4efc5c6 # v4.7.0
181
+ with:
182
+ registry: ghcr.io
183
+ username: ${{ github.actor }}
184
+ password: ${{ secrets.GITHUB_TOKEN }}
185
+
186
+ - uses: docker/build-push-action@c3c9e263c25d99ce0380d002d59b67737d91b0dc # v7.4.0
187
+ with:
188
+ context: .
189
+ file: docker/Dockerfile
190
+ push: true
191
+ tags: ${{ steps.meta.outputs.tags }}
192
+ labels: ${{ steps.meta.outputs.labels }}
193
+ cache-from: type=gha
194
+ cache-to: type=gha,mode=max
@@ -0,0 +1,17 @@
1
+ # release-please — one package (python type, bumps pyproject.toml). Releases
2
+ # need the owner's explicit "go release"; the release PR is never merged by CI.
3
+ name: Release Please
4
+
5
+ on:
6
+ push:
7
+ branches: [main]
8
+
9
+ permissions:
10
+ contents: write
11
+ pull-requests: write
12
+
13
+ jobs:
14
+ release-please:
15
+ uses: quynhonsemiconductor/ci/.github/workflows/release-please.yml@a346843f3ee1848d81ac93974d2a8d04a5ebe7ed # v1.34.6
16
+ secrets:
17
+ QNSC_AUTOMATION_PRIVATE_KEY: ${{ secrets.QNSC_AUTOMATION_PRIVATE_KEY }}
@@ -0,0 +1,77 @@
1
+ # =============================================================================
2
+ # Release Please · uv lock — keep uv.lock in step with the release version.
3
+ #
4
+ # release-please bumps pyproject.toml but has no uv.lock updater (upstream
5
+ # googleapis/release-please#2561), so every release PR would fail the repo's
6
+ # `uv sync --locked` jobs on a stale chipgraph version entry. This workflow
7
+ # runs on release-please's own branches only, re-locks, and pushes the updated
8
+ # uv.lock back to the release branch with the qnsc-automation App token — an
9
+ # App-token push is what re-triggers the release PR's checks (the default
10
+ # GITHUB_TOKEN push would leave the required checks stuck on the old head).
11
+ # =============================================================================
12
+ name: Release Please · uv lock
13
+
14
+ on:
15
+ pull_request:
16
+ types: [opened, synchronize, reopened]
17
+
18
+ permissions:
19
+ contents: write
20
+
21
+ concurrency:
22
+ group: uv-lock-${{ github.head_ref }}
23
+ cancel-in-progress: true
24
+
25
+ jobs:
26
+ uv-lock:
27
+ name: sync uv.lock with the release version
28
+ # Only release-please's own branches; the App token step below fails loudly
29
+ # until the App is installed and the org secret granted (infra#489 owner steps).
30
+ if: startsWith(github.head_ref, 'release-please--branches--')
31
+ runs-on: ubuntu-latest
32
+ timeout-minutes: 10
33
+ steps:
34
+ # The push needs the branch itself (a pull_request checkout would be the
35
+ # merge ref) and full history to push back.
36
+ - uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
37
+ with:
38
+ ref: ${{ github.head_ref }}
39
+ fetch-depth: 0
40
+ persist-credentials: false
41
+
42
+ - uses: actions/create-github-app-token@64ab729a6294000f5aa4a4bc0b73d1f32bc45510 # v3.3.0
43
+ id: app-token
44
+ with:
45
+ app-id: ${{ vars.QNSC_AUTOMATION_APP_ID }}
46
+ private-key: ${{ secrets.QNSC_AUTOMATION_PRIVATE_KEY }}
47
+ repositories: ${{ github.event.repository.name }}
48
+ permission-contents: write
49
+
50
+ # No GHA cache: the job re-locks only, and a PR-branch cache would be
51
+ # unreadable elsewhere and evict the entries main does use.
52
+ - uses: astral-sh/setup-uv@07a047e608db84b3d8c06cd9a7c7dcc9c355c18e # v10.3.2
53
+ with:
54
+ enable-cache: false
55
+
56
+ - name: Re-lock against the bumped pyproject.toml
57
+ run: uv lock
58
+
59
+ - name: Push the updated uv.lock to the release branch
60
+ env:
61
+ TOKEN: ${{ steps.app-token.outputs.token }}
62
+ BRANCH: ${{ github.head_ref }}
63
+ run: |
64
+ set -euo pipefail
65
+ if [ -z "$TOKEN" ]; then
66
+ echo "::error::no qnsc-automation App token — install the App on this repo and grant it the org secret QNSC_AUTOMATION_PRIVATE_KEY (owner steps in infra#489)"
67
+ exit 1
68
+ fi
69
+ if git diff --quiet uv.lock; then
70
+ echo "uv.lock already matches pyproject.toml"
71
+ exit 0
72
+ fi
73
+ git config user.name "qnsc-automation[bot]"
74
+ git config user.email "4166718+qnsc-automation[bot]@users.noreply.github.com"
75
+ git add uv.lock
76
+ git commit -m "chore: sync uv.lock with the release version"
77
+ git push "https://x-access-token:${TOKEN}@github.com/${GITHUB_REPOSITORY}.git" "HEAD:${BRANCH}"