dev: enable default ticket tools and workdir helpers
This commit is contained in:
@@ -981,7 +981,7 @@ fn builtin_default_profile_artifact() -> serde_json::Value {
|
||||
"memory": { "enabled": true },
|
||||
"web": { "enabled": true },
|
||||
"workers": { "enabled": true },
|
||||
"ticket": { "enabled": false, "access": "lifecycle" },
|
||||
"ticket": { "enabled": true, "access": "lifecycle" },
|
||||
"ticket_orchestration": { "enabled": false }
|
||||
},
|
||||
"memory": {
|
||||
@@ -1761,6 +1761,12 @@ worker_context_max_tokens = 68000
|
||||
assert!(resolved.manifest.scope.allow.is_empty());
|
||||
assert!(resolved.manifest.delegation_scope.allow.is_empty());
|
||||
assert!(resolved.manifest.session.record_event_trace);
|
||||
assert!(resolved.manifest.feature.ticket.enabled);
|
||||
assert_eq!(
|
||||
resolved.manifest.feature.ticket.access,
|
||||
crate::TicketFeatureAccessConfig::Lifecycle
|
||||
);
|
||||
assert!(!resolved.manifest.feature.ticket_orchestration.enabled);
|
||||
assert_eq!(
|
||||
resolved.profile.as_ref().unwrap().name.as_deref(),
|
||||
Some("default")
|
||||
|
||||
@@ -237,7 +237,7 @@ enabled = true
|
||||
enabled = false
|
||||
|
||||
[feature.ticket]
|
||||
enabled = false
|
||||
enabled = true
|
||||
access = "lifecycle"
|
||||
|
||||
[feature.ticket_orchestration]
|
||||
@@ -298,6 +298,8 @@ mod tests {
|
||||
assert!(profile.contains("slug = \"default\""));
|
||||
assert!(profile.contains("ref = \"codex-oauth/gpt-5.5\""));
|
||||
assert!(profile.contains("scope = \"workspace_write\""));
|
||||
assert!(profile.contains("[feature.ticket]\nenabled = true\naccess = \"lifecycle\""));
|
||||
assert!(profile.contains("[feature.ticket_orchestration]\nenabled = false"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
|
||||
@@ -320,20 +320,21 @@ impl LocalGitWorktreeMaterializer {
|
||||
)
|
||||
})?;
|
||||
|
||||
let status = git_stdout(&source_root, ["status", "--porcelain"])?;
|
||||
if !status.trim().is_empty() {
|
||||
return Err(WorkingDirectoryDiagnostic::new(
|
||||
"working_directory_dirty_source_rejected",
|
||||
"working directory materialization rejects dirty source repository state",
|
||||
));
|
||||
}
|
||||
|
||||
let selector = request
|
||||
.repository
|
||||
.selector
|
||||
.as_deref()
|
||||
.unwrap_or("HEAD")
|
||||
.to_string();
|
||||
if selector == "HEAD" {
|
||||
let status = git_stdout(&source_root, ["status", "--porcelain"])?;
|
||||
if !status.trim().is_empty() {
|
||||
return Err(WorkingDirectoryDiagnostic::new(
|
||||
"working_directory_dirty_source_rejected",
|
||||
"working directory materialization rejects dirty source repository state",
|
||||
));
|
||||
}
|
||||
}
|
||||
let commit_spec = format!("{selector}^{{commit}}");
|
||||
let resolved_commit = git_stdout(&source_root, ["rev-parse", commit_spec.as_str()])?
|
||||
.trim()
|
||||
@@ -851,6 +852,30 @@ mod tests {
|
||||
assert!(error.message.contains("dirty source"));
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn branch_selector_allows_dirty_source_materialization() {
|
||||
let repo = create_clean_repo();
|
||||
git(repo.path(), &["branch", "pinned"]);
|
||||
fs::write(repo.path().join("dirty.txt"), "dirty\n").unwrap();
|
||||
let runtime_root = tempfile::tempdir().unwrap();
|
||||
let materializer = LocalGitWorktreeMaterializer::new(runtime_root.path());
|
||||
let mut request = request(repo.path());
|
||||
request.repository.selector = Some(RepositorySelector::from("pinned"));
|
||||
|
||||
let binding = materializer.materialize(&worker_ref(1), &request).unwrap();
|
||||
|
||||
assert_eq!(
|
||||
binding
|
||||
.working_directory
|
||||
.evidence
|
||||
.requested_selector
|
||||
.as_deref(),
|
||||
Some("pinned")
|
||||
);
|
||||
assert!(binding.root.join("README.md").exists());
|
||||
assert!(!binding.root.join("dirty.txt").exists());
|
||||
}
|
||||
|
||||
#[test]
|
||||
fn unsupported_remote_and_non_git_provider_return_typed_diagnostics() {
|
||||
let runtime_root = tempfile::tempdir().unwrap();
|
||||
|
||||
Reference in New Issue
Block a user