Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
58 changes: 47 additions & 11 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ mockall = "0.14"
http-body-util = "0.1"

# Shared infrastructure
abnegate-http = "0.1.2"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Update the Docker toolchain before adding this dependency

abnegate-http 0.1.2 requires Rust 1.97, but Dockerfile:2 still pins Rust 1.93, so the default image build fails at Cargo's rust-version check. Please land the toolchain update first or include it here rather than merging a dependency that the deployment build cannot compile.

Prompt To Fix With AI
This is a comment left during a code review.
Path: Cargo.toml
Line: 154

Comment:
**Update the Docker toolchain before adding this dependency**

abnegate-http 0.1.2 requires Rust 1.97, but Dockerfile:2 still pins Rust 1.93, so the default image build fails at Cargo's rust-version check. Please land the toolchain update first or include it here rather than merging a dependency that the deployment build cannot compile.

---

For each issue above, determine whether it is valid and should be fixed. If so, fix it directly.

🟠 Major · bug · Reply if this doesn't apply.

Copy link
Copy Markdown
Member Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Agreed, the image cannot build this until the toolchain moves. That change lives in #161, which sets RUST_VERSION=1.98 in the Dockerfile (abnegate-http 0.1.2 needs 1.97). This PR depends on #161 and must merge after it; the body now says "Depends on #161 (Docker toolchain)" at the top and keeps the build-break note. I kept the toolchain bump out of this PR so every crate migration shares one Dockerfile change rather than each carrying its own.

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

This is still an outstanding build break in this PR’s current tree: the Dockerfile pins Rust 1.93 and uses that version for the builder (Dockerfile, builder stage), while the new dependency is declared here (Cargo.toml). Calling #161 a dependency documents the required merge order, but does not make this tree buildable. Please keep this blocked until #161 lands and this PR is based on the toolchain update, or include that update here; I’ll leave the finding open until then.

abnegate-index = "0.1.0"

# Internal crates
Expand Down
5 changes: 5 additions & 0 deletions crates/claudear-analysis/Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -10,8 +10,10 @@ workspace = true
default = []
sqlite = ["claudear-core/sqlite", "claudear-storage/sqlite"]
cuda = ["ort/cuda"]
test-support = []

[dependencies]
abnegate-http = { workspace = true }
abnegate-index = { workspace = true }
claudear-core = { workspace = true }
claudear-config = { workspace = true }
Expand All @@ -28,6 +30,9 @@ chrono = { workspace = true }
async-trait = { workspace = true }
tokio = { workspace = true }

# HTTP
reqwest = { workspace = true }

# Regex
regex-lite = { workspace = true }

Expand Down
74 changes: 38 additions & 36 deletions crates/claudear-analysis/src/deploy_qa/tracker.rs
Original file line number Diff line number Diff line change
@@ -1,16 +1,27 @@
//! Poll GitHub for new release tips and persist last-seen / attempt state.

use crate::deploy_qa::playbook::{load_playbook, DEPLOY_QA_SOURCE};
use crate::deploy_qa::probe::{
VERDICT_ALL_VERIFIED, VERDICT_FAIL, VERDICT_PREFIX, VERDICT_UNVERIFIED,
};
use crate::release::{GitHubRelease, GitHubTag, ReleaseClient};
use claudear_config::config::{DeployQaConfig, DeployQaTagFilter, DeployQaTrackConfig};
use crate::deploy_qa::playbook::load_playbook;
use crate::deploy_qa::playbook::DEPLOY_QA_SOURCE;
use crate::deploy_qa::probe::VERDICT_ALL_VERIFIED;
use crate::deploy_qa::probe::VERDICT_FAIL;
use crate::deploy_qa::probe::VERDICT_PREFIX;
use crate::deploy_qa::probe::VERDICT_UNVERIFIED;
use crate::release::GitHubRelease;
use crate::release::GitHubTag;
use crate::release::ReleaseClient;
use abnegate_http::HttpClient;
use abnegate_http::ReqwestHttpClient;
use claudear_config::config::DeployQaConfig;
use claudear_config::config::DeployQaTagFilter;
use claudear_config::config::DeployQaTrackConfig;
use claudear_core::error::Result;
use claudear_core::http::{HttpClient, ReqwestHttpClient};
use claudear_core::types::{
DeployQaTip, DeployQaTipStatus, Issue, IssuePriority, IssueStatus, MatchPriority, MatchResult,
};
use claudear_core::types::DeployQaTip;
use claudear_core::types::DeployQaTipStatus;
use claudear_core::types::Issue;
use claudear_core::types::IssuePriority;
use claudear_core::types::IssueStatus;
use claudear_core::types::MatchPriority;
use claudear_core::types::MatchResult;
use claudear_storage::FixAttemptTracker;
use std::path::Path;
use std::sync::Arc;
Expand Down Expand Up @@ -328,9 +339,11 @@ pub fn deploy_qa_match_result(track: &str, tag: &str) -> MatchResult {
mod tests {
use super::*;
use crate::deploy_qa::playbook::bundled_playbook;
use crate::deploy_qa::probe::{classify_deploy_qa_verdict, DeployQaVerdict};
use crate::deploy_qa::probe::classify_deploy_qa_verdict;
use crate::deploy_qa::probe::DeployQaVerdict;
use abnegate_http::HttpClient;
use abnegate_http::HttpResponse;
use async_trait::async_trait;
use claudear_core::http::{HttpClient, HttpResponse};
use claudear_storage::SqliteTracker;
use std::collections::HashMap;
use std::sync::Mutex;
Expand All @@ -344,47 +357,36 @@ mod tests {
fn new() -> Self {
Self {
by_url: Mutex::new(HashMap::new()),
default: HttpResponse {
status: 404,
body: r#"{"message":"Not Found"}"#.to_string(),
},
default: HttpResponse::new(404, r#"{"message":"Not Found"}"#),
}
}

fn on(self, url: &str, status: u16, body: &str) -> Self {
self.by_url.lock().unwrap().insert(
url.to_string(),
HttpResponse {
status,
body: body.to_string(),
},
);
self.by_url
.lock()
.unwrap()
.insert(url.to_string(), HttpResponse::new(status, body.to_string()));
self
}
}

#[async_trait]
impl HttpClient for MapMockHttp {
async fn get(&self, url: &str, _headers: Vec<(&str, String)>) -> Result<HttpResponse> {
async fn get(
&self,
url: &str,
_headers: Vec<(&str, String)>,
) -> abnegate_http::Result<HttpResponse> {
let map = self.by_url.lock().unwrap();
if let Some(response) = map.get(url) {
return Ok(HttpResponse {
status: response.status,
body: response.body.clone(),
});
return Ok(response.clone());
}
for (key, response) in map.iter() {
if url.starts_with(key) {
return Ok(HttpResponse {
status: response.status,
body: response.body.clone(),
});
return Ok(response.clone());
}
}
Ok(HttpResponse {
status: self.default.status,
body: self.default.body.clone(),
})
Ok(self.default.clone())
}
}

Expand Down
2 changes: 2 additions & 0 deletions crates/claudear-analysis/src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -16,3 +16,5 @@ pub mod qa;
pub mod regression;
pub mod release;
pub mod repo;
#[cfg(any(test, feature = "test-support"))]
pub mod test_support;
Loading
Loading