atomadic-forge 0.5.3__tar.gz → 0.6.1__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.
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/actions/forge-action/README.md +130 -130
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/actions/forge-action/action.yml +227 -227
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/workflows/ci.yml +96 -96
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/workflows/customer-refactor.yml +302 -302
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/workflows/forge-self-certify.yml +54 -54
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/workflows/forge-studio-ci.yml +59 -59
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/workflows/release.yml +55 -55
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/ARCHITECTURE.md +147 -136
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/CHANGELOG.md +95 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/PKG-INFO +510 -510
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/README.md +478 -478
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/01-getting-started.md +232 -232
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/02-commands.md +670 -670
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/03-tutorial.md +328 -328
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/05-faq.md +472 -472
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/AGENTS_GUIDE.md +486 -486
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/AIR_GAPPED.md +161 -161
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/CI_CD.md +192 -192
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/CODEX_WALKTHROUGH.md +124 -124
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/COMMANDS.md +794 -793
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/FIRST_10_MINUTES.md +200 -200
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/FORMALIZATION.md +197 -197
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/LANDSCAPE.md +111 -111
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/MULTI_REPO.md +202 -202
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/README.md +138 -138
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/RECEIPT.md +305 -305
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/ROADMAP.md +112 -111
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/SHOWCASE.md +241 -241
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/SIDECAR.md +139 -139
- atomadic_forge-0.6.1/docs/STUDIO.md +34 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/WHY_NOW.md +119 -119
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/INDEX.md +18 -18
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/chat.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/commandsmith.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/config.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/demo.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/emergent-then-synergy.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/emergent.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/evolve-then-iterate.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/evolve.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/feature-then-emergent.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/iterate.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/synergy-then-emergent.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/commands/synergy.md +9 -9
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/compliance/CMMC_AI_MAPPING.md +157 -157
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/compliance/CS-1.md +203 -203
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/compliance/EU_AI_ACT_ANNEX_IV.md +145 -145
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/compliance/FDA_PCCP_MAPPING.md +138 -138
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/compliance/SR_11-7_MAPPING.md +104 -104
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/tutorials/01-quickstart.md +91 -91
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/tutorials/03-the-five-tier-law.md +133 -133
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/tutorials/05-multi-repo-absorb.md +155 -155
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/tutorials/06-javascript-quickstart.md +242 -242
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/pyproject.toml +90 -90
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/setup.cfg +4 -4
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/__init__.py +12 -12
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/agent_plan_schema.py +120 -120
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/auth_constants.py +132 -133
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/error_codes.py +296 -296
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/lang_extensions.py +154 -154
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/policy_schema.py +48 -48
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/receipt_schema.py +311 -311
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/roi_constants.py +96 -96
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/sidecar_schema.py +81 -81
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/agent_context_pack.py +166 -166
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/agent_memory.py +139 -139
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/agent_plan_emitter.py +325 -324
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/agent_summary.py +277 -277
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/card_renderer.py +210 -210
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/certify_checks.py +73 -3
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/chat_context.py +170 -170
- atomadic_forge-0.6.1/src/atomadic_forge/a1_at_functions/code_signature.py +197 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/compiler_feedback.py +94 -94
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/compliance_checker.py +228 -228
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/cs1_renderer.py +588 -588
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/enforce_planner.py +208 -208
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/error_hints.py +105 -105
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/exported_api_check.py +188 -188
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/forge_auth.py +217 -217
- atomadic_forge-0.6.1/src/atomadic_forge/a1_at_functions/intent_similarity.py +113 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/js_parser.py +539 -539
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/lineage_chain.py +144 -144
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/lineage_reader.py +107 -107
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/llm_client.py +555 -554
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/local_signer.py +134 -134
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/lsp_protocol.py +379 -379
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/manifest_diff.py +314 -314
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/mcp_protocol.py +1234 -1230
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/patch_scorer.py +272 -272
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/plan_adapter.py +75 -75
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/policy_loader.py +107 -107
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/preflight_change.py +241 -241
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/progress_reporter.py +81 -81
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/provider_resolver.py +3 -1
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/receipt_emitter.py +291 -291
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/recipes.py +67 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/repo_explainer.py +124 -124
- atomadic_forge-0.6.1/src/atomadic_forge/a1_at_functions/research_note_distiller.py +95 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/roi_calculator.py +264 -264
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/rollback_planner.py +147 -147
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/sbom_emitter.py +155 -155
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/scout_walk.py +309 -309
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/sidecar_parser.py +161 -161
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/sidecar_validator.py +202 -202
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/test_runner.py +194 -196
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/test_selector.py +147 -147
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/tool_composer.py +135 -135
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/trust_gate_response.py +221 -221
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/validation_commands.py +183 -183
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/wire_check.py +260 -260
- atomadic_forge-0.6.1/src/atomadic_forge/a2_mo_composites/cost_circuit_breaker.py +266 -0
- atomadic_forge-0.6.1/src/atomadic_forge/a2_mo_composites/cross_agent_intent_deduplicator.py +69 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a2_mo_composites/forge_auth_client.py +251 -252
- atomadic_forge-0.6.1/src/atomadic_forge/a2_mo_composites/hierarchical_memory.py +307 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a2_mo_composites/lineage_chain_store.py +122 -122
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a2_mo_composites/plan_store.py +164 -164
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a2_mo_composites/receipt_signer.py +231 -231
- atomadic_forge-0.6.1/src/atomadic_forge/a3_og_features/agent_hire_protocol.py +228 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/commandsmith_feature.py +267 -267
- atomadic_forge-0.6.1/src/atomadic_forge/a3_og_features/dedup_engine.py +220 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/__init__.py +3 -3
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a0_qk_constants/__init__.py +4 -4
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/src/mixed_pkg/a1_at_functions/__init__.py +14 -14
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/conftest.py +10 -10
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/demo_packages/mixed_py_js/tests/test_mixed.py +18 -18
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/demo_runner.py +489 -489
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/emergent_feature.py +95 -95
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/forge_enforce.py +107 -107
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/forge_loop.py +528 -528
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/forge_pipeline.py +295 -295
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/forge_plan_apply.py +222 -222
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/lsp_server.py +98 -98
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/mcp_server.py +356 -356
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/synergy_feature.py +65 -65
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a4_sy_orchestration/cli.py +1378 -1378
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a4_sy_orchestration/copilots_cmd.py +234 -234
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a4_sy_orchestration/whoami_cmd.py +159 -159
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/_registry.py +36 -36
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/audit.py +142 -142
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/commandsmith.py +176 -176
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/demo.py +82 -82
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/iterate.py +140 -140
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge.egg-info/PKG-INFO +510 -510
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge.egg-info/SOURCES.txt +13 -2
- atomadic_forge-0.6.1/tests/test_agent_hire_protocol.py +99 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_agent_plan.py +282 -282
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_agent_summary.py +329 -329
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_audit_verb.py +169 -169
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_card_renderer.py +200 -200
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_chat.py +46 -46
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_cli_smoke.py +199 -199
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_codex_5_complete.py +448 -448
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_codex_6_enforce_polyglot.py +202 -202
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_compiler_feedback.py +203 -203
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_compliance_checker.py +245 -245
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_copilots_copilot.py +395 -395
- atomadic_forge-0.6.1/tests/test_cost_circuit_breaker.py +95 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_cs1_renderer.py +368 -368
- atomadic_forge-0.6.1/tests/test_dedup_engine.py +155 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_error_codes.py +241 -241
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_error_hints.py +127 -127
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_exported_api_check.py +150 -146
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_forge_action.py +259 -259
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_forge_auth_a1.py +228 -229
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_forge_auth_a2.py +376 -377
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_forge_enforce.py +266 -266
- atomadic_forge-0.6.1/tests/test_hierarchical_memory.py +90 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_ignore_and_docs.py +270 -270
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_js_certify.py +76 -76
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_js_parser.py +152 -152
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_js_recon.py +101 -101
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_js_wire.py +94 -94
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_lineage_chain.py +255 -255
- atomadic_forge-0.6.1/tests/test_ling_provider.py +36 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_local_signer.py +185 -185
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_lsp_protocol.py +302 -302
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_manifest_diff.py +201 -201
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_mcp_protocol.py +397 -397
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_plan_apply.py +378 -378
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_pre_audit_smoke.py +235 -235
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_precommit_hooks.py +175 -175
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_progress_reporter.py +103 -103
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_receipt_emitter.py +222 -222
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_receipt_schema.py +206 -206
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_receipt_signer.py +217 -217
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_roi_calculator.py +243 -243
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_sbom_emitter.py +141 -141
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_scaffold.py +111 -111
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_sidecar.py +188 -188
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_sidecar_validate.py +196 -196
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_stub_detector.py +163 -163
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_trust_gate_response.py +108 -106
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_whoami_cmd.py +126 -126
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_wire_certify.py +56 -56
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_wire_suggest_repairs.py +145 -145
- atomadic_forge-0.5.3/docs/STUDIO.md +0 -69
- atomadic_forge-0.5.3/tests/test_badge_worker.py +0 -143
- atomadic_forge-0.5.3/tests/test_vscode_extension_manifest.py +0 -138
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/ISSUE_TEMPLATE/bug_report.yml +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/ISSUE_TEMPLATE/config.yml +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/ISSUE_TEMPLATE/feature_request.yml +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/dependabot.yml +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/.github/pull_request_template.md +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/CONTRIBUTING.md +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/LICENSE +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/MANIFEST.in +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/SECURITY.md +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/assets/Atomadic-Forge-01.png +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/04-llm-loops.md +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/MARKET_POSITIONING.md +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/RELEASE_CHECKLIST.md +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/RELEASE_MESSAGING.md +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/tutorials/02-your-first-package.md +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/docs/tutorials/04-plug-in-llms.md +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/__main__.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/__init__.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/commandsmith_types.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/config_defaults.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/emergent_types.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/forge_types.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/gen_language.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/semantic_types.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/synergy_types.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a0_qk_constants/tier_names.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/__init__.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/body_extractor.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/cherry_pick.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/classify_tier.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/commandsmith_discover.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/commandsmith_render.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/config_io.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/doc_synthesizer.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/emergent_compose.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/emergent_rank.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/emergent_signature_extract.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/emergent_synthesize.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/evolution_log.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/forge_feedback.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/generation_quality.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/import_repair.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/import_smoke.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/provider_detect.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/scaffold_js.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/scaffold_pyproject.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/scaffold_starter.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/stub_detector.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/synergy_detect.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/synergy_render.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/synergy_surface_extract.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/tier_init_rebuild.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a1_at_functions/transcript_log.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a2_mo_composites/__init__.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a2_mo_composites/manifest_store.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/__init__.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/emergent_pipeline_integration.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/forge_evolve.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a3_og_features/setup_wizard.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a4_sy_orchestration/__init__.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/a4_sy_orchestration/login_cmd.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/__init__.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/chat.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/config_cmd.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/emergent.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/emergent_then_synergy.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/evolve.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/evolve_then_iterate.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/feature_then_emergent.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/synergy.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge/commands/synergy_then_emergent.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge.egg-info/dependency_links.txt +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge.egg-info/entry_points.txt +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge.egg-info/requires.txt +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/src/atomadic_forge.egg-info/top_level.txt +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_aaaa_nexus_client.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_body_extractor_repairs.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_certify_operational_axis.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_classify_tier.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_commandsmith.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_config.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_demo.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_emergent_compose.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_emergent_signature_extract.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_evolve_js.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_generation_quality.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_import_smoke.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_iterate_evolve.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_ollama_client.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_pipeline.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_stagnation.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_synergy.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_test_runner.py +0 -0
- {atomadic_forge-0.5.3 → atomadic_forge-0.6.1}/tests/test_tier_init_rebuild.py +0 -0
|
@@ -1,130 +1,130 @@
|
|
|
1
|
-
# forge-action
|
|
2
|
-
|
|
3
|
-
[](https://github.com/atomadictech/atomadic-forge)
|
|
4
|
-
|
|
5
|
-
A GitHub Action that runs **`forge wire` + `forge certify`** on a
|
|
6
|
-
tier-organized package and posts a **sticky PR comment** with the
|
|
7
|
-
rendered Receipt card. Composite action — no Docker, no extra runtime.
|
|
8
|
-
|
|
9
|
-
This is the Lane C W1 deliverable from the Atomadic Forge Golden Path.
|
|
10
|
-
Eventually moves to its own repo (`atomadictech/forge-action`); today
|
|
11
|
-
it ships in-tree under `.github/actions/forge-action/` so the action's
|
|
12
|
-
ref tracks the Forge release that emitted it.
|
|
13
|
-
|
|
14
|
-
---
|
|
15
|
-
|
|
16
|
-
## One-line install
|
|
17
|
-
|
|
18
|
-
In a consuming repo, add `.github/workflows/forge.yml`:
|
|
19
|
-
|
|
20
|
-
```yaml
|
|
21
|
-
name: Atomadic Forge — architecture gate
|
|
22
|
-
on:
|
|
23
|
-
pull_request:
|
|
24
|
-
push:
|
|
25
|
-
branches: [main]
|
|
26
|
-
|
|
27
|
-
permissions:
|
|
28
|
-
contents: read
|
|
29
|
-
pull-requests: write # required to post the sticky comment
|
|
30
|
-
|
|
31
|
-
jobs:
|
|
32
|
-
forge:
|
|
33
|
-
runs-on: ubuntu-latest
|
|
34
|
-
steps:
|
|
35
|
-
- uses: actions/checkout@v4
|
|
36
|
-
- uses: atomadictech/atomadic-forge/.github/actions/forge-action@main
|
|
37
|
-
with:
|
|
38
|
-
package_root: src/your_package
|
|
39
|
-
package_name: your_package
|
|
40
|
-
fail_under: '75'
|
|
41
|
-
```
|
|
42
|
-
|
|
43
|
-
That's it. The action will:
|
|
44
|
-
|
|
45
|
-
1. Install Forge from the same ref the action checked out at.
|
|
46
|
-
2. Run `forge wire <package_root> --fail-on-violations --json` —
|
|
47
|
-
exits 1 on any upward-import violation.
|
|
48
|
-
3. Run `forge certify . --fail-under <N> --emit-receipt
|
|
49
|
-
.atomadic-forge/receipt.json --print-card --json` — exits 1 below
|
|
50
|
-
the threshold.
|
|
51
|
-
4. Upload `wire.json`, `certify.json`, `receipt.json`, and the
|
|
52
|
-
rendered card as a 14-day build artifact.
|
|
53
|
-
5. Post (or update) a single sticky PR comment with the rendered card
|
|
54
|
-
and a one-line verdict summary.
|
|
55
|
-
|
|
56
|
-
---
|
|
57
|
-
|
|
58
|
-
## Inputs
|
|
59
|
-
|
|
60
|
-
| Name | Required | Default | Notes |
|
|
61
|
-
|---|---|---|---|
|
|
62
|
-
| `package_root` | yes | – | Tier-organized package path (e.g. `src/your_package`) |
|
|
63
|
-
| `project_root` | no | `.` | Project root passed to `forge certify` |
|
|
64
|
-
| `package_name` | no | `''` | Forwarded to `forge certify --package` |
|
|
65
|
-
| `fail_under` | no | `'75'` | Certify threshold; below this, the job fails |
|
|
66
|
-
| `receipt_path` | no | `.atomadic-forge/receipt.json` | Receipt JSON emit path (relative to `project_root`) |
|
|
67
|
-
| `python_version` | no | `'3.11'` | Python for the Forge install |
|
|
68
|
-
| `forge_ref` | no | (action ref) | Override which `atomadic-forge` ref to install |
|
|
69
|
-
| `comment_on_pr` | no | `'true'` | Set to `'false'` to skip the sticky comment |
|
|
70
|
-
| `upload_artifacts` | no | `'true'` | Set to `'false'` to skip the artifact upload |
|
|
71
|
-
|
|
72
|
-
## Outputs
|
|
73
|
-
|
|
74
|
-
| Name | Type | Notes |
|
|
75
|
-
|---|---|---|
|
|
76
|
-
| `certify_score` | string | The certify score (0–100) as text |
|
|
77
|
-
| `wire_verdict` | string | `PASS` or `FAIL` |
|
|
78
|
-
| `receipt_path` | string | Echoes back the input `receipt_path` |
|
|
79
|
-
|
|
80
|
-
---
|
|
81
|
-
|
|
82
|
-
## Soft-fail discipline
|
|
83
|
-
|
|
84
|
-
- **Wire and certify gates fail the job by themselves.** The
|
|
85
|
-
`--fail-on-violations` and `--fail-under` flags are native (shipped
|
|
86
|
-
in 0.2.x); no `python -c` workarounds.
|
|
87
|
-
- **The PR comment is best-effort.** When the workflow runs from a
|
|
88
|
-
fork or without `pull-requests: write`, the comment step is skipped
|
|
89
|
-
and the job still reports its real verdict via exit code.
|
|
90
|
-
- **The Receipt is signable.** When `AAAA_NEXUS_API_KEY` is available
|
|
91
|
-
in the environment and the consuming workflow re-invokes `forge
|
|
92
|
-
certify --sign`, the Receipt's `signatures.aaaa_nexus` field is
|
|
93
|
-
populated. `forge-action` does not call `--sign` by default — most
|
|
94
|
-
CI runs are unsigned dev attestations.
|
|
95
|
-
|
|
96
|
-
---
|
|
97
|
-
|
|
98
|
-
## What the sticky comment looks like
|
|
99
|
-
|
|
100
|
-
```
|
|
101
|
-
### Atomadic Forge — wire + certify
|
|
102
|
-
|
|
103
|
-
**wire:** `PASS` · **certify:** `100.0/100`
|
|
104
|
-
|
|
105
|
-
╔══════════════════════════════════════════════════════════╗
|
|
106
|
-
│ Atomadic Forge Receipt atomadic-forge.receipt/v1 │
|
|
107
|
-
│ ✓ PASS forge 0.2.2 │
|
|
108
|
-
│ atomadic-forge │
|
|
109
|
-
│ CERTIFY 100.0 / 100 │
|
|
110
|
-
│ docs ✓ tests ✓ layout ✓ wire ✓ │
|
|
111
|
-
│ WIRE PASS (0 violations) │
|
|
112
|
-
│ SCOUT 952 symbols (python) 952 tier-placed │
|
|
113
|
-
╚══════════════════════════════════════════════════════════╝
|
|
114
|
-
|
|
115
|
-
Posted by forge-action. The card and JSON receipt are also uploaded
|
|
116
|
-
as build artifacts on this run.
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
Updated in place on every push — never spams the PR.
|
|
120
|
-
|
|
121
|
-
---
|
|
122
|
-
|
|
123
|
-
## Status
|
|
124
|
-
|
|
125
|
-
- **Today (Lane C W1):** in-tree under `.github/actions/forge-action/`,
|
|
126
|
-
ref-pinned to the consuming Forge release.
|
|
127
|
-
- **Lane C W12 (planned):** dedicated repo `atomadictech/forge-action`
|
|
128
|
-
+ Marketplace listing.
|
|
129
|
-
- **Lane C W16+ (planned):** GitHub App variant that opens weekly
|
|
130
|
-
drift-PRs via `forge iterate --dry-run`.
|
|
1
|
+
# forge-action
|
|
2
|
+
|
|
3
|
+
[](https://github.com/atomadictech/atomadic-forge)
|
|
4
|
+
|
|
5
|
+
A GitHub Action that runs **`forge wire` + `forge certify`** on a
|
|
6
|
+
tier-organized package and posts a **sticky PR comment** with the
|
|
7
|
+
rendered Receipt card. Composite action — no Docker, no extra runtime.
|
|
8
|
+
|
|
9
|
+
This is the Lane C W1 deliverable from the Atomadic Forge Golden Path.
|
|
10
|
+
Eventually moves to its own repo (`atomadictech/forge-action`); today
|
|
11
|
+
it ships in-tree under `.github/actions/forge-action/` so the action's
|
|
12
|
+
ref tracks the Forge release that emitted it.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## One-line install
|
|
17
|
+
|
|
18
|
+
In a consuming repo, add `.github/workflows/forge.yml`:
|
|
19
|
+
|
|
20
|
+
```yaml
|
|
21
|
+
name: Atomadic Forge — architecture gate
|
|
22
|
+
on:
|
|
23
|
+
pull_request:
|
|
24
|
+
push:
|
|
25
|
+
branches: [main]
|
|
26
|
+
|
|
27
|
+
permissions:
|
|
28
|
+
contents: read
|
|
29
|
+
pull-requests: write # required to post the sticky comment
|
|
30
|
+
|
|
31
|
+
jobs:
|
|
32
|
+
forge:
|
|
33
|
+
runs-on: ubuntu-latest
|
|
34
|
+
steps:
|
|
35
|
+
- uses: actions/checkout@v4
|
|
36
|
+
- uses: atomadictech/atomadic-forge/.github/actions/forge-action@main
|
|
37
|
+
with:
|
|
38
|
+
package_root: src/your_package
|
|
39
|
+
package_name: your_package
|
|
40
|
+
fail_under: '75'
|
|
41
|
+
```
|
|
42
|
+
|
|
43
|
+
That's it. The action will:
|
|
44
|
+
|
|
45
|
+
1. Install Forge from the same ref the action checked out at.
|
|
46
|
+
2. Run `forge wire <package_root> --fail-on-violations --json` —
|
|
47
|
+
exits 1 on any upward-import violation.
|
|
48
|
+
3. Run `forge certify . --fail-under <N> --emit-receipt
|
|
49
|
+
.atomadic-forge/receipt.json --print-card --json` — exits 1 below
|
|
50
|
+
the threshold.
|
|
51
|
+
4. Upload `wire.json`, `certify.json`, `receipt.json`, and the
|
|
52
|
+
rendered card as a 14-day build artifact.
|
|
53
|
+
5. Post (or update) a single sticky PR comment with the rendered card
|
|
54
|
+
and a one-line verdict summary.
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Inputs
|
|
59
|
+
|
|
60
|
+
| Name | Required | Default | Notes |
|
|
61
|
+
|---|---|---|---|
|
|
62
|
+
| `package_root` | yes | – | Tier-organized package path (e.g. `src/your_package`) |
|
|
63
|
+
| `project_root` | no | `.` | Project root passed to `forge certify` |
|
|
64
|
+
| `package_name` | no | `''` | Forwarded to `forge certify --package` |
|
|
65
|
+
| `fail_under` | no | `'75'` | Certify threshold; below this, the job fails |
|
|
66
|
+
| `receipt_path` | no | `.atomadic-forge/receipt.json` | Receipt JSON emit path (relative to `project_root`) |
|
|
67
|
+
| `python_version` | no | `'3.11'` | Python for the Forge install |
|
|
68
|
+
| `forge_ref` | no | (action ref) | Override which `atomadic-forge` ref to install |
|
|
69
|
+
| `comment_on_pr` | no | `'true'` | Set to `'false'` to skip the sticky comment |
|
|
70
|
+
| `upload_artifacts` | no | `'true'` | Set to `'false'` to skip the artifact upload |
|
|
71
|
+
|
|
72
|
+
## Outputs
|
|
73
|
+
|
|
74
|
+
| Name | Type | Notes |
|
|
75
|
+
|---|---|---|
|
|
76
|
+
| `certify_score` | string | The certify score (0–100) as text |
|
|
77
|
+
| `wire_verdict` | string | `PASS` or `FAIL` |
|
|
78
|
+
| `receipt_path` | string | Echoes back the input `receipt_path` |
|
|
79
|
+
|
|
80
|
+
---
|
|
81
|
+
|
|
82
|
+
## Soft-fail discipline
|
|
83
|
+
|
|
84
|
+
- **Wire and certify gates fail the job by themselves.** The
|
|
85
|
+
`--fail-on-violations` and `--fail-under` flags are native (shipped
|
|
86
|
+
in 0.2.x); no `python -c` workarounds.
|
|
87
|
+
- **The PR comment is best-effort.** When the workflow runs from a
|
|
88
|
+
fork or without `pull-requests: write`, the comment step is skipped
|
|
89
|
+
and the job still reports its real verdict via exit code.
|
|
90
|
+
- **The Receipt is signable.** When `AAAA_NEXUS_API_KEY` is available
|
|
91
|
+
in the environment and the consuming workflow re-invokes `forge
|
|
92
|
+
certify --sign`, the Receipt's `signatures.aaaa_nexus` field is
|
|
93
|
+
populated. `forge-action` does not call `--sign` by default — most
|
|
94
|
+
CI runs are unsigned dev attestations.
|
|
95
|
+
|
|
96
|
+
---
|
|
97
|
+
|
|
98
|
+
## What the sticky comment looks like
|
|
99
|
+
|
|
100
|
+
```
|
|
101
|
+
### Atomadic Forge — wire + certify
|
|
102
|
+
|
|
103
|
+
**wire:** `PASS` · **certify:** `100.0/100`
|
|
104
|
+
|
|
105
|
+
╔══════════════════════════════════════════════════════════╗
|
|
106
|
+
│ Atomadic Forge Receipt atomadic-forge.receipt/v1 │
|
|
107
|
+
│ ✓ PASS forge 0.2.2 │
|
|
108
|
+
│ atomadic-forge │
|
|
109
|
+
│ CERTIFY 100.0 / 100 │
|
|
110
|
+
│ docs ✓ tests ✓ layout ✓ wire ✓ │
|
|
111
|
+
│ WIRE PASS (0 violations) │
|
|
112
|
+
│ SCOUT 952 symbols (python) 952 tier-placed │
|
|
113
|
+
╚══════════════════════════════════════════════════════════╝
|
|
114
|
+
|
|
115
|
+
Posted by forge-action. The card and JSON receipt are also uploaded
|
|
116
|
+
as build artifacts on this run.
|
|
117
|
+
```
|
|
118
|
+
|
|
119
|
+
Updated in place on every push — never spams the PR.
|
|
120
|
+
|
|
121
|
+
---
|
|
122
|
+
|
|
123
|
+
## Status
|
|
124
|
+
|
|
125
|
+
- **Today (Lane C W1):** in-tree under `.github/actions/forge-action/`,
|
|
126
|
+
ref-pinned to the consuming Forge release.
|
|
127
|
+
- **Lane C W12 (planned):** dedicated repo `atomadictech/forge-action`
|
|
128
|
+
+ Marketplace listing.
|
|
129
|
+
- **Lane C W16+ (planned):** GitHub App variant that opens weekly
|
|
130
|
+
drift-PRs via `forge iterate --dry-run`.
|