Apply argument comment lint across codex-rs (#14652)

## Why

Once the repo-local lint exists, `codex-rs` needs to follow the
checked-in convention and CI needs to keep it from drifting. This commit
applies the fallback `/*param*/` style consistently across existing
positional literal call sites without changing those APIs.

The longer-term preference is still to avoid APIs that require comments
by choosing clearer parameter types and call shapes. This PR is
intentionally the mechanical follow-through for the places where the
existing signatures stay in place.

After rebasing onto newer `main`, the rollout also had to cover newly
introduced `tui_app_server` call sites. That made it clear the first cut
of the CI job was too expensive for the common path: it was spending
almost as much time installing `cargo-dylint` and re-testing the lint
crate as a representative test job spends running product tests. The CI
update keeps the full workspace enforcement but trims that extra
overhead from ordinary `codex-rs` PRs.

## What changed

- keep a dedicated `argument_comment_lint` job in `rust-ci`
- mechanically annotate remaining opaque positional literals across
`codex-rs` with exact `/*param*/` comments, including the rebased
`tui_app_server` call sites that now fall under the lint
- keep the checked-in style aligned with the lint policy by using
`/*param*/` and leaving string and char literals uncommented
- cache `cargo-dylint`, `dylint-link`, and the relevant Cargo
registry/git metadata in the lint job
- split changed-path detection so the lint crate's own `cargo test` step
runs only when `tools/argument-comment-lint/*` or `rust-ci.yml` changes
- continue to run the repo wrapper over the `codex-rs` workspace, so
product-code enforcement is unchanged

Most of the code changes in this commit are intentionally mechanical
comment rewrites or insertions driven by the lint itself.

## Verification

- `./tools/argument-comment-lint/run.sh --workspace`
- `cargo test -p codex-tui-app-server -p codex-tui`
- parsed `.github/workflows/rust-ci.yml` locally with PyYAML

---

* -> #14652
* #14651
This commit is contained in:
Michael Bolin
2026-03-16 16:48:15 -07:00
committed by GitHub
Unverified
parent 6f05d8d735
commit b77fe8fefe
261 changed files with 2311 additions and 1377 deletions
@@ -778,7 +778,7 @@ impl EventProcessor for EventProcessorWithHumanOutput {
self,
"{} {}",
"collab".style(self.magenta),
format_collab_invocation("wait", &call_id, None).style(self.bold)
format_collab_invocation("wait", &call_id, /*prompt*/ None).style(self.bold)
);
eprintln!(
" receivers: {}",
@@ -795,7 +795,7 @@ impl EventProcessor for EventProcessorWithHumanOutput {
ts_msg!(
self,
"{} {}:",
format_collab_invocation("wait", &call_id, None),
format_collab_invocation("wait", &call_id, /*prompt*/ None),
"timed out".style(self.yellow)
);
return CodexStatus::Running;
@@ -804,7 +804,7 @@ impl EventProcessor for EventProcessorWithHumanOutput {
let title_style = if success { self.green } else { self.red };
let title = format!(
"{} {} agents complete:",
format_collab_invocation("wait", &call_id, None),
format_collab_invocation("wait", &call_id, /*prompt*/ None),
statuses.len()
);
ts_msg!(self, "{}", title.style(title_style));
@@ -830,7 +830,8 @@ impl EventProcessor for EventProcessorWithHumanOutput {
self,
"{} {}",
"collab".style(self.magenta),
format_collab_invocation("close_agent", &call_id, None).style(self.bold)
format_collab_invocation("close_agent", &call_id, /*prompt*/ None)
.style(self.bold)
);
eprintln!(
" receiver: {}",
@@ -848,7 +849,7 @@ impl EventProcessor for EventProcessorWithHumanOutput {
let title_style = if success { self.green } else { self.red };
let title = format!(
"{} {}:",
format_collab_invocation("close_agent", &call_id, None),
format_collab_invocation("close_agent", &call_id, /*prompt*/ None),
format_collab_status(&status)
);
ts_msg!(self, "{}", title.style(title_style));
@@ -1249,7 +1250,7 @@ fn format_collab_invocation(tool: &str, call_id: &str, prompt: Option<&str>) ->
let prompt = prompt
.map(str::trim)
.filter(|prompt| !prompt.is_empty())
.map(|prompt| truncate_preview(prompt, 120));
.map(|prompt| truncate_preview(prompt, /*max_chars*/ 120));
match prompt {
Some(prompt) => format!("{tool}({call_id}, prompt=\"{prompt}\")"),
None => format!("{tool}({call_id})"),
@@ -1262,7 +1263,7 @@ fn format_collab_status(status: &AgentStatus) -> String {
AgentStatus::Running => "running".to_string(),
AgentStatus::Interrupted => "interrupted".to_string(),
AgentStatus::Completed(Some(message)) => {
let preview = truncate_preview(message.trim(), 120);
let preview = truncate_preview(message.trim(), /*max_chars*/ 120);
if preview.is_empty() {
"completed".to_string()
} else {
@@ -1271,7 +1272,7 @@ fn format_collab_status(status: &AgentStatus) -> String {
}
AgentStatus::Completed(None) => "completed".to_string(),
AgentStatus::Errored(message) => {
let preview = truncate_preview(message.trim(), 120);
let preview = truncate_preview(message.trim(), /*max_chars*/ 120);
if preview.is_empty() {
"errored".to_string()
} else {
@@ -495,7 +495,7 @@ impl EventProcessorWithJsonOutput {
.iter()
.map(ToString::to_string)
.collect(),
None,
/*prompt*/ None,
)
}
@@ -526,7 +526,7 @@ impl EventProcessorWithJsonOutput {
CollabTool::Wait,
ev.sender_thread_id.to_string(),
receiver_thread_ids,
None,
/*prompt*/ None,
agents_states,
status,
)
@@ -538,7 +538,7 @@ impl EventProcessorWithJsonOutput {
CollabTool::CloseAgent,
ev.sender_thread_id.to_string(),
vec![ev.receiver_thread_id.to_string()],
None,
/*prompt*/ None,
)
}
@@ -555,7 +555,7 @@ impl EventProcessorWithJsonOutput {
CollabTool::CloseAgent,
ev.sender_thread_id.to_string(),
vec![receiver_id.clone()],
None,
/*prompt*/ None,
[(receiver_id, agent_state)].into_iter().collect(),
status,
)
+5 -5
View File
@@ -288,7 +288,7 @@ pub async fn run_main(cli: Cli, arg0_paths: Arg0DispatchPaths) -> anyhow::Result
let cloud_auth_manager = AuthManager::shared(
codex_home.clone(),
false,
/*enable_codex_api_key_env*/ false,
config_toml.cli_auth_credentials_store.unwrap_or_default(),
);
let chatgpt_base_url = config_toml
@@ -390,7 +390,7 @@ pub async fn run_main(cli: Cli, arg0_paths: Arg0DispatchPaths) -> anyhow::Result
codex_core::otel_init::build_provider(
&config,
env!("CARGO_PKG_VERSION"),
None,
/*service_name_override*/ None,
DEFAULT_ANALYTICS_ENABLED,
)
})) {
@@ -1357,7 +1357,7 @@ fn local_external_chatgpt_tokens(
) -> Result<ChatgptAuthTokensRefreshResponse, String> {
let auth_manager = AuthManager::shared(
config.codex_home.clone(),
false,
/*enable_codex_api_key_env*/ false,
config.cli_auth_credentials_store_mode,
);
auth_manager.set_forced_chatgpt_workspace_id(config.forced_chatgpt_workspace_id.clone());
@@ -1408,8 +1408,8 @@ async fn resolve_resume_path(
};
match codex_core::RolloutRecorder::find_latest_thread_path(
config,
1,
None,
/*page_size*/ 1,
/*cursor*/ None,
codex_core::ThreadSortKey::UpdatedAt,
&[],
Some(default_provider_filter.as_slice()),