清理 AGC 壳 exports/bootstrap 退役遗留的 14 条 Rust 告警并收缩白名单
- 删除 project/bootstrap.rs 整模块及 project.rs 的 mod 与 glob 再导出 - command_exec.rs 删除 run_project_bootstrap_command_at,resolve_project_bootstrap_spec_at 按真实使用面收窄为 Linux 测试专用 - project/verification.rs 删除仅用例调用的薄包装 run_project_verification_with_commit_at 并修正 doc 链接 - game_package_upload 删除死常量 GAME_PACKAGE_UPLOAD_PROGRESS_EVENT 及其再导出 - game_package_upload 的 ensure_staging_path_in_dir 与 NpmScript.package_json_relative 按真实使用面收窄为 test-only - export/draft/taonier 移除多余再导出 TaonierArtifactPackage 并删除无调用方的 read_form - 前端 gamePackageUploadProgress.ts 注释不再指向已删的 Rust 常量 - scripts/warning-baseline.json 收缩:agc-windows 17→3、agc-linux 72→58 - 同步开发运维文档的告警存量记述
This commit is contained in:
@@ -642,6 +642,13 @@ pub(crate) fn resolve_project_command_spec_at(
|
||||
/// It intentionally bypasses the general command.exec npm allow-list: callers
|
||||
/// must use the dedicated `project.bootstrap` action, which only accepts the
|
||||
/// literal `npm install` in the project's `game` directory.
|
||||
///
|
||||
/// 生产调用方(`project/export.rs`)已随 master 的 exports 退役删除,现存唯一引用是本文件的
|
||||
/// `npm_command_targets_node_plus_npm_cli_on_linux` 用例;因此按**真实使用面**收窄到
|
||||
/// `all(target_os = "linux", test)`——与同文件 `project_command_actual_target` 的
|
||||
/// `cfg(target_os = "linux")` 相比更窄,因为那个函数 Linux 生产仍在调用,这个已不在。
|
||||
/// 引用侧的有效 cfg(`#[cfg(test)] mod tests` + `#[cfg(target_os = "linux")]` 用例)与定义侧一致。
|
||||
#[cfg(all(target_os = "linux", test))]
|
||||
pub(crate) fn resolve_project_bootstrap_spec_at(
|
||||
root: &Path,
|
||||
timeout_seconds: u64,
|
||||
@@ -2505,16 +2512,6 @@ pub(crate) async fn run_project_command_with_output_at(
|
||||
.await
|
||||
}
|
||||
|
||||
pub(crate) async fn run_project_bootstrap_command_at(
|
||||
root: &Path,
|
||||
timeout_seconds: u64,
|
||||
) -> Result<ProjectCommandResult, ProjectCommandError> {
|
||||
let spec = resolve_project_bootstrap_spec_at(root, timeout_seconds)?;
|
||||
let launch = prepare_project_command_launch_spec(root, &spec)?;
|
||||
let staged = stage_project_command_launch_spec(&spec, launch)?;
|
||||
run_prepared_project_command_with_output_at(root, &spec, staged, None, || Ok(())).await
|
||||
}
|
||||
|
||||
pub(crate) async fn run_prepared_project_command_with_output_at<F>(
|
||||
root: &Path,
|
||||
spec: &ProjectCommandSpec,
|
||||
|
||||
@@ -22,4 +22,4 @@ pub(crate) mod registry;
|
||||
mod script;
|
||||
|
||||
/// 发布链路读固定产物的入口。只读 `.export/taonier.zip`,不接用户路径。
|
||||
pub(crate) use build::{read_artifact_package, TaonierArtifactPackage};
|
||||
pub(crate) use build::read_artifact_package;
|
||||
|
||||
@@ -80,17 +80,6 @@ pub(crate) fn save(
|
||||
Ok(RegistrySnapshot { form, content_hash })
|
||||
}
|
||||
|
||||
/// 发布链路只读草稿表单。
|
||||
///
|
||||
/// 发布不是写草稿的入口,所以这里只取表单、不关心指纹,也不做冲突判定;文件缺失时与读命令
|
||||
/// 同一口径(`load_or_create` 补一份空表单),让后续的封面/张数校验给出确定的「请先选择封面」
|
||||
/// 提示,而不是把「草稿不存在」误报成宿主故障。
|
||||
pub(crate) fn read_form(root: &Path) -> Result<TaonierExportForm, String> {
|
||||
let loaded = load_or_create(®istry_path(root), &TaonierExportRegistry::default())
|
||||
.map_err(|error| error.to_string())?;
|
||||
Ok(loaded.value.form)
|
||||
}
|
||||
|
||||
#[cfg(test)]
|
||||
mod tests {
|
||||
use super::*;
|
||||
|
||||
@@ -18,7 +18,8 @@ pub(crate) struct NpmScript {
|
||||
pub(crate) cwd_relative: &'static str,
|
||||
/// `package.json` 里声明的脚本文本。交给运行器做反漂移的 `expectedCommand`。
|
||||
pub(crate) command: String,
|
||||
/// 相对项目根的 `package.json` 路径,报错与提示都用它。
|
||||
/// 相对项目根的 `package.json` 路径;当前只被用例读取。
|
||||
#[cfg(test)]
|
||||
pub(crate) package_json_relative: String,
|
||||
}
|
||||
|
||||
@@ -59,6 +60,7 @@ pub(crate) fn find(root: &Path) -> Option<NpmScript> {
|
||||
return Some(NpmScript {
|
||||
cwd_relative: cwd,
|
||||
command: command.to_string(),
|
||||
#[cfg(test)]
|
||||
package_json_relative: package_json_relative(cwd),
|
||||
});
|
||||
}
|
||||
|
||||
@@ -17,7 +17,6 @@ mod runtime;
|
||||
pub(crate) use runtime::{
|
||||
game_package_upload_staging_dir, progress_event_payload, upload_staged_version_asset,
|
||||
GamePackageUploadOutcome, GamePackageUploadRequest, PackageUploadAsset,
|
||||
GAME_PACKAGE_UPLOAD_PROGRESS_EVENT,
|
||||
};
|
||||
|
||||
/// 已暂存(归一化后)的发行包:内容寻址,重启后同一包复用同一个文件,续传才有意义。
|
||||
@@ -71,6 +70,10 @@ pub(crate) fn stage_game_package_bytes(
|
||||
}
|
||||
|
||||
/// 暂存文件必须落在暂存目录内;渲染进程不能借这条命令读任意路径。
|
||||
///
|
||||
/// 生产接入已随 exports 退役(master `b04aceb57` 删除 `project/export.rs` 与 `commands/desktop.rs`
|
||||
/// 的发布链路)删除,当前只有本文件的用例调用它。
|
||||
#[cfg(test)]
|
||||
pub(crate) fn ensure_staging_path_in_dir(
|
||||
staging_dir: &Path,
|
||||
staging_path: &str,
|
||||
|
||||
@@ -8,8 +8,6 @@ use std::{
|
||||
time::Duration,
|
||||
};
|
||||
|
||||
pub(crate) const GAME_PACKAGE_UPLOAD_PROGRESS_EVENT: &str = "game-package-upload-progress";
|
||||
|
||||
const AGC_CLIENT_MARKER_HEADER: &str = "X-Genarrative-Client";
|
||||
const AGC_CLIENT_MARKER_VALUE: &str = "agc";
|
||||
const UPLOAD_OFFSET_HEADER: &str = "x-genarrative-upload-offset";
|
||||
|
||||
@@ -6,7 +6,6 @@ mod agent_db;
|
||||
mod asset_export;
|
||||
#[cfg(not(test))]
|
||||
mod asset_rename;
|
||||
mod bootstrap;
|
||||
mod checkpoint;
|
||||
mod conversation;
|
||||
mod external_editor_bindings;
|
||||
@@ -28,7 +27,6 @@ pub(crate) use agent_db::*;
|
||||
pub(crate) use asset_export::*;
|
||||
#[cfg(not(test))]
|
||||
pub(crate) use asset_rename::*;
|
||||
pub(crate) use bootstrap::*;
|
||||
pub(crate) use checkpoint::*;
|
||||
pub(crate) use conversation::*;
|
||||
pub(crate) use external_editor_bindings::*;
|
||||
|
||||
@@ -1,113 +0,0 @@
|
||||
use super::*;
|
||||
use sha2::{Digest, Sha256};
|
||||
|
||||
const BOOTSTRAP_PACKAGE_MAX_BYTES: u64 = 512 * 1024;
|
||||
|
||||
#[derive(Clone, Debug, Eq, PartialEq)]
|
||||
pub(crate) struct ProjectBootstrapResult {
|
||||
pub(crate) status: String,
|
||||
pub(crate) output: String,
|
||||
pub(crate) package_sha256: String,
|
||||
pub(crate) lock_sha256: Option<String>,
|
||||
pub(crate) log_path: String,
|
||||
pub(crate) updated_at: u64,
|
||||
}
|
||||
|
||||
fn read_bootstrap_file(path: &Path, label: &str) -> Result<Vec<u8>, String> {
|
||||
let metadata = fs::symlink_metadata(path)
|
||||
.map_err(|error| format!("读取 {label} 失败:{}: {error}", path.display()))?;
|
||||
if metadata.file_type().is_symlink() || !metadata.is_file() {
|
||||
return Err(format!("project.bootstrap 要求 {label} 是普通文件"));
|
||||
}
|
||||
if metadata.len() > BOOTSTRAP_PACKAGE_MAX_BYTES {
|
||||
return Err(format!(
|
||||
"project.bootstrap {label} 超过 {} 字节上限",
|
||||
BOOTSTRAP_PACKAGE_MAX_BYTES
|
||||
));
|
||||
}
|
||||
prepare_game_creator_private_path_for_read(path, false, label)?;
|
||||
fs::read(path).map_err(|error| format!("读取 {label} 失败:{error}"))
|
||||
}
|
||||
|
||||
pub(crate) async fn run_project_bootstrap_at(
|
||||
root: &Path,
|
||||
timeout_seconds: u64,
|
||||
) -> Result<ProjectBootstrapResult, String> {
|
||||
validate_project_root(root)?;
|
||||
let game = resolve_local_project_path(root, "game")?;
|
||||
if !game.is_dir() {
|
||||
return Err("project.bootstrap 只允许项目内 game 目录".to_string());
|
||||
}
|
||||
let package = read_bootstrap_file(&game.join("package.json"), "game/package.json")?;
|
||||
let package_json: serde_json::Value = serde_json::from_slice(&package)
|
||||
.map_err(|error| format!("解析 game/package.json 失败:{error}"))?;
|
||||
if let Some(manager) = package_json
|
||||
.get("packageManager")
|
||||
.and_then(serde_json::Value::as_str)
|
||||
{
|
||||
if !manager.trim().starts_with("npm@") && manager.trim() != "npm" {
|
||||
return Err("project.bootstrap 当前只支持 npm packageManager".to_string());
|
||||
}
|
||||
}
|
||||
for lock_name in ["pnpm-lock.yaml", "yarn.lock", "bun.lock", "bun.lockb"] {
|
||||
if game.join(lock_name).exists() {
|
||||
return Err(format!("project.bootstrap 检测到非 npm 锁文件 {lock_name}"));
|
||||
}
|
||||
}
|
||||
if !package_json
|
||||
.get("scripts")
|
||||
.is_some_and(serde_json::Value::is_object)
|
||||
{
|
||||
return Err("project.bootstrap 要求 game/package.json 包含 scripts 对象".to_string());
|
||||
}
|
||||
let lock = match fs::symlink_metadata(game.join("package-lock.json")) {
|
||||
Ok(_) => Some(read_bootstrap_file(
|
||||
&game.join("package-lock.json"),
|
||||
"game/package-lock.json",
|
||||
)?),
|
||||
Err(error) if error.kind() == std::io::ErrorKind::NotFound => None,
|
||||
Err(error) => return Err(format!("读取 game/package-lock.json 失败:{error}")),
|
||||
};
|
||||
let command = crate::command_exec::run_project_bootstrap_command_at(root, timeout_seconds)
|
||||
.await
|
||||
.map_err(|error| error.to_string())?;
|
||||
let completed = command.exit_code == Some(0) && !command.timed_out;
|
||||
let status = if completed { "completed" } else { "failed" };
|
||||
let updated_at = unix_timestamp();
|
||||
let log_path = resolve_local_project_path(root, ".agent/logs/command.log")?;
|
||||
let package_sha256 = format!("{:x}", Sha256::digest(&package));
|
||||
let lock_sha256 = lock
|
||||
.as_ref()
|
||||
.map(|bytes| format!("{:x}", Sha256::digest(bytes)));
|
||||
let output = sanitize_project_verification_output(&command.output);
|
||||
let line = format!(
|
||||
"{updated_at} project.bootstrap status={} packageSha256={} lockSha256={} cwd=game\n{}\n",
|
||||
status,
|
||||
package_sha256,
|
||||
lock_sha256.as_deref().unwrap_or("none"),
|
||||
output
|
||||
);
|
||||
append_game_creator_private_file(&log_path, line.as_bytes(), "命令日志")?;
|
||||
record_command_run(
|
||||
root,
|
||||
GameCreationAppCommandRunState {
|
||||
command_id: "project.bootstrap".to_string(),
|
||||
status: if completed {
|
||||
GameCreationAppCommandRunStatus::Completed
|
||||
} else {
|
||||
GameCreationAppCommandRunStatus::Failed
|
||||
},
|
||||
output: output.clone(),
|
||||
log_path: ".agent/logs/command.log".to_string(),
|
||||
updated_at,
|
||||
},
|
||||
)?;
|
||||
Ok(ProjectBootstrapResult {
|
||||
status: status.to_string(),
|
||||
output,
|
||||
package_sha256,
|
||||
lock_sha256,
|
||||
log_path: ".agent/logs/command.log".to_string(),
|
||||
updated_at,
|
||||
})
|
||||
}
|
||||
@@ -659,30 +659,9 @@ where
|
||||
})
|
||||
}
|
||||
|
||||
pub(crate) async fn run_project_verification_with_commit_at<F>(
|
||||
root: &Path,
|
||||
script: &str,
|
||||
expected_command: &str,
|
||||
timeout_seconds: u64,
|
||||
cwd_relative: &str,
|
||||
durable_commit: F,
|
||||
) -> Result<ProjectVerificationResult, String>
|
||||
where
|
||||
F: FnOnce() -> Result<(), String>,
|
||||
{
|
||||
let spec = resolve_project_verification_spec_with_cwd_at(
|
||||
root,
|
||||
script,
|
||||
expected_command,
|
||||
timeout_seconds,
|
||||
cwd_relative,
|
||||
)?;
|
||||
run_project_verification_spec_with_commit_at(root, spec, durable_commit).await
|
||||
}
|
||||
|
||||
/// 跑一份**已解析好**的验证规格。
|
||||
///
|
||||
/// 从 [`run_project_verification_with_commit_at`] 拆出来,是为了让调用方能先把「项目侧预检」
|
||||
/// 从「解析 + 运行」合一的入口拆出来,是为了让调用方能先把「项目侧预检」
|
||||
/// (package.json / 脚本缺失或漂移 / 包管理器不支持等)与「跑起来之后的宿主侧事实」分开处理:
|
||||
/// 预检错误由调用方自己决定怎么表达,不必跟沙箱、日志这类宿主故障混成同一个字符串错误。
|
||||
pub(crate) async fn run_project_verification_spec_with_commit_at<F>(
|
||||
|
||||
@@ -7,7 +7,7 @@ import {
|
||||
/**
|
||||
* AGC 发布进度事件:Rust 在发布编排的每个阶段回传,渲染层只做展示。
|
||||
*
|
||||
* 事件名与 Rust `game_package_upload::GAME_PACKAGE_UPLOAD_PROGRESS_EVENT` 绑定:
|
||||
* 事件名与 Rust 发布编排回传的 `game-package-upload-progress` 事件绑定:
|
||||
* 分片上传的字节进度和「准备 / 上传 / 校验 / 送审」阶段切换走同一条事件,避免两条
|
||||
* 事件流在 UI 上互相覆盖。载荷只含标识、阶段、文案与字节数,不含 token、本地路径
|
||||
* 或整包字节。
|
||||
|
||||
@@ -393,7 +393,7 @@ npm run check
|
||||
> - **覆盖分工与缺口**:CI 覆盖 `server-rs`(全平台可跑,0 存量)与 **AGC 壳 Linux 档**;**AGC 壳的 Windows 生产口径在 Linux CI 上无法编译**(GTK/webkit 的 `-sys` 与 `ring` 需要 Linux 工具链),因此**只由本地 pre-push 覆盖**。
|
||||
> - **基线**:`scripts/warning-baseline.json`,键 = `路径 | 符号 | lint`(**不含行号**,行号只在输出里作附注,避免上游改一行导致整份基线漂移)。
|
||||
> 新增 → 退出码 1 并逐条打印;存量减少 → 只提示「可更新基线」;更新:`node scripts/check-rust-warnings.mjs --profile=<name> --update-baseline`(人工确认后随提交入库)。
|
||||
> 当前存量:`agc-windows` 14 条(`b04aceb57` 等 master 侧提交引入的上游告警,逐条见 `local://commit-1a86675f4-inventory.md`)、`agc-linux` 433 条(从 CI lane 日志抽取并去重,**刻意取超集**:含测试实例产物的假死告警,首轮 CI 跑出来的多余项只显示为「存量减少」而不判失败)、`server-rs` 0 条。
|
||||
> 当前存量:`agc-windows` 3 条(`main.rs` 2 条 + `game_distribution_publish.rs` 1 条;`b04aceb57` 等 master 侧提交引入的 14 条 exports/bootstrap 退役遗留告警已清理并从基线移除)、`agc-linux` 58 条(从 CI lane 日志抽取并去重,**刻意取超集**:含测试实例产物的假死告警,首轮 CI 跑出来的多余项只显示为「存量减少」而不判失败)、`server-rs` 0 条。
|
||||
> - **局限**:① `git push --no-verify` 可以绕过(CI 仍会跑,但只覆盖 Linux 档 + server-rs);② 本机 target 目录被污染时会读出假数字,取数前先 `cargo clean -p <crate>`;③ CI 不跑 clippy;④ 基线只保证「不新增」,不保证存量收敛;⑤ AGC 壳 Windows 档只有在 Windows 机器上推代码时才被检查。
|
||||
>
|
||||
> 以下小节是**历史记录**(`deny(warnings)` 时代的落法、AGC 门禁 predicate、harness 假告警边界、2026-10-06 基线表与检查命令),保留供追溯;其中的 Werror 接线与判据已随本 PR 撤销,`deny(warnings)` 在 tip 上**已 0 命中**。
|
||||
|
||||
@@ -7,51 +7,11 @@
|
||||
"targetDirPolicy": "profile 专属目录(默认 <tmp>/genarrative-warncheck/<profile>;可用 GENARRATIVE_WARNCHECK_TARGET_DIR 覆盖)",
|
||||
"scope": "只收 first-party 告警:apps/ai-game-creator-shell/src-tauri",
|
||||
"warnings": [
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/command_exec.rs",
|
||||
"symbol": "resolve_project_bootstrap_spec_at",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/command_exec.rs",
|
||||
"symbol": "run_project_bootstrap_command_at",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/export/draft/taonier/mod.rs",
|
||||
"symbol": "TaonierArtifactPackage",
|
||||
"lint": "unused_imports"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/export/draft/taonier/registry.rs",
|
||||
"symbol": "read_form",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/export/draft/taonier/script.rs",
|
||||
"symbol": "package_json_relative",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/game_distribution_publish.rs",
|
||||
"symbol": "snapshot",
|
||||
"lint": "unused_variables"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/game_package_upload.rs",
|
||||
"symbol": "ensure_staging_path_in_dir",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/game_package_upload.rs",
|
||||
"symbol": "GAME_PACKAGE_UPLOAD_PROGRESS_EVENT",
|
||||
"lint": "unused_imports"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/game_package_upload/runtime.rs",
|
||||
"symbol": "GAME_PACKAGE_UPLOAD_PROGRESS_EVENT",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/main.rs",
|
||||
"symbol": "definition",
|
||||
@@ -61,36 +21,6 @@
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/main.rs",
|
||||
"symbol": "multiple fields are never read",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project.rs",
|
||||
"symbol": "bootstrap::*",
|
||||
"lint": "unused_imports"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/bootstrap.rs",
|
||||
"symbol": "BOOTSTRAP_PACKAGE_MAX_BYTES",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/bootstrap.rs",
|
||||
"symbol": "ProjectBootstrapResult",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/bootstrap.rs",
|
||||
"symbol": "read_bootstrap_file",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/bootstrap.rs",
|
||||
"symbol": "run_project_bootstrap_at",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/verification.rs",
|
||||
"symbol": "run_project_verification_with_commit_at",
|
||||
"lint": "dead_code"
|
||||
}
|
||||
]
|
||||
},
|
||||
@@ -233,16 +163,6 @@
|
||||
"symbol": "project_command_git_path_is_sensitive",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/command_exec.rs",
|
||||
"symbol": "resolve_project_bootstrap_spec_at",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/command_exec.rs",
|
||||
"symbol": "run_project_bootstrap_command_at",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/command_exec.rs",
|
||||
"symbol": "validate_cargo_arguments",
|
||||
@@ -318,41 +238,11 @@
|
||||
"symbol": "job_name",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/export/draft/taonier/mod.rs",
|
||||
"symbol": "TaonierArtifactPackage",
|
||||
"lint": "unused_imports"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/export/draft/taonier/registry.rs",
|
||||
"symbol": "read_form",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/export/draft/taonier/script.rs",
|
||||
"symbol": "package_json_relative",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/game_distribution_publish.rs",
|
||||
"symbol": "snapshot",
|
||||
"lint": "unused_variables"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/game_package_upload.rs",
|
||||
"symbol": "GAME_PACKAGE_UPLOAD_PROGRESS_EVENT",
|
||||
"lint": "unused_imports"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/game_package_upload.rs",
|
||||
"symbol": "ensure_staging_path_in_dir",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/game_package_upload/runtime.rs",
|
||||
"symbol": "GAME_PACKAGE_UPLOAD_PROGRESS_EVENT",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/main.rs",
|
||||
"symbol": "definition",
|
||||
@@ -428,41 +318,11 @@
|
||||
"symbol": "valid_failure_kind",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project.rs",
|
||||
"symbol": "bootstrap::*",
|
||||
"lint": "unused_imports"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/bootstrap.rs",
|
||||
"symbol": "BOOTSTRAP_PACKAGE_MAX_BYTES",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/bootstrap.rs",
|
||||
"symbol": "ProjectBootstrapResult",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/bootstrap.rs",
|
||||
"symbol": "read_bootstrap_file",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/bootstrap.rs",
|
||||
"symbol": "run_project_bootstrap_at",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/filesystem.rs",
|
||||
"symbol": "acl_repair_attempted",
|
||||
"lint": "unused_assignments"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/project/verification.rs",
|
||||
"symbol": "run_project_verification_with_commit_at",
|
||||
"lint": "dead_code"
|
||||
},
|
||||
{
|
||||
"path": "apps/ai-game-creator-shell/src-tauri/src/windows.rs",
|
||||
"symbol": "configure_windows_background_tokio_command",
|
||||
|
||||
Reference in New Issue
Block a user