mirror of
https://github.com/fabro-sh/fabro.git
synced 2026-09-08 22:21:45 +00:00
parent
627340ad21
commit
fb7a418328
5 changed files with 74 additions and 0 deletions
52
checkpoint.json
Normal file
52
checkpoint.json
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
{
|
||||
"timestamp": "2026-03-19T23:39:28.893909Z",
|
||||
"current_node": "toolchain",
|
||||
"completed_nodes": [
|
||||
"start",
|
||||
"toolchain"
|
||||
],
|
||||
"node_retries": {
|
||||
"toolchain": 1,
|
||||
"start": 1
|
||||
},
|
||||
"context_values": {
|
||||
"current_node": "toolchain",
|
||||
"failure_class": "",
|
||||
"graph.rankdir": "LR",
|
||||
"internal.fidelity": "compact",
|
||||
"failure_signature": "",
|
||||
"current.preamble": "Goal: # Plan: Merge fabro-linear and GitHub tracker into fabro-tracker\n\n## Context\n\nThe tracker ecosystem currently has three crates:\n- **fabro-tracker** — trait-only (57 lines): `Tracker` trait, `Issue`, `BlockerRef`\n- **fabro-linear** — standalone Linear functions that duplicate the `Issue`/`BlockerRef` types and don't implement the `Tracker` trait. Entirely unused.\n- **fabro-github** — mixed crate: GitHub App auth/PRs/branches (~70%) + `GitHubTracker` implementing `Tracker` (~30%). The `GitHubTracker` is also unused by consumers.\n\nGoal: consolidate both tracker implementations into `fabro-tracker`, keeping non-tracker GitHub code in `fabro-github`, and deleting `fabro-linear`.\n\n## Dependency Direction Change\n\n**Current:** `fabro-github → fabro-tracker` (for trait re-export)\n**After:** `fabro-tracker → fabro-github` (for auth primitives: `GitHubAppCredentials`, `sign_app_jwt`, `create_installation_access_token_for_projects`)\n\n`fabro-github` no longer depends on `fabro-tracker`. No circular dependency.\n\n## Steps\n\n### 1. Update `lib/crates/fabro-tracker/Cargo.toml`\n\nAdd dependencies needed by both implementations:\n```toml\n[dependencies]\nfabro-github = { path = \"../fabro-github\" }\nasync-trait.workspace = true\nserde.workspace = true\nserde_json.workspace = true\nreqwest.workspace = true\ntracing.workspace = true\ntokio = { workspace = true }\n\n[dev-dependencies]\nmockito = \"1\"\ntokio = { workspace = true, features = [\"test-util\", \"macros\"] }\n```\n\n### 2. Update `lib/crates/fabro-github/Cargo.toml`\n\nRemove:\n- `fabro-tracker = { path = \"../fabro-tracker\" }`\n- `async-trait.workspace = true`\n\n### 3. Remove tracker code from `lib/crates/fabro-github/src/lib.rs`\n\nRemove these items (keep everything else):\n- `use async_trait::async_trait;` (line 1)\n- `use tokio::sync::OnceCell;` (line 3)\n- `pub use fabro_tracker::{BlockerRef, Issue, Tracker};` (line 5)\n- `execute_github_graphql()` fn (~line 796)\n- `GitHubTracker` struct, `impl GitHubTracker`, `impl Tracker for GitHubTracker` (~line 866-1315)\n- `normalize_github_item()` fn (~line 981)\n- `fetch_project_items_page()` fn (~line 1035)\n- All tracker-related tests (~line 2172-2841): `execute_github_graphql` tests, tracker helpers (`mock_github_tracker`, `make_test_issue`, etc.), and all `GitHubTracker` method tests\n\n**Keep** `create_installation_access_token_for_projects()` — it stays in fabro-github as a public function alongside the other `create_installation_access_token_*` variants.\n\n### 4. Create `lib/crates/fabro-tracker/src/linear.rs`\n\nAdapt `fabro-linear/src/lib.rs` code:\n- **Remove** the duplicate `Issue` and `BlockerRef` struct definitions — use `crate::Issue` and `crate::BlockerRef`\n- **Adapt** `normalize_issue()` to return `crate::Issue` with `project_item_id: None`\n- **Create** `LinearTracker` struct wrapping `LinearConfig`, `reqwest::Client`, and `project_slug: String`\n- **Implement** `Tracker for LinearTracker` by delegating to the existing functions\n- **Keep** private: `execute_graphql`, `normalize_issue`, `extract_issues`, `ISSUE_FIELDS`, `BLOCKS_RELATION_TYPE`\n- **Keep** public: `LinearConfig`, `LinearTracker`, `LINEAR_API_ENDPOINT`\n- **Move** all tests, updating assertions for the added `project_item_id` field\n\n### 5. Create `lib/crates/fabro-tracker/src/github.rs`\n\nMove tracker code from fabro-github:\n- Import from fabro-github: `GitHubAppCredentials`, `sign_app_jwt`, `create_installation_access_token_for_projects`\n- Contains: `GitHubTracker` struct + impls, `execute_github_graphql`, `normalize_github_item`, `fetch_project_items_page`\n- Uses `crate::Issue` and `crate::BlockerRef` (same types, just different import path)\n- Move all GitHubTracker tests (duplicate `test_rsa_key()` helper since test code isn't importable across crates)\n\n### 6. Update `lib/crates/fabro-tracker/src/lib.rs`\n\nAdd module declarations and re-exports:\n```rust\npub mod github;\npub mod linear;\n\npub use github::GitHubTracker;\npub use linear::{LinearConfig, LinearTracker, LINEAR_API_ENDPOINT};\n```\n\n### 7. Delete `lib/crates/fabro-linear/`\n\nRemove entire directory. Workspace glob `members = [\"lib/crates/*\"]` handles the rest.\n\n## Verification\n\n```bash\ncargo build --workspace\ncargo test --workspace\ncargo clippy --workspace -- -D warnings\ncargo fmt --check --all\n```\n\nKey things to verify:\n- No circular dependency (fabro-tracker → fabro-github, fabro-github has no fabro-tracker dep)\n- Linear `normalize_issue` sets `project_item_id: None`\n- All moved tests pass in their new home\n- `test_rsa_key()` helper is duplicated in fabro-tracker's github test module\n\n",
|
||||
"internal.retry_count.toolchain": 1,
|
||||
"graph.model_stylesheet": "\n * { backend: api; model: claude-opus-4-6;}\n ",
|
||||
"outcome": "success",
|
||||
"command.stderr": "",
|
||||
"graph.goal": "# Plan: Merge fabro-linear and GitHub tracker into fabro-tracker\n\n## Context\n\nThe tracker ecosystem currently has three crates:\n- **fabro-tracker** — trait-only (57 lines): `Tracker` trait, `Issue`, `BlockerRef`\n- **fabro-linear** — standalone Linear functions that duplicate the `Issue`/`BlockerRef` types and don't implement the `Tracker` trait. Entirely unused.\n- **fabro-github** — mixed crate: GitHub App auth/PRs/branches (~70%) + `GitHubTracker` implementing `Tracker` (~30%). The `GitHubTracker` is also unused by consumers.\n\nGoal: consolidate both tracker implementations into `fabro-tracker`, keeping non-tracker GitHub code in `fabro-github`, and deleting `fabro-linear`.\n\n## Dependency Direction Change\n\n**Current:** `fabro-github → fabro-tracker` (for trait re-export)\n**After:** `fabro-tracker → fabro-github` (for auth primitives: `GitHubAppCredentials`, `sign_app_jwt`, `create_installation_access_token_for_projects`)\n\n`fabro-github` no longer depends on `fabro-tracker`. No circular dependency.\n\n## Steps\n\n### 1. Update `lib/crates/fabro-tracker/Cargo.toml`\n\nAdd dependencies needed by both implementations:\n```toml\n[dependencies]\nfabro-github = { path = \"../fabro-github\" }\nasync-trait.workspace = true\nserde.workspace = true\nserde_json.workspace = true\nreqwest.workspace = true\ntracing.workspace = true\ntokio = { workspace = true }\n\n[dev-dependencies]\nmockito = \"1\"\ntokio = { workspace = true, features = [\"test-util\", \"macros\"] }\n```\n\n### 2. Update `lib/crates/fabro-github/Cargo.toml`\n\nRemove:\n- `fabro-tracker = { path = \"../fabro-tracker\" }`\n- `async-trait.workspace = true`\n\n### 3. Remove tracker code from `lib/crates/fabro-github/src/lib.rs`\n\nRemove these items (keep everything else):\n- `use async_trait::async_trait;` (line 1)\n- `use tokio::sync::OnceCell;` (line 3)\n- `pub use fabro_tracker::{BlockerRef, Issue, Tracker};` (line 5)\n- `execute_github_graphql()` fn (~line 796)\n- `GitHubTracker` struct, `impl GitHubTracker`, `impl Tracker for GitHubTracker` (~line 866-1315)\n- `normalize_github_item()` fn (~line 981)\n- `fetch_project_items_page()` fn (~line 1035)\n- All tracker-related tests (~line 2172-2841): `execute_github_graphql` tests, tracker helpers (`mock_github_tracker`, `make_test_issue`, etc.), and all `GitHubTracker` method tests\n\n**Keep** `create_installation_access_token_for_projects()` — it stays in fabro-github as a public function alongside the other `create_installation_access_token_*` variants.\n\n### 4. Create `lib/crates/fabro-tracker/src/linear.rs`\n\nAdapt `fabro-linear/src/lib.rs` code:\n- **Remove** the duplicate `Issue` and `BlockerRef` struct definitions — use `crate::Issue` and `crate::BlockerRef`\n- **Adapt** `normalize_issue()` to return `crate::Issue` with `project_item_id: None`\n- **Create** `LinearTracker` struct wrapping `LinearConfig`, `reqwest::Client`, and `project_slug: String`\n- **Implement** `Tracker for LinearTracker` by delegating to the existing functions\n- **Keep** private: `execute_graphql`, `normalize_issue`, `extract_issues`, `ISSUE_FIELDS`, `BLOCKS_RELATION_TYPE`\n- **Keep** public: `LinearConfig`, `LinearTracker`, `LINEAR_API_ENDPOINT`\n- **Move** all tests, updating assertions for the added `project_item_id` field\n\n### 5. Create `lib/crates/fabro-tracker/src/github.rs`\n\nMove tracker code from fabro-github:\n- Import from fabro-github: `GitHubAppCredentials`, `sign_app_jwt`, `create_installation_access_token_for_projects`\n- Contains: `GitHubTracker` struct + impls, `execute_github_graphql`, `normalize_github_item`, `fetch_project_items_page`\n- Uses `crate::Issue` and `crate::BlockerRef` (same types, just different import path)\n- Move all GitHubTracker tests (duplicate `test_rsa_key()` helper since test code isn't importable across crates)\n\n### 6. Update `lib/crates/fabro-tracker/src/lib.rs`\n\nAdd module declarations and re-exports:\n```rust\npub mod github;\npub mod linear;\n\npub use github::GitHubTracker;\npub use linear::{LinearConfig, LinearTracker, LINEAR_API_ENDPOINT};\n```\n\n### 7. Delete `lib/crates/fabro-linear/`\n\nRemove entire directory. Workspace glob `members = [\"lib/crates/*\"]` handles the rest.\n\n## Verification\n\n```bash\ncargo build --workspace\ncargo test --workspace\ncargo clippy --workspace -- -D warnings\ncargo fmt --check --all\n```\n\nKey things to verify:\n- No circular dependency (fabro-tracker → fabro-github, fabro-github has no fabro-tracker dep)\n- Linear `normalize_issue` sets `project_item_id: None`\n- All moved tests pass in their new home\n- `test_rsa_key()` helper is duplicated in fabro-tracker's github test module\n",
|
||||
"internal.node_visit_count": 1,
|
||||
"command.output": "cargo 1.94.0 (85eff7c80 2026-01-15)\n",
|
||||
"internal.run_id": "01KM47FJJCP2B23W0MFSE9WVBX",
|
||||
"internal.retry_count.start": 1,
|
||||
"thread.start.current_node": "toolchain",
|
||||
"internal.thread_id": "start"
|
||||
},
|
||||
"logs": [],
|
||||
"node_outcomes": {
|
||||
"start": {
|
||||
"status": "success",
|
||||
"duration_ms": 0
|
||||
},
|
||||
"toolchain": {
|
||||
"status": "success",
|
||||
"context_updates": {
|
||||
"command.stderr": "",
|
||||
"command.output": "cargo 1.94.0 (85eff7c80 2026-01-15)\n"
|
||||
},
|
||||
"notes": "Script completed: command -v cargo >/dev/null || { curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && sudo ln -sf $HOME/.cargo/bin/* /usr/local/bin/; }; cargo --version 2>&1",
|
||||
"duration_ms": 116
|
||||
}
|
||||
},
|
||||
"next_node_id": "preflight_compile",
|
||||
"node_visits": {
|
||||
"start": 1,
|
||||
"toolchain": 1
|
||||
}
|
||||
}
|
||||
6
nodes/start/status.json
Normal file
6
nodes/start/status.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"status": "success",
|
||||
"notes": null,
|
||||
"failure_reason": null,
|
||||
"timestamp": "2026-03-19T23:39:28.768720+00:00"
|
||||
}
|
||||
5
nodes/toolchain/script_invocation.json
Normal file
5
nodes/toolchain/script_invocation.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"command": "command -v cargo >/dev/null || { curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && sudo ln -sf $HOME/.cargo/bin/* /usr/local/bin/; }; cargo --version 2>&1",
|
||||
"language": "shell",
|
||||
"timeout_ms": null
|
||||
}
|
||||
5
nodes/toolchain/script_timing.json
Normal file
5
nodes/toolchain/script_timing.json
Normal file
|
|
@ -0,0 +1,5 @@
|
|||
{
|
||||
"duration_ms": 116,
|
||||
"exit_code": 0,
|
||||
"timed_out": false
|
||||
}
|
||||
6
nodes/toolchain/status.json
Normal file
6
nodes/toolchain/status.json
Normal file
|
|
@ -0,0 +1,6 @@
|
|||
{
|
||||
"status": "success",
|
||||
"notes": "Script completed: command -v cargo >/dev/null || { curl --proto '=https' --tlsv1.2 -sSf https://sh.rustup.rs | sh -s -- -y && sudo ln -sf $HOME/.cargo/bin/* /usr/local/bin/; }; cargo --version 2>&1",
|
||||
"failure_reason": null,
|
||||
"timestamp": "2026-03-19T23:39:28.893682+00:00"
|
||||
}
|
||||
Loading…
Add table
Reference in a new issue