diff --git a/.github/workflows/refresh-github-signals.yml b/.github/workflows/refresh-github-signals.yml index ed73416a..b242d1e1 100644 --- a/.github/workflows/refresh-github-signals.yml +++ b/.github/workflows/refresh-github-signals.yml @@ -60,7 +60,7 @@ jobs: - name: Refresh GitHub signal artifacts run: | - python3 tools/github/sync_latest_signals.py \ + python3 scripts/github/sync_latest_signals.py \ --repo openai/codex \ --token-env GH_API_TOKEN @@ -68,8 +68,8 @@ jobs: id: changes run: | if [ -z "$(git status --porcelain -- \ - tools/github/bundles \ - tools/github/analysis \ + artifacts/github/bundles \ + artifacts/github/analysis \ site/src/content/signals \ site/src/content/release-deltas/openai-codex-latest.json)" ]; then echo "changed=false" >> "$GITHUB_OUTPUT" @@ -87,8 +87,8 @@ jobs: git config user.name "github-actions[bot]" git config user.email "41898282+github-actions[bot]@users.noreply.github.com" git add \ - tools/github/bundles \ - tools/github/analysis \ + artifacts/github/bundles \ + artifacts/github/analysis \ site/src/content/signals \ site/src/content/release-deltas/openai-codex-latest.json git commit -m "chore(decodex): refresh github signals" diff --git a/Makefile.toml b/Makefile.toml index 01063fd6..46f2799c 100644 --- a/Makefile.toml +++ b/Makefile.toml @@ -60,8 +60,8 @@ dependencies = [ [tasks.check-site-content] workspace = false script = [ - "python3 tools/github/validate_change_bundle.py tools/github/bundles", - "python3 tools/github/validate_signal_entry.py site/src/content/signals", + "python3 scripts/github/validate_change_bundle.py artifacts/github/bundles", + "python3 scripts/github/validate_signal_entry.py site/src/content/signals", ] [tasks.check-site-types] diff --git a/README.md b/README.md index 2965ee5a..6221f115 100644 --- a/README.md +++ b/README.md @@ -1,55 +1,87 @@ +
+ # Decodex -Decodex is a mono repo for repo-native agent orchestration and public Codex signal -publishing. +Repo-native agent orchestration and public Codex signal publishing. + +[![License](https://img.shields.io/badge/License-GPLv3-blue.svg)](https://www.gnu.org/licenses/gpl-3.0) +[![Language Checks](https://github.com/hack-ink/decodex/actions/workflows/language.yml/badge.svg?branch=main)](https://github.com/hack-ink/decodex/actions/workflows/language.yml) +[![Release](https://github.com/hack-ink/decodex/actions/workflows/release.yml/badge.svg)](https://github.com/hack-ink/decodex/actions/workflows/release.yml) +[![GitHub tag (latest by date)](https://img.shields.io/github/v/tag/hack-ink/decodex)](https://github.com/hack-ink/decodex/tags) +[![GitHub last commit](https://img.shields.io/github/last-commit/hack-ink/decodex?color=red&style=plastic)](https://github.com/hack-ink/decodex) +[![GitHub code lines](https://tokei.rs/b1/github/hack-ink/decodex)](https://github.com/hack-ink/decodex) + +https://decodex.space + +Decodex logo -The repository has two deliberately separate product surfaces: +
-- a local Rust runtime and operator control plane for retained coding-agent lanes -- a static public site that publishes GitHub-backed Codex change signals +## Feature Highlights -The static site remains the public surface by default. Runtime and operator behavior -does not become a public site backend just because both surfaces now live in one -workspace. +- Rust CLI and runtime for repo-native retained coding-agent lanes. +- Explicit project registry under `~/.codex/decodex/projects//`. +- Local operator listener with a read-only dashboard at `/` and `/dashboard`, plus + `GET /state` for JSON snapshots. +- Static Astro site that publishes GitHub-backed Codex change signals. +- Deterministic GitHub signal pipeline for change bundles, release deltas, rendered + signal entries, and content validation. +- Installable Decodex plugin with reusable agent-facing skills for manual CLI, + automation, commit, land, and labels. +- Repository documentation split by question type into spec, runbook, reference, and + decision lanes. ## Status +Prototype / in active development. + This repository now integrates the former runtime repository and the static signal site -into one Decodex workspace: +into one Decodex workspace. The static site remains the public surface by default. +Runtime and operator behavior does not become a public site backend just because both +surfaces live in one workspace. + +Supported runtime host targets are macOS and Linux. Windows remains unsupported for the +runtime. + +## App identity + +- Product display name: **Decodex**. +- Runtime CLI binary: **decodex**. +- Public site: . +- Lower-case `decodex` remains only for stable technical identifiers such as the + repository slug, Cargo package name, CLI binary, plugin package, config keys, and + schema names. + +## Workspace posture - `apps/decodex/` owns the Rust package that builds the `decodex` CLI and runtime. - `site/` owns the Astro static site and checked-in public content. -- `tools/github/` owns deterministic GitHub bundle, release-delta, render, and +- `scripts/github/` owns deterministic GitHub bundle, release-delta, render, and validation scripts. +- `artifacts/github/` owns checked-in GitHub bundles and editorial analysis drafts. - `plugins/decodex/` owns the installable Decodex plugin and reusable agent-facing skills. +- `dev/skills/` owns repository-development skill-like instructions that are not + packaged with the installable Decodex plugin. - `docs/` remains the authoritative documentation surface. -Supported runtime host targets are macOS and Linux. Windows remains unsupported for the -runtime. +Runtime authority stays in `apps/decodex/src/`, the registered project contracts under +`~/.codex/decodex/projects//`, and the governing specs under `docs/spec/`. +Public site authority stays in `site/`, `scripts/github/`, `artifacts/github/`, and +the site/content specs. + +## Runtime platform support + +- The Decodex runtime contract is Unix-only: macOS and Linux. +- Windows is outside the runtime contract. +- The public site is static and deploys through GitHub Pages. +- Starting `decodex serve` without `--config` loads enabled projects from the explicit + registry only. It does not scan Codex history, repo-local config files, or currently + open worktrees to infer projects. + +## Usage -## Repository Layout - -- `apps/decodex/src/` holds the Decodex runtime, orchestration logic, tracker - integrations, app-server integration, operator HTTP server, and authoritative - implementation behavior. -- `site/` holds the static Astro application and site-owned content collections. -- `tools/github/` holds deterministic public-signal collection and validation tooling. -- `plugins/decodex/` holds the canonical Decodex plugin source. -- `docs/spec/` holds normative runtime, workflow, site, and content contracts. -- `docs/runbook/` holds operator procedures, validation sequences, deployment steps, and - content workflows. -- `docs/reference/` holds current repository and artifact surface maps. -- `docs/decisions/` holds durable design rationale and tradeoffs. -- `docs/research/` holds machine-authored research run artifacts used by shipped - research tooling. -- `docs/plans/` holds historical saved plan artifacts from the static-site bootstrap. -- `scripts/` and `dev/` hold repository-level helpers that are not part of the shipped - runtime binary. -- `decodex.example.toml` is the redacted project-config template; live project - contracts live under `~/.codex/decodex/projects//`. - -## Runtime CLI +### Runtime CLI From the workspace root: @@ -62,22 +94,25 @@ cargo run -p decodex -- run --dry-run cargo run -p decodex -- serve --interval 60s --listen-address 127.0.0.1:8912 ``` -Install the local runtime binary from the package directory: +### Install from Source ```sh +git clone https://github.com/hack-ink/decodex +cd decodex + cargo install --path apps/decodex --force decodex --version ``` +### Project contracts + Project contracts are managed outside checkouts under `~/.codex/decodex/projects//` with fixed filenames: - `project.toml` for service paths and credential environment-variable names - `WORKFLOW.md` for execution policy -Starting `decodex serve` without `--config` loads enabled projects from the explicit -registry only. It does not scan Codex history, repo-local config files, or currently -open worktrees to infer projects. +The redacted template for a project config lives at `decodex.example.toml`. ## Static Site @@ -99,29 +134,28 @@ The public site does not own: - app-server orchestration - the operator dashboard served by `decodex serve` -The static-site boundary is recorded in -[`docs/decisions/static-public-site.md`](docs/decisions/static-public-site.md). GitHub -Pages setup for `https://decodex.space` lives in -[`docs/runbook/github-pages-deploy.md`](docs/runbook/github-pages-deploy.md). +The static-site boundary is recorded in `docs/decisions/static-public-site.md`. GitHub +Pages setup for `https://decodex.space` lives in `docs/runbook/github-pages-deploy.md`. ## GitHub Signal Pipeline The GitHub-first public signal path stays deterministic and reviewable: -- `tools/github/build_change_bundle.py` builds normalized GitHub bundles. -- `plugins/decodex/skills/github-signal/SKILL.md` defines the Codex editorial step. -- `tools/github/sync_latest_signals.py` discovers recent merged PRs and refreshes +- `scripts/github/build_change_bundle.py` builds normalized GitHub bundles under + `artifacts/github/bundles/`. +- `dev/skills/github-signal/SKILL.md` records the repo-local Codex editorial + instructions. It is not part of the installable Decodex plugin distribution. +- `scripts/github/sync_latest_signals.py` discovers recent merged PRs and refreshes content artifacts. -- `tools/github/render_signal_entry.py` renders reviewed analysis drafts into site +- `scripts/github/render_signal_entry.py` renders reviewed analysis drafts into site content. -- `tools/github/validate_signal_entry.py` validates the published signal collection. +- `scripts/github/validate_signal_entry.py` validates the published signal collection. - `.github/workflows/refresh-github-signals.yml` refreshes GitHub-backed signals every hour from a trusted runner. - `.github/workflows/deploy-pages.yml` publishes the Astro site to GitHub Pages on pushes to `main`. -The governing workflow lives in -[`docs/runbook/local-github-signal-workflow.md`](docs/runbook/local-github-signal-workflow.md). +The governing workflow lives at `docs/runbook/local-github-signal-workflow.md`. ## Operator Dashboard @@ -137,7 +171,7 @@ node dev/operator-dashboard-mock.mjs --listen-address 127.0.0.1:57399 --use-code ``` The dashboard semantics and local-vs-external state boundary live in -[`docs/reference/operator-control-plane.md`](docs/reference/operator-control-plane.md). +`docs/reference/operator-control-plane.md`. ## Development @@ -164,17 +198,80 @@ Static-site/content checks are available separately: cargo make decodex-checks ``` +## Workspace Layout + +The tracked workspace currently keeps: + +- `apps/decodex/` as the Rust package that builds the `decodex` CLI and runtime +- `site/` as the Astro static site for the public Decodex signal surface +- `scripts/github/` as the deterministic GitHub collection, normalization, render, and + validation script surface +- `artifacts/github/` as checked-in GitHub bundle and analysis artifacts +- `plugins/decodex/` as the canonical installable Decodex plugin source +- `dev/skills/` as repo-development skill-like instructions that are not packaged with + the installable Decodex plugin +- `docs/spec/` as the normative runtime, workflow, site, and content contract lane +- `docs/runbook/` as the operator procedures, validation sequences, deployment steps, + and content workflow lane +- `docs/reference/` as the current repository and artifact surface map lane +- `docs/decisions/` as the durable design-rationale lane +- `docs/research/` as machine-authored research artifacts used by shipped research + tooling +- `docs/plans/` as historical saved plan artifacts from the static-site bootstrap +- `dev/` as local development helpers outside `dev/skills/`, such as the operator + dashboard mock server +- `assets/` as shared static assets that are not owned by the Astro app's generated + output +- `.github/` as CI, release, Pages deployment, and content-refresh workflows + +Generated or local-only directories such as `target/`, `site/dist/`, `site/.astro/`, +`.worktrees/`, `.workspaces/`, and `.codex/` are not part of the tracked repository +structure. For the authoritative layout and ownership map, read +`docs/reference/workspace-layout.md`. + ## Documentation -- Repository router: [`docs/index.md`](docs/index.md) -- Documentation policy: [`docs/policy.md`](docs/policy.md) -- Specifications: [`docs/spec/index.md`](docs/spec/index.md) -- Operational runbooks: [`docs/runbook/index.md`](docs/runbook/index.md) -- Reference docs: [`docs/reference/index.md`](docs/reference/index.md) -- Design decisions: [`docs/decisions/index.md`](docs/decisions/index.md) -- Workspace layout: [`docs/reference/workspace-layout.md`](docs/reference/workspace-layout.md) -- Static-site decision: [`docs/decisions/static-public-site.md`](docs/decisions/static-public-site.md) +- Product and development overview: this `README.md` +- Unified documentation router: `docs/index.md` +- Normative specs: `docs/spec/index.md` +- Procedural runbooks: `docs/runbook/index.md` +- Current implementation references: `docs/reference/index.md` +- Durable design rationale: `docs/decisions/index.md` +- Documentation policy and placement rules: `docs/policy.md` + +## Support Me + +If you find this project helpful and would like to support its development, you can buy me a coffee! + +Your support is greatly appreciated and motivates me to keep improving this project. + +- **Fiat** + - [Ko-fi](https://ko-fi.com/hack_ink) + - [Afdian](https://afdian.com/a/hack_ink) +- **Crypto** + - **Bitcoin** + - `bc1pedlrf67ss52md29qqkzr2avma6ghyrt4jx9ecp9457qsl75x247sqcp43c` + - **Ethereum** + - `0x3e25247CfF03F99a7D83b28F207112234feE73a6` + - **Polkadot** + - `156HGo9setPcU2qhFMVWLkcmtCEGySLwNqa3DaEiYSWtte4Y` + +Thank you for your support! + +## Appreciation + +We would like to extend our heartfelt gratitude to the following projects and contributors: + +- The Rust community for their continuous support and development of the Rust ecosystem. + +## Additional Acknowledgements + +- TODO + +
+ +### License -## License +Licensed under [GPL-3.0](LICENSE). -Licensed under [GPL-3.0](LICENSE). +
diff --git a/artifacts/github/README.md b/artifacts/github/README.md new file mode 100644 index 00000000..aea86e50 --- /dev/null +++ b/artifacts/github/README.md @@ -0,0 +1,9 @@ +# GitHub Artifacts + +This directory stores checked-in GitHub signal pipeline artifacts. + +- `bundles/` holds normalized `github_change_bundle/v1` inputs. +- `analysis/` holds reviewed Codex editorial analysis drafts. + +Executable automation for these artifacts lives under `scripts/github/`. Repo-local +editorial instructions live under `dev/skills/github-signal/`. diff --git a/tools/github/analysis/openai-codex-pr-12334.analysis.json b/artifacts/github/analysis/openai-codex-pr-12334.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-12334.analysis.json rename to artifacts/github/analysis/openai-codex-pr-12334.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-13494.analysis.json b/artifacts/github/analysis/openai-codex-pr-13494.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-13494.analysis.json rename to artifacts/github/analysis/openai-codex-pr-13494.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-14632.analysis.json b/artifacts/github/analysis/openai-codex-pr-14632.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-14632.analysis.json rename to artifacts/github/analysis/openai-codex-pr-14632.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-14847.analysis.json b/artifacts/github/analysis/openai-codex-pr-14847.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-14847.analysis.json rename to artifacts/github/analysis/openai-codex-pr-14847.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-14867.analysis.json b/artifacts/github/analysis/openai-codex-pr-14867.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-14867.analysis.json rename to artifacts/github/analysis/openai-codex-pr-14867.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-14888.analysis.json b/artifacts/github/analysis/openai-codex-pr-14888.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-14888.analysis.json rename to artifacts/github/analysis/openai-codex-pr-14888.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-14945.analysis.json b/artifacts/github/analysis/openai-codex-pr-14945.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-14945.analysis.json rename to artifacts/github/analysis/openai-codex-pr-14945.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-14970.analysis.json b/artifacts/github/analysis/openai-codex-pr-14970.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-14970.analysis.json rename to artifacts/github/analysis/openai-codex-pr-14970.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-14988.analysis.json b/artifacts/github/analysis/openai-codex-pr-14988.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-14988.analysis.json rename to artifacts/github/analysis/openai-codex-pr-14988.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15011.analysis.json b/artifacts/github/analysis/openai-codex-pr-15011.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15011.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15011.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15021.analysis.json b/artifacts/github/analysis/openai-codex-pr-15021.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15021.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15021.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15041.analysis.json b/artifacts/github/analysis/openai-codex-pr-15041.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15041.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15041.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15042.analysis.json b/artifacts/github/analysis/openai-codex-pr-15042.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15042.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15042.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15056.analysis.json b/artifacts/github/analysis/openai-codex-pr-15056.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15056.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15056.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15072.analysis.json b/artifacts/github/analysis/openai-codex-pr-15072.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15072.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15072.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15075.analysis.json b/artifacts/github/analysis/openai-codex-pr-15075.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15075.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15075.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15076.analysis.json b/artifacts/github/analysis/openai-codex-pr-15076.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15076.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15076.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15077.analysis.json b/artifacts/github/analysis/openai-codex-pr-15077.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15077.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15077.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15088.analysis.json b/artifacts/github/analysis/openai-codex-pr-15088.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15088.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15088.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15089.analysis.json b/artifacts/github/analysis/openai-codex-pr-15089.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15089.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15089.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15090.analysis.json b/artifacts/github/analysis/openai-codex-pr-15090.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15090.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15090.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15092.analysis.json b/artifacts/github/analysis/openai-codex-pr-15092.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15092.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15092.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15100.analysis.json b/artifacts/github/analysis/openai-codex-pr-15100.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15100.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15100.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15102.analysis.json b/artifacts/github/analysis/openai-codex-pr-15102.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15102.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15102.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15103.analysis.json b/artifacts/github/analysis/openai-codex-pr-15103.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15103.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15103.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15104.analysis.json b/artifacts/github/analysis/openai-codex-pr-15104.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15104.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15104.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15111.analysis.json b/artifacts/github/analysis/openai-codex-pr-15111.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15111.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15111.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15118.analysis.json b/artifacts/github/analysis/openai-codex-pr-15118.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15118.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15118.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15119.analysis.json b/artifacts/github/analysis/openai-codex-pr-15119.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15119.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15119.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15125.analysis.json b/artifacts/github/analysis/openai-codex-pr-15125.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15125.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15125.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15150.analysis.json b/artifacts/github/analysis/openai-codex-pr-15150.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15150.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15150.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15154.analysis.json b/artifacts/github/analysis/openai-codex-pr-15154.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15154.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15154.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15163.analysis.json b/artifacts/github/analysis/openai-codex-pr-15163.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15163.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15163.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15175.analysis.json b/artifacts/github/analysis/openai-codex-pr-15175.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15175.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15175.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15180.analysis.json b/artifacts/github/analysis/openai-codex-pr-15180.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15180.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15180.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15185.analysis.json b/artifacts/github/analysis/openai-codex-pr-15185.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15185.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15185.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15190.analysis.json b/artifacts/github/analysis/openai-codex-pr-15190.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15190.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15190.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15195.analysis.json b/artifacts/github/analysis/openai-codex-pr-15195.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15195.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15195.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15196.analysis.json b/artifacts/github/analysis/openai-codex-pr-15196.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15196.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15196.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15198.analysis.json b/artifacts/github/analysis/openai-codex-pr-15198.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15198.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15198.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15199.analysis.json b/artifacts/github/analysis/openai-codex-pr-15199.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15199.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15199.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15201.analysis.json b/artifacts/github/analysis/openai-codex-pr-15201.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15201.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15201.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15203.analysis.json b/artifacts/github/analysis/openai-codex-pr-15203.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15203.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15203.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15206.analysis.json b/artifacts/github/analysis/openai-codex-pr-15206.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15206.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15206.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15207.analysis.json b/artifacts/github/analysis/openai-codex-pr-15207.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15207.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15207.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15215.analysis.json b/artifacts/github/analysis/openai-codex-pr-15215.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15215.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15215.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15216.analysis.json b/artifacts/github/analysis/openai-codex-pr-15216.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15216.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15216.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15217.analysis.json b/artifacts/github/analysis/openai-codex-pr-15217.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15217.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15217.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15220.analysis.json b/artifacts/github/analysis/openai-codex-pr-15220.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15220.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15220.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15222.analysis.json b/artifacts/github/analysis/openai-codex-pr-15222.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15222.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15222.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15223.analysis.json b/artifacts/github/analysis/openai-codex-pr-15223.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15223.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15223.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15232.analysis.json b/artifacts/github/analysis/openai-codex-pr-15232.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15232.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15232.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15233.analysis.json b/artifacts/github/analysis/openai-codex-pr-15233.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15233.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15233.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15252.analysis.json b/artifacts/github/analysis/openai-codex-pr-15252.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15252.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15252.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15253.analysis.json b/artifacts/github/analysis/openai-codex-pr-15253.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15253.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15253.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15254.analysis.json b/artifacts/github/analysis/openai-codex-pr-15254.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15254.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15254.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15259.analysis.json b/artifacts/github/analysis/openai-codex-pr-15259.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15259.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15259.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15262.analysis.json b/artifacts/github/analysis/openai-codex-pr-15262.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15262.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15262.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15263.analysis.json b/artifacts/github/analysis/openai-codex-pr-15263.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15263.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15263.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15264.analysis.json b/artifacts/github/analysis/openai-codex-pr-15264.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15264.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15264.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15275.analysis.json b/artifacts/github/analysis/openai-codex-pr-15275.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15275.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15275.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15279.analysis.json b/artifacts/github/analysis/openai-codex-pr-15279.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15279.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15279.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15348.analysis.json b/artifacts/github/analysis/openai-codex-pr-15348.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15348.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15348.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15376.analysis.json b/artifacts/github/analysis/openai-codex-pr-15376.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15376.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15376.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15390.analysis.json b/artifacts/github/analysis/openai-codex-pr-15390.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15390.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15390.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15409.analysis.json b/artifacts/github/analysis/openai-codex-pr-15409.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15409.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15409.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15414.analysis.json b/artifacts/github/analysis/openai-codex-pr-15414.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15414.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15414.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15443.analysis.json b/artifacts/github/analysis/openai-codex-pr-15443.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15443.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15443.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15659.analysis.json b/artifacts/github/analysis/openai-codex-pr-15659.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15659.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15659.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15759.analysis.json b/artifacts/github/analysis/openai-codex-pr-15759.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15759.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15759.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15785.analysis.json b/artifacts/github/analysis/openai-codex-pr-15785.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15785.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15785.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-15802.analysis.json b/artifacts/github/analysis/openai-codex-pr-15802.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-15802.analysis.json rename to artifacts/github/analysis/openai-codex-pr-15802.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-16010.analysis.json b/artifacts/github/analysis/openai-codex-pr-16010.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-16010.analysis.json rename to artifacts/github/analysis/openai-codex-pr-16010.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-16082.analysis.json b/artifacts/github/analysis/openai-codex-pr-16082.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-16082.analysis.json rename to artifacts/github/analysis/openai-codex-pr-16082.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-16153.analysis.json b/artifacts/github/analysis/openai-codex-pr-16153.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-16153.analysis.json rename to artifacts/github/analysis/openai-codex-pr-16153.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-16204.analysis.json b/artifacts/github/analysis/openai-codex-pr-16204.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-16204.analysis.json rename to artifacts/github/analysis/openai-codex-pr-16204.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-16508.analysis.json b/artifacts/github/analysis/openai-codex-pr-16508.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-16508.analysis.json rename to artifacts/github/analysis/openai-codex-pr-16508.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-16631.analysis.json b/artifacts/github/analysis/openai-codex-pr-16631.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-16631.analysis.json rename to artifacts/github/analysis/openai-codex-pr-16631.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-16633.analysis.json b/artifacts/github/analysis/openai-codex-pr-16633.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-16633.analysis.json rename to artifacts/github/analysis/openai-codex-pr-16633.analysis.json diff --git a/tools/github/analysis/openai-codex-pr-16946.analysis.json b/artifacts/github/analysis/openai-codex-pr-16946.analysis.json similarity index 100% rename from tools/github/analysis/openai-codex-pr-16946.analysis.json rename to artifacts/github/analysis/openai-codex-pr-16946.analysis.json diff --git a/tools/github/bundles/openai-codex-pr-12334.json b/artifacts/github/bundles/openai-codex-pr-12334.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-12334.json rename to artifacts/github/bundles/openai-codex-pr-12334.json diff --git a/tools/github/bundles/openai-codex-pr-13494.json b/artifacts/github/bundles/openai-codex-pr-13494.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-13494.json rename to artifacts/github/bundles/openai-codex-pr-13494.json diff --git a/tools/github/bundles/openai-codex-pr-14632.json b/artifacts/github/bundles/openai-codex-pr-14632.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-14632.json rename to artifacts/github/bundles/openai-codex-pr-14632.json diff --git a/tools/github/bundles/openai-codex-pr-14847.json b/artifacts/github/bundles/openai-codex-pr-14847.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-14847.json rename to artifacts/github/bundles/openai-codex-pr-14847.json diff --git a/tools/github/bundles/openai-codex-pr-14867.json b/artifacts/github/bundles/openai-codex-pr-14867.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-14867.json rename to artifacts/github/bundles/openai-codex-pr-14867.json diff --git a/tools/github/bundles/openai-codex-pr-14888.json b/artifacts/github/bundles/openai-codex-pr-14888.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-14888.json rename to artifacts/github/bundles/openai-codex-pr-14888.json diff --git a/tools/github/bundles/openai-codex-pr-14945.json b/artifacts/github/bundles/openai-codex-pr-14945.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-14945.json rename to artifacts/github/bundles/openai-codex-pr-14945.json diff --git a/tools/github/bundles/openai-codex-pr-14970.json b/artifacts/github/bundles/openai-codex-pr-14970.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-14970.json rename to artifacts/github/bundles/openai-codex-pr-14970.json diff --git a/tools/github/bundles/openai-codex-pr-14988.json b/artifacts/github/bundles/openai-codex-pr-14988.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-14988.json rename to artifacts/github/bundles/openai-codex-pr-14988.json diff --git a/tools/github/bundles/openai-codex-pr-15011.json b/artifacts/github/bundles/openai-codex-pr-15011.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15011.json rename to artifacts/github/bundles/openai-codex-pr-15011.json diff --git a/tools/github/bundles/openai-codex-pr-15021.json b/artifacts/github/bundles/openai-codex-pr-15021.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15021.json rename to artifacts/github/bundles/openai-codex-pr-15021.json diff --git a/tools/github/bundles/openai-codex-pr-15041.json b/artifacts/github/bundles/openai-codex-pr-15041.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15041.json rename to artifacts/github/bundles/openai-codex-pr-15041.json diff --git a/tools/github/bundles/openai-codex-pr-15042.json b/artifacts/github/bundles/openai-codex-pr-15042.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15042.json rename to artifacts/github/bundles/openai-codex-pr-15042.json diff --git a/tools/github/bundles/openai-codex-pr-15056.json b/artifacts/github/bundles/openai-codex-pr-15056.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15056.json rename to artifacts/github/bundles/openai-codex-pr-15056.json diff --git a/tools/github/bundles/openai-codex-pr-15072.json b/artifacts/github/bundles/openai-codex-pr-15072.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15072.json rename to artifacts/github/bundles/openai-codex-pr-15072.json diff --git a/tools/github/bundles/openai-codex-pr-15075.json b/artifacts/github/bundles/openai-codex-pr-15075.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15075.json rename to artifacts/github/bundles/openai-codex-pr-15075.json diff --git a/tools/github/bundles/openai-codex-pr-15076.json b/artifacts/github/bundles/openai-codex-pr-15076.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15076.json rename to artifacts/github/bundles/openai-codex-pr-15076.json diff --git a/tools/github/bundles/openai-codex-pr-15077.json b/artifacts/github/bundles/openai-codex-pr-15077.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15077.json rename to artifacts/github/bundles/openai-codex-pr-15077.json diff --git a/tools/github/bundles/openai-codex-pr-15088.json b/artifacts/github/bundles/openai-codex-pr-15088.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15088.json rename to artifacts/github/bundles/openai-codex-pr-15088.json diff --git a/tools/github/bundles/openai-codex-pr-15089.json b/artifacts/github/bundles/openai-codex-pr-15089.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15089.json rename to artifacts/github/bundles/openai-codex-pr-15089.json diff --git a/tools/github/bundles/openai-codex-pr-15090.json b/artifacts/github/bundles/openai-codex-pr-15090.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15090.json rename to artifacts/github/bundles/openai-codex-pr-15090.json diff --git a/tools/github/bundles/openai-codex-pr-15092.json b/artifacts/github/bundles/openai-codex-pr-15092.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15092.json rename to artifacts/github/bundles/openai-codex-pr-15092.json diff --git a/tools/github/bundles/openai-codex-pr-15100.json b/artifacts/github/bundles/openai-codex-pr-15100.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15100.json rename to artifacts/github/bundles/openai-codex-pr-15100.json diff --git a/tools/github/bundles/openai-codex-pr-15102.json b/artifacts/github/bundles/openai-codex-pr-15102.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15102.json rename to artifacts/github/bundles/openai-codex-pr-15102.json diff --git a/tools/github/bundles/openai-codex-pr-15103.json b/artifacts/github/bundles/openai-codex-pr-15103.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15103.json rename to artifacts/github/bundles/openai-codex-pr-15103.json diff --git a/tools/github/bundles/openai-codex-pr-15104.json b/artifacts/github/bundles/openai-codex-pr-15104.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15104.json rename to artifacts/github/bundles/openai-codex-pr-15104.json diff --git a/tools/github/bundles/openai-codex-pr-15111.json b/artifacts/github/bundles/openai-codex-pr-15111.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15111.json rename to artifacts/github/bundles/openai-codex-pr-15111.json diff --git a/tools/github/bundles/openai-codex-pr-15118.json b/artifacts/github/bundles/openai-codex-pr-15118.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15118.json rename to artifacts/github/bundles/openai-codex-pr-15118.json diff --git a/tools/github/bundles/openai-codex-pr-15119.json b/artifacts/github/bundles/openai-codex-pr-15119.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15119.json rename to artifacts/github/bundles/openai-codex-pr-15119.json diff --git a/tools/github/bundles/openai-codex-pr-15125.json b/artifacts/github/bundles/openai-codex-pr-15125.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15125.json rename to artifacts/github/bundles/openai-codex-pr-15125.json diff --git a/tools/github/bundles/openai-codex-pr-15150.json b/artifacts/github/bundles/openai-codex-pr-15150.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15150.json rename to artifacts/github/bundles/openai-codex-pr-15150.json diff --git a/tools/github/bundles/openai-codex-pr-15154.json b/artifacts/github/bundles/openai-codex-pr-15154.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15154.json rename to artifacts/github/bundles/openai-codex-pr-15154.json diff --git a/tools/github/bundles/openai-codex-pr-15163.json b/artifacts/github/bundles/openai-codex-pr-15163.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15163.json rename to artifacts/github/bundles/openai-codex-pr-15163.json diff --git a/tools/github/bundles/openai-codex-pr-15175.json b/artifacts/github/bundles/openai-codex-pr-15175.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15175.json rename to artifacts/github/bundles/openai-codex-pr-15175.json diff --git a/tools/github/bundles/openai-codex-pr-15180.json b/artifacts/github/bundles/openai-codex-pr-15180.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15180.json rename to artifacts/github/bundles/openai-codex-pr-15180.json diff --git a/tools/github/bundles/openai-codex-pr-15185.json b/artifacts/github/bundles/openai-codex-pr-15185.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15185.json rename to artifacts/github/bundles/openai-codex-pr-15185.json diff --git a/tools/github/bundles/openai-codex-pr-15190.json b/artifacts/github/bundles/openai-codex-pr-15190.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15190.json rename to artifacts/github/bundles/openai-codex-pr-15190.json diff --git a/tools/github/bundles/openai-codex-pr-15195.json b/artifacts/github/bundles/openai-codex-pr-15195.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15195.json rename to artifacts/github/bundles/openai-codex-pr-15195.json diff --git a/tools/github/bundles/openai-codex-pr-15196.json b/artifacts/github/bundles/openai-codex-pr-15196.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15196.json rename to artifacts/github/bundles/openai-codex-pr-15196.json diff --git a/tools/github/bundles/openai-codex-pr-15198.json b/artifacts/github/bundles/openai-codex-pr-15198.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15198.json rename to artifacts/github/bundles/openai-codex-pr-15198.json diff --git a/tools/github/bundles/openai-codex-pr-15199.json b/artifacts/github/bundles/openai-codex-pr-15199.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15199.json rename to artifacts/github/bundles/openai-codex-pr-15199.json diff --git a/tools/github/bundles/openai-codex-pr-15201.json b/artifacts/github/bundles/openai-codex-pr-15201.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15201.json rename to artifacts/github/bundles/openai-codex-pr-15201.json diff --git a/tools/github/bundles/openai-codex-pr-15203.json b/artifacts/github/bundles/openai-codex-pr-15203.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15203.json rename to artifacts/github/bundles/openai-codex-pr-15203.json diff --git a/tools/github/bundles/openai-codex-pr-15206.json b/artifacts/github/bundles/openai-codex-pr-15206.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15206.json rename to artifacts/github/bundles/openai-codex-pr-15206.json diff --git a/tools/github/bundles/openai-codex-pr-15207.json b/artifacts/github/bundles/openai-codex-pr-15207.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15207.json rename to artifacts/github/bundles/openai-codex-pr-15207.json diff --git a/tools/github/bundles/openai-codex-pr-15215.json b/artifacts/github/bundles/openai-codex-pr-15215.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15215.json rename to artifacts/github/bundles/openai-codex-pr-15215.json diff --git a/tools/github/bundles/openai-codex-pr-15216.json b/artifacts/github/bundles/openai-codex-pr-15216.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15216.json rename to artifacts/github/bundles/openai-codex-pr-15216.json diff --git a/tools/github/bundles/openai-codex-pr-15217.json b/artifacts/github/bundles/openai-codex-pr-15217.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15217.json rename to artifacts/github/bundles/openai-codex-pr-15217.json diff --git a/tools/github/bundles/openai-codex-pr-15220.json b/artifacts/github/bundles/openai-codex-pr-15220.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15220.json rename to artifacts/github/bundles/openai-codex-pr-15220.json diff --git a/tools/github/bundles/openai-codex-pr-15222.json b/artifacts/github/bundles/openai-codex-pr-15222.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15222.json rename to artifacts/github/bundles/openai-codex-pr-15222.json diff --git a/tools/github/bundles/openai-codex-pr-15223.json b/artifacts/github/bundles/openai-codex-pr-15223.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15223.json rename to artifacts/github/bundles/openai-codex-pr-15223.json diff --git a/tools/github/bundles/openai-codex-pr-15232.json b/artifacts/github/bundles/openai-codex-pr-15232.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15232.json rename to artifacts/github/bundles/openai-codex-pr-15232.json diff --git a/tools/github/bundles/openai-codex-pr-15233.json b/artifacts/github/bundles/openai-codex-pr-15233.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15233.json rename to artifacts/github/bundles/openai-codex-pr-15233.json diff --git a/tools/github/bundles/openai-codex-pr-15252.json b/artifacts/github/bundles/openai-codex-pr-15252.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15252.json rename to artifacts/github/bundles/openai-codex-pr-15252.json diff --git a/tools/github/bundles/openai-codex-pr-15253.json b/artifacts/github/bundles/openai-codex-pr-15253.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15253.json rename to artifacts/github/bundles/openai-codex-pr-15253.json diff --git a/tools/github/bundles/openai-codex-pr-15254.json b/artifacts/github/bundles/openai-codex-pr-15254.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15254.json rename to artifacts/github/bundles/openai-codex-pr-15254.json diff --git a/tools/github/bundles/openai-codex-pr-15259.json b/artifacts/github/bundles/openai-codex-pr-15259.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15259.json rename to artifacts/github/bundles/openai-codex-pr-15259.json diff --git a/tools/github/bundles/openai-codex-pr-15262.json b/artifacts/github/bundles/openai-codex-pr-15262.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15262.json rename to artifacts/github/bundles/openai-codex-pr-15262.json diff --git a/tools/github/bundles/openai-codex-pr-15263.json b/artifacts/github/bundles/openai-codex-pr-15263.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15263.json rename to artifacts/github/bundles/openai-codex-pr-15263.json diff --git a/tools/github/bundles/openai-codex-pr-15264.json b/artifacts/github/bundles/openai-codex-pr-15264.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15264.json rename to artifacts/github/bundles/openai-codex-pr-15264.json diff --git a/tools/github/bundles/openai-codex-pr-15275.json b/artifacts/github/bundles/openai-codex-pr-15275.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15275.json rename to artifacts/github/bundles/openai-codex-pr-15275.json diff --git a/tools/github/bundles/openai-codex-pr-15279.json b/artifacts/github/bundles/openai-codex-pr-15279.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15279.json rename to artifacts/github/bundles/openai-codex-pr-15279.json diff --git a/tools/github/bundles/openai-codex-pr-15348.json b/artifacts/github/bundles/openai-codex-pr-15348.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15348.json rename to artifacts/github/bundles/openai-codex-pr-15348.json diff --git a/tools/github/bundles/openai-codex-pr-15376.json b/artifacts/github/bundles/openai-codex-pr-15376.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15376.json rename to artifacts/github/bundles/openai-codex-pr-15376.json diff --git a/tools/github/bundles/openai-codex-pr-15390.json b/artifacts/github/bundles/openai-codex-pr-15390.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15390.json rename to artifacts/github/bundles/openai-codex-pr-15390.json diff --git a/tools/github/bundles/openai-codex-pr-15409.json b/artifacts/github/bundles/openai-codex-pr-15409.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15409.json rename to artifacts/github/bundles/openai-codex-pr-15409.json diff --git a/tools/github/bundles/openai-codex-pr-15414.json b/artifacts/github/bundles/openai-codex-pr-15414.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15414.json rename to artifacts/github/bundles/openai-codex-pr-15414.json diff --git a/tools/github/bundles/openai-codex-pr-15443.json b/artifacts/github/bundles/openai-codex-pr-15443.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15443.json rename to artifacts/github/bundles/openai-codex-pr-15443.json diff --git a/tools/github/bundles/openai-codex-pr-15659.json b/artifacts/github/bundles/openai-codex-pr-15659.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15659.json rename to artifacts/github/bundles/openai-codex-pr-15659.json diff --git a/tools/github/bundles/openai-codex-pr-15759.json b/artifacts/github/bundles/openai-codex-pr-15759.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15759.json rename to artifacts/github/bundles/openai-codex-pr-15759.json diff --git a/tools/github/bundles/openai-codex-pr-15785.json b/artifacts/github/bundles/openai-codex-pr-15785.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15785.json rename to artifacts/github/bundles/openai-codex-pr-15785.json diff --git a/tools/github/bundles/openai-codex-pr-15802.json b/artifacts/github/bundles/openai-codex-pr-15802.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-15802.json rename to artifacts/github/bundles/openai-codex-pr-15802.json diff --git a/tools/github/bundles/openai-codex-pr-16010.json b/artifacts/github/bundles/openai-codex-pr-16010.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-16010.json rename to artifacts/github/bundles/openai-codex-pr-16010.json diff --git a/tools/github/bundles/openai-codex-pr-16082.json b/artifacts/github/bundles/openai-codex-pr-16082.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-16082.json rename to artifacts/github/bundles/openai-codex-pr-16082.json diff --git a/tools/github/bundles/openai-codex-pr-16153.json b/artifacts/github/bundles/openai-codex-pr-16153.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-16153.json rename to artifacts/github/bundles/openai-codex-pr-16153.json diff --git a/tools/github/bundles/openai-codex-pr-16204.json b/artifacts/github/bundles/openai-codex-pr-16204.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-16204.json rename to artifacts/github/bundles/openai-codex-pr-16204.json diff --git a/tools/github/bundles/openai-codex-pr-16508.json b/artifacts/github/bundles/openai-codex-pr-16508.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-16508.json rename to artifacts/github/bundles/openai-codex-pr-16508.json diff --git a/tools/github/bundles/openai-codex-pr-16631.json b/artifacts/github/bundles/openai-codex-pr-16631.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-16631.json rename to artifacts/github/bundles/openai-codex-pr-16631.json diff --git a/tools/github/bundles/openai-codex-pr-16633.json b/artifacts/github/bundles/openai-codex-pr-16633.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-16633.json rename to artifacts/github/bundles/openai-codex-pr-16633.json diff --git a/tools/github/bundles/openai-codex-pr-16946.json b/artifacts/github/bundles/openai-codex-pr-16946.json similarity index 100% rename from tools/github/bundles/openai-codex-pr-16946.json rename to artifacts/github/bundles/openai-codex-pr-16946.json diff --git a/plugins/decodex/skills/github-signal/SKILL.md b/dev/skills/github-signal/SKILL.md similarity index 84% rename from plugins/decodex/skills/github-signal/SKILL.md rename to dev/skills/github-signal/SKILL.md index 0b35dc0c..cd8d29ec 100644 --- a/plugins/decodex/skills/github-signal/SKILL.md +++ b/dev/skills/github-signal/SKILL.md @@ -1,11 +1,14 @@ --- name: github-signal -description: Use when turning a normalized GitHub bundle under `tools/github/bundles/` into a Decodex signal draft, especially for requests to analyze a PR-first bundle, decide if a change is signal-worthy, or write/update the local editorial analysis JSON that feeds `tools/github/render_signal_entry.py`. +description: Use when turning a normalized GitHub bundle under `artifacts/github/bundles/` into a Decodex signal draft, especially for requests to analyze a PR-first bundle, decide if a change is signal-worthy, or write/update the local editorial analysis JSON that feeds `scripts/github/render_signal_entry.py`. --- # Decodex GitHub Signal Use this skill for the local editorial step in the GitHub-first Decodex workflow. +This is a Decodex repository-development instruction surface, not a complete +user-facing plugin skill, and it must not be packaged with the installable Decodex +plugin. This skill does not replace the deterministic scripts. It tells Codex how to read a bundle, decide whether it deserves publication, and draft the analysis JSON that the @@ -19,8 +22,8 @@ repo already renders into a final `signal_entry/v1`. ## Inputs -- A normalized bundle JSON under `tools/github/bundles/` -- An output path under `tools/github/analysis/` +- A normalized bundle JSON under `artifacts/github/bundles/` +- An output path under `artifacts/github/analysis/` ## Boundaries @@ -119,7 +122,7 @@ Write a JSON analysis draft with these fields: 1. Validate the bundle first. 2. Read `primary_pr.title`, `primary_pr.body`, `files`, and `commits`. 3. Decide whether the change is signal-worthy. -4. Draft the editorial JSON under `tools/github/analysis/`. +4. Draft the editorial JSON under `artifacts/github/analysis/`. 5. Render the final signal entry with the repo script. 6. Validate the published signal collection and site build. @@ -128,22 +131,22 @@ Write a JSON analysis draft with these fields: Validate a bundle: ```bash -python3 tools/github/validate_change_bundle.py tools/github/bundles/.json +python3 scripts/github/validate_change_bundle.py artifacts/github/bundles/.json ``` Render the final signal entry after drafting: ```bash -python3 tools/github/render_signal_entry.py \ - --bundle tools/github/bundles/.json \ - --analysis tools/github/analysis/.analysis.json \ +python3 scripts/github/render_signal_entry.py \ + --bundle artifacts/github/bundles/.json \ + --analysis artifacts/github/analysis/.analysis.json \ --out site/src/content/signals/.json ``` Validate the published output: ```bash -python3 tools/github/validate_signal_entry.py site/src/content/signals +python3 scripts/github/validate_signal_entry.py site/src/content/signals npm run build --prefix site npm run check --prefix site ``` diff --git a/plugins/decodex/skills/github-signal/agents/openai.yaml b/dev/skills/github-signal/agents/openai.yaml similarity index 53% rename from plugins/decodex/skills/github-signal/agents/openai.yaml rename to dev/skills/github-signal/agents/openai.yaml index b9e1ca8c..1ca79fa3 100644 --- a/plugins/decodex/skills/github-signal/agents/openai.yaml +++ b/dev/skills/github-signal/agents/openai.yaml @@ -1,7 +1,7 @@ interface: display_name: "Decodex GitHub Signal" short_description: "Draft GitHub-backed Decodex signal analysis." - default_prompt: "Use $decodex:github-signal to turn a GitHub bundle into a Decodex signal draft." + default_prompt: "Use the repo-local instructions at dev/skills/github-signal/SKILL.md to turn a GitHub bundle into a Decodex signal draft." policy: allow_implicit_invocation: false diff --git a/docs/decisions/static-public-site.md b/docs/decisions/static-public-site.md index 1c17be29..3808507e 100644 --- a/docs/decisions/static-public-site.md +++ b/docs/decisions/static-public-site.md @@ -17,8 +17,9 @@ Consequences: - Public content remains diffable, reviewable, cacheable, and deployable through GitHub Pages without a live Decodex daemon. -- `tools/github/` remains the content-generation boundary for public signals and - release deltas. +- `scripts/github/` remains the content-generation script boundary for public signals + and release deltas, with checked-in GitHub bundles and editorial analysis drafts + under `artifacts/github/`. - `apps/decodex/` can evolve the runtime without turning the public website into an operational dependency. - Dynamic public capabilities such as login, personalized feeds, live queries, or diff --git a/docs/index.md b/docs/index.md index ab50daa3..fc86a977 100644 --- a/docs/index.md +++ b/docs/index.md @@ -41,7 +41,7 @@ The split below is by question type, not by human-versus-agent audience. - Need the raw machine-authored research run artifacts used by shipped research tooling -> `docs/research/` - Need reusable agent-facing Decodex usage instructions -> `plugins/decodex/` -- Need the GitHub signal editorial workflow -> `plugins/decodex/skills/github-signal/` +- Need the repo-local GitHub signal editorial workflow -> `dev/skills/github-signal/` plus `docs/runbook/local-github-signal-workflow.md` - Need repository execution defaults or tracker-state policy -> registered project `WORKFLOW.md` diff --git a/docs/reference/workspace-layout.md b/docs/reference/workspace-layout.md index e8a9902c..02424b4a 100644 --- a/docs/reference/workspace-layout.md +++ b/docs/reference/workspace-layout.md @@ -18,16 +18,18 @@ should not be treated as repository source. | --- | --- | | `apps/decodex/` | Rust package that builds the `decodex` CLI and runtime. Runtime, orchestration, tracker integration, app-server integration, operator HTTP, and local control-plane behavior live under `apps/decodex/src/`. | | `site/` | Astro static site for the public Decodex signal surface. It renders checked-in content and generated JSON from `site/src/content/`; it is not backed by a live Decodex daemon. | -| `tools/github/` | Deterministic GitHub collection, normalization, render, and validation scripts for public signal content. | -| `plugins/decodex/` | Canonical installable Decodex plugin source and reusable agent-facing skills, including manual CLI, automation, commit, land, labels, and GitHub signal drafting. | +| `scripts/github/` | Deterministic GitHub collection, normalization, render, validation, and sync scripts for public signal content. | +| `scripts/config/` | Repository automation scripts for config-derived artifacts. | +| `artifacts/github/` | Checked-in GitHub change bundles and editorial analysis drafts used by the public signal pipeline. | +| `dev/skills/` | Repository-development skill-like instructions that are not part of installable plugin distribution. | +| `plugins/decodex/` | Canonical installable Decodex plugin source and reusable agent-facing skills, including manual CLI, automation, commit, land, and labels. | | `docs/spec/` | Normative runtime, workflow, site, and content contracts. | | `docs/runbook/` | Operator procedures, validation sequences, deployment steps, and content workflows. | | `docs/reference/` | Current repository and artifact surface maps. | | `docs/decisions/` | Durable rationale for repository-level design choices. | | `docs/research/` | Machine-authored research run artifacts used by shipped research tooling. | | `docs/plans/` | Historical saved plan artifacts from the static-site bootstrap. These are not primary authority. | -| `scripts/` | Repository-level helper scripts that are not part of the Rust runtime binary. | -| `dev/` | Local development helpers such as the operator dashboard mock server. | +| `dev/` | Local development helpers outside `dev/skills/`, such as the operator dashboard mock server. | | `assets/` | Shared static assets that are not owned by the Astro app's generated output. | | `.github/` | CI, release, Pages deployment, and content-refresh workflows. | | `Makefile.toml` | Repo-native task names and automation entrypoints. | @@ -71,9 +73,11 @@ Those runtime and operator surfaces stay in `apps/decodex/` and `docs/spec/`. ## GitHub signal tooling -`tools/github/` owns deterministic content tooling. It may call Codex for the editorial -drafting step through the plugin skill at `plugins/decodex/skills/github-signal/`, but -the scripts must keep generated artifacts explicit and checked into the repository. +`scripts/github/` owns deterministic content scripts. It may call Codex for the +editorial drafting step through the repo-local instructions at +`dev/skills/github-signal/`, but that surface is not part of the installable Decodex +plugin distribution. Generated GitHub bundles and analysis drafts live under +`artifacts/github/` and must stay explicit and checked into the repository. ## Installable Codex surface @@ -110,7 +114,8 @@ tracker routing, and policy. - Runtime authority stays in `apps/decodex/src/`, the registered project contract under `~/.codex/decodex/projects//`, and the governing specs under `docs/spec/`. -- Public site authority stays in `site/`, `tools/github/`, and the site/content specs. +- Public site authority stays in `site/`, `scripts/github/`, `artifacts/github/`, and + the site/content specs. - Reusable agent-facing Decodex usage instructions live under `plugins/decodex/`. - `docs/runbook/`, `docs/reference/`, and `docs/decisions/` must not override runtime or workflow authority. diff --git a/docs/runbook/local-github-signal-workflow.md b/docs/runbook/local-github-signal-workflow.md index bb678088..dd6b5fdc 100644 --- a/docs/runbook/local-github-signal-workflow.md +++ b/docs/runbook/local-github-signal-workflow.md @@ -25,9 +25,9 @@ Outputs: ## Workflow -1. Build a normalized GitHub change bundle under `tools/github/bundles/`. +1. Build a normalized GitHub change bundle under `artifacts/github/bundles/`. 2. Review the bundle and decide whether the change is signal-worthy. -3. Run Codex analysis against the bundle with `plugins/decodex/skills/github-signal/` and save the editorial draft JSON. +3. Run Codex analysis against the bundle with the repo-local instructions at `dev/skills/github-signal/` and save the editorial draft JSON under `artifacts/github/analysis/`. 4. Render the resulting signal entry into `site/src/content/signals/`. 5. Validate the signal entry shape and collection consistency. 6. Regenerate the release-delta artifact so the homepage compares the latest stable release to the latest prerelease using the updated signal set. @@ -39,33 +39,33 @@ Outputs: Build a PR-first bundle: ```bash -python3 tools/github/build_change_bundle.py \ +python3 scripts/github/build_change_bundle.py \ --repo openai/codex \ --pr 15222 \ - --out tools/github/bundles/openai-codex-pr-15222.json + --out artifacts/github/bundles/openai-codex-pr-15222.json ``` Validate the bundle: ```bash -python3 tools/github/validate_change_bundle.py \ - tools/github/bundles/openai-codex-pr-15222.json +python3 scripts/github/validate_change_bundle.py \ + artifacts/github/bundles/openai-codex-pr-15222.json ``` Render a final signal entry from the reviewed bundle plus the local editorial draft: ```bash -python3 tools/github/render_signal_entry.py \ - --bundle tools/github/bundles/openai-codex-pr-15222.json \ - --analysis tools/github/analysis/openai-codex-pr-15222.analysis.json \ +python3 scripts/github/render_signal_entry.py \ + --bundle artifacts/github/bundles/openai-codex-pr-15222.json \ + --analysis artifacts/github/analysis/openai-codex-pr-15222.analysis.json \ --out site/src/content/signals/openai-codex-pr-15222.json ``` Validate the published signal entries and the site collection: ```bash -python3 tools/github/validate_signal_entry.py site/src/content/signals +python3 scripts/github/validate_signal_entry.py site/src/content/signals npm run build --prefix site npm run check --prefix site cargo make decodex-checks @@ -74,7 +74,7 @@ cargo make decodex-checks Build the homepage release-delta artifact: ```bash -python3 tools/github/build_release_delta.py \ +python3 scripts/github/build_release_delta.py \ --repo openai/codex \ --signals-dir site/src/content/signals \ --out site/src/content/release-deltas/openai-codex-latest.json @@ -82,17 +82,20 @@ python3 tools/github/build_release_delta.py \ The repository already includes a real sample for this flow: -- bundle: `tools/github/bundles/openai-codex-pr-15222.json` -- editorial draft: `tools/github/analysis/openai-codex-pr-15222.analysis.json` +- bundle: `artifacts/github/bundles/openai-codex-pr-15222.json` +- editorial draft: `artifacts/github/analysis/openai-codex-pr-15222.analysis.json` - rendered signal: `site/src/content/signals/openai-codex-pr-15222.json` -Repo-local skill entrypoint: +Repo-local editorial instruction entrypoint: -- `plugins/decodex/skills/github-signal/SKILL.md` +- `dev/skills/github-signal/SKILL.md` + +This entrypoint is for Decodex repository development only. It is incomplete as a +general user-facing skill and must not be packaged with the installable Decodex plugin. Automated hourly sync entrypoint: -- `tools/github/sync_latest_signals.py` +- `scripts/github/sync_latest_signals.py` ## Editorial gate diff --git a/scripts/README.md b/scripts/README.md new file mode 100644 index 00000000..4faf79cc --- /dev/null +++ b/scripts/README.md @@ -0,0 +1,10 @@ +# Scripts Root + +This directory contains executable repository automation. + +- `scripts/github/` owns deterministic GitHub signal, release-delta, render, sync, and + validation scripts. +- `scripts/config/` owns config-derived artifact synchronization scripts. + +Checked-in data produced or consumed by scripts belongs outside this directory. GitHub +signal bundles and analysis drafts live under `artifacts/github/`. diff --git a/tools/config/sync_codex_config_schema.py b/scripts/config/sync_codex_config_schema.py similarity index 100% rename from tools/config/sync_codex_config_schema.py rename to scripts/config/sync_codex_config_schema.py diff --git a/tools/github/README.md b/scripts/github/README.md similarity index 65% rename from tools/github/README.md rename to scripts/github/README.md index c78fc3b5..a55975a7 100644 --- a/tools/github/README.md +++ b/scripts/github/README.md @@ -1,6 +1,6 @@ -# GitHub Tooling +# GitHub Scripts -This directory owns the deterministic GitHub-first Decodex pipeline. +This directory owns deterministic GitHub-first Decodex scripts. Current scripts: @@ -19,17 +19,17 @@ Contract ownership: Example flow: ```bash -python3 tools/github/build_change_bundle.py \ +python3 scripts/github/build_change_bundle.py \ --repo openai/codex \ --pr 15222 \ - --out tools/github/bundles/openai-codex-pr-15222.json + --out artifacts/github/bundles/openai-codex-pr-15222.json -python3 tools/github/render_signal_entry.py \ - --bundle tools/github/bundles/openai-codex-pr-15222.json \ - --analysis tools/github/analysis/openai-codex-pr-15222.analysis.json \ +python3 scripts/github/render_signal_entry.py \ + --bundle artifacts/github/bundles/openai-codex-pr-15222.json \ + --analysis artifacts/github/analysis/openai-codex-pr-15222.analysis.json \ --out site/src/content/signals/openai-codex-pr-15222.json -python3 tools/github/validate_signal_entry.py \ +python3 scripts/github/validate_signal_entry.py \ site/src/content/signals/openai-codex-pr-15222.json ``` diff --git a/tools/github/analysis_draft.schema.json b/scripts/github/analysis_draft.schema.json similarity index 100% rename from tools/github/analysis_draft.schema.json rename to scripts/github/analysis_draft.schema.json diff --git a/tools/github/backfill_release_range.py b/scripts/github/backfill_release_range.py similarity index 97% rename from tools/github/backfill_release_range.py rename to scripts/github/backfill_release_range.py index f4f7e30a..bff7ba1f 100644 --- a/tools/github/backfill_release_range.py +++ b/scripts/github/backfill_release_range.py @@ -30,8 +30,8 @@ def parse_args() -> argparse.Namespace: parser.add_argument("--stable-tag", required=True, help="Stable tag name to backfill from.") parser.add_argument("--preview-tag", help="Preview tag name to backfill to. Defaults to the top-level prerelease.") parser.add_argument("--signals-dir", default="site/src/content/signals") - parser.add_argument("--bundles-dir", default="tools/github/bundles") - parser.add_argument("--analysis-dir", default="tools/github/analysis") + parser.add_argument("--bundles-dir", default="artifacts/github/bundles") + parser.add_argument("--analysis-dir", default="artifacts/github/analysis") parser.add_argument("--token-env", help="Environment variable containing a GitHub token.") parser.add_argument("--codex-bin", default="codex", help="Codex executable to invoke.") parser.add_argument("--model", help="Optional Codex model override.") diff --git a/tools/github/build_change_bundle.py b/scripts/github/build_change_bundle.py similarity index 100% rename from tools/github/build_change_bundle.py rename to scripts/github/build_change_bundle.py diff --git a/tools/github/build_release_delta.py b/scripts/github/build_release_delta.py similarity index 100% rename from tools/github/build_release_delta.py rename to scripts/github/build_release_delta.py diff --git a/tools/github/contracts.py b/scripts/github/contracts.py similarity index 100% rename from tools/github/contracts.py rename to scripts/github/contracts.py diff --git a/tools/github/render_signal_entry.py b/scripts/github/render_signal_entry.py similarity index 100% rename from tools/github/render_signal_entry.py rename to scripts/github/render_signal_entry.py diff --git a/tools/github/run_codex_analysis.py b/scripts/github/run_codex_analysis.py similarity index 94% rename from tools/github/run_codex_analysis.py rename to scripts/github/run_codex_analysis.py index 1b49fdcc..3f5ce417 100644 --- a/tools/github/run_codex_analysis.py +++ b/scripts/github/run_codex_analysis.py @@ -29,10 +29,11 @@ def parse_args() -> argparse.Namespace: def repo_root_from(bundle_path: Path) -> Path: - root = bundle_path.resolve().parents[2] - if not (root / "plugins" / "decodex" / "skills" / "github-signal" / "SKILL.md").exists(): - raise SystemExit(f"Unable to resolve repo root from {bundle_path}") - return root + resolved = bundle_path.resolve() + for root in resolved.parents: + if (root / "dev" / "skills" / "github-signal" / "SKILL.md").exists(): + return root + raise SystemExit(f"Unable to resolve repo root from {bundle_path}") def build_prompt(bundle_path: Path, repo_root: Path) -> str: @@ -40,7 +41,7 @@ def build_prompt(bundle_path: Path, repo_root: Path) -> str: return "\n".join( [ "Read and follow these repo-local instructions before drafting:", - "- plugins/decodex/skills/github-signal/SKILL.md", + "- dev/skills/github-signal/SKILL.md", "- docs/spec/github-change-bundle.md", "- docs/spec/signal-entry.md", "- docs/runbook/local-github-signal-workflow.md", diff --git a/tools/github/sync_latest_signals.py b/scripts/github/sync_latest_signals.py similarity index 97% rename from tools/github/sync_latest_signals.py rename to scripts/github/sync_latest_signals.py index 4eebc6c5..e47461f1 100644 --- a/tools/github/sync_latest_signals.py +++ b/scripts/github/sync_latest_signals.py @@ -65,8 +65,8 @@ def parse_args() -> argparse.Namespace: parser = argparse.ArgumentParser(description=__doc__) parser.add_argument("--repo", default="openai/codex", help="GitHub repository in owner/name format.") parser.add_argument("--signals-dir", default="site/src/content/signals", help="Published signal directory.") - parser.add_argument("--bundles-dir", default="tools/github/bundles", help="Bundle directory.") - parser.add_argument("--analysis-dir", default="tools/github/analysis", help="Analysis draft directory.") + parser.add_argument("--bundles-dir", default="artifacts/github/bundles", help="Bundle directory.") + parser.add_argument("--analysis-dir", default="artifacts/github/analysis", help="Analysis draft directory.") parser.add_argument( "--release-delta-out", default="site/src/content/release-deltas/openai-codex-latest.json", diff --git a/tools/github/test_build_release_delta.py b/scripts/github/test_build_release_delta.py similarity index 100% rename from tools/github/test_build_release_delta.py rename to scripts/github/test_build_release_delta.py diff --git a/tools/github/validate_change_bundle.py b/scripts/github/validate_change_bundle.py similarity index 100% rename from tools/github/validate_change_bundle.py rename to scripts/github/validate_change_bundle.py diff --git a/tools/github/validate_signal_entry.py b/scripts/github/validate_signal_entry.py similarity index 100% rename from tools/github/validate_signal_entry.py rename to scripts/github/validate_signal_entry.py diff --git a/site/src/content/release-deltas/README.md b/site/src/content/release-deltas/README.md index 49a2a295..359442d9 100644 --- a/site/src/content/release-deltas/README.md +++ b/site/src/content/release-deltas/README.md @@ -10,7 +10,7 @@ The current artifact is a bounded comparator payload: Build the latest `openai/codex` artifact with: ```bash -python3 tools/github/build_release_delta.py \ +python3 scripts/github/build_release_delta.py \ --repo openai/codex \ --signals-dir site/src/content/signals \ --out site/src/content/release-deltas/openai-codex-latest.json diff --git a/tools/README.md b/tools/README.md deleted file mode 100644 index 8f73c3d7..00000000 --- a/tools/README.md +++ /dev/null @@ -1,11 +0,0 @@ -# Tools Root - -This directory is reserved for deterministic Decodex automation. - -Planned ownership: - -- GitHub bundle collection -- normalization and render helpers -- signal validation scripts - -CI-owned deployment logic must remain separate from local AI analysis logic.