Skip to content

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config - #172

Open
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd
Open

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config#172
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd

Conversation

@yfblock

Copy link
Copy Markdown

Problem

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared board_reset_cmd and board_power_off_cmd. Under serde's flatten semantics the outer struct's own fields take priority, so TOML top-level values are captured by UbootConfig and the flattened LocalUbootConfig copies stay None.

LocalBackend (the local U-Boot runner) read the flattened copies via self.config.board_reset_cmd / self.config.board_power_off_cmd, so those hooks never observed the configured values and the reset / power-off commands silently never ran.

Fix

  • Mark the LocalUbootConfig copies #[serde(skip)] (and #[schemars(skip)]) as legacy Rust-API compatibility fields, so they no longer participate in deserialization and cannot be shadowed.
  • Pass board_reset_cmd / board_power_off_cmd into LocalBackend through its constructor from UbootConfig, falling back to the legacy fields for callers that still set them directly.
  • after_console_open / after_run now read self.reset_cmd / self.power_off_cmd.

Tests

  • uboot_config_parses_board_commands_at_top_level — verifies top-level parsing, single serialization of each key, and backend wiring.
  • local_backend_keeps_legacy_command_fields_usable — verifies the legacy fallback path.

All 313 lib tests pass.

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared
board_reset_cmd and board_power_off_cmd. Under serde flatten the outer
fields take priority, so LocalBackend (which read the flattened copy)
never observed the configured values and the reset/power-off hooks
silently never ran.
Mark the LocalUbootConfig copies #[serde(skip)] as legacy Rust-API
compatibility fields, and pass the commands into LocalBackend from
UbootConfig, falling back to the legacy fields for callers that still
set them directly.

@mai-team-appmai-team-appBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

审查结论

本 PR 修复了 U-Boot 本地运行时从 UbootConfig 读取 board_reset_cmd/board_power_off_cmd 的路径:将配置示例中的命令保持在顶层,并把顶层值传入 LocalBackend,同时保留旧 Rust API 字段的回退兼容。新增测试覆盖顶层 TOML 解析、序列化去重、后端接线和旧字段回退。

影响范围

变更影响 U-Boot 本地串口启动前的 reset 命令、运行结束后的 power-off 命令,以及 U-Boot 配置的 TOML/schema 表达;中英文 README 保持同步。远程 board backend 和其他运行方式未改变,整体范围看起来是隔离的。

验证与既有意见

  • PR 当前没有 GitHub check runs 或 status checks;未发现由本 PR 导致的 CI 失败。
  • 已核对 PR head 为 b1946a2dbbf00d1b1d0c97fe43d7ae9a55a83a69git diff --check 通过。
  • 本地无法运行 cargo fmt --checkcargo clippy --manifest-path ostool/Cargo.toml --all-features -- -D warningscargo test --manifest-path ostool/Cargo.toml --all-features,因为评审环境未安装 cargo;PR 描述声称 313 个 lib tests 通过,但本次未能独立复现。
  • 没有既有 review 或 issue comments;也未发现相关重复 PR。已考虑的验证缺口仅是缺少本地工具和真实硬件运行,未形成代码层面的未解决问题。

未发现需要阻止合并的问题,批准此次变更。

Powered by gpt-5.6-luna

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yfblock
, 'i'); if (__m === '*' || __re.test(location.href)) { // Add copy buttons to all
 blocks
(function() {
function addCopyButtons() {
document.querySelectorAll('pre code').forEach(function(codeBlock) {
if (codeBlock.parentElement.hasAttribute('data-copy-added')) return;
codeBlock.parentElement.setAttribute('data-copy-added', 'true');
var btn = document.createElement('button');
btn.textContent = 'Copy';
btn.style.cssText = 'position:absolute;top:4px;right:4px;padding:2px 8px;font-size:11px;background:#4ecdc4;border:none;border-radius:4px;color:#1a1a2e;cursor:pointer;opacity:0.7;transition:opacity 0.2s;';
btn.onmouseover = function() { this.style.opacity = '1'; };
btn.onmouseout = function() { this.style.opacity = '0.7'; };
btn.onclick = function() {
navigator.clipboard.writeText(codeBlock.textContent).then(function() {
btn.textContent = 'Copied!';
setTimeout(function() { btn.textContent = 'Copy'; }, 1500);
});
};
codeBlock.parentElement.style.position = 'relative';
codeBlock.parentElement.appendChild(btn);
});
}
addCopyButtons();
// Re-run on dynamic content
var observer = new MutationObserver(addCopyButtons);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Add Copy Buttons to Code Blocks]', __e); }
})();
(function(){
try {
var __m = "github.com";
var __re = new RegExp('^' + "github\\.com" + '
fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config by yfblock · Pull Request #172 · drivercraft/ostool · GitHub
Skip to content

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config - #172

Open
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd
Open

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config#172
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd

Conversation

@yfblock

Copy link
Copy Markdown

Problem

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared board_reset_cmd and board_power_off_cmd. Under serde's flatten semantics the outer struct's own fields take priority, so TOML top-level values are captured by UbootConfig and the flattened LocalUbootConfig copies stay None.

LocalBackend (the local U-Boot runner) read the flattened copies via self.config.board_reset_cmd / self.config.board_power_off_cmd, so those hooks never observed the configured values and the reset / power-off commands silently never ran.

Fix

  • Mark the LocalUbootConfig copies #[serde(skip)] (and #[schemars(skip)]) as legacy Rust-API compatibility fields, so they no longer participate in deserialization and cannot be shadowed.
  • Pass board_reset_cmd / board_power_off_cmd into LocalBackend through its constructor from UbootConfig, falling back to the legacy fields for callers that still set them directly.
  • after_console_open / after_run now read self.reset_cmd / self.power_off_cmd.

Tests

  • uboot_config_parses_board_commands_at_top_level — verifies top-level parsing, single serialization of each key, and backend wiring.
  • local_backend_keeps_legacy_command_fields_usable — verifies the legacy fallback path.

All 313 lib tests pass.

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared
board_reset_cmd and board_power_off_cmd. Under serde flatten the outer
fields take priority, so LocalBackend (which read the flattened copy)
never observed the configured values and the reset/power-off hooks
silently never ran.
Mark the LocalUbootConfig copies #[serde(skip)] as legacy Rust-API
compatibility fields, and pass the commands into LocalBackend from
UbootConfig, falling back to the legacy fields for callers that still
set them directly.

@mai-team-appmai-team-appBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

审查结论

本 PR 修复了 U-Boot 本地运行时从 UbootConfig 读取 board_reset_cmd/board_power_off_cmd 的路径:将配置示例中的命令保持在顶层,并把顶层值传入 LocalBackend,同时保留旧 Rust API 字段的回退兼容。新增测试覆盖顶层 TOML 解析、序列化去重、后端接线和旧字段回退。

影响范围

变更影响 U-Boot 本地串口启动前的 reset 命令、运行结束后的 power-off 命令,以及 U-Boot 配置的 TOML/schema 表达;中英文 README 保持同步。远程 board backend 和其他运行方式未改变,整体范围看起来是隔离的。

验证与既有意见

  • PR 当前没有 GitHub check runs 或 status checks;未发现由本 PR 导致的 CI 失败。
  • 已核对 PR head 为 b1946a2dbbf00d1b1d0c97fe43d7ae9a55a83a69git diff --check 通过。
  • 本地无法运行 cargo fmt --checkcargo clippy --manifest-path ostool/Cargo.toml --all-features -- -D warningscargo test --manifest-path ostool/Cargo.toml --all-features,因为评审环境未安装 cargo;PR 描述声称 313 个 lib tests 通过,但本次未能独立复现。
  • 没有既有 review 或 issue comments;也未发现相关重复 PR。已考虑的验证缺口仅是缺少本地工具和真实硬件运行,未形成代码层面的未解决问题。

未发现需要阻止合并的问题,批准此次变更。

Powered by gpt-5.6-luna

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yfblock
, 'i'); if (__m === '*' || __re.test(location.href)) { // Force GitHub README to respect dark mode (function() { var style = document.createElement('style'); style.textContent = ' .markdown-body { color-scheme: dark light; } .markdown-body pre { background: #161b22 !important; } .markdown-body code { background: rgba(110, 118, 129, 0.4) !important; } .markdown-body table th, .markdown-body table td { border-color: #30363d !important; } .markdown-body img { background: #0d1117; } .markdown-body blockquote { border-left-color: #8b949e; } .markdown-body hr { border-color: #30363d; } '; document.head.appendChild(style); })(); } } catch(__e) { console.warn('[Userscript:GitHub Dark Mode README Fix]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config by yfblock · Pull Request #172 · drivercraft/ostool · GitHub
Skip to content

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config - #172

Open
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd
Open

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config#172
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd

Conversation

@yfblock

Copy link
Copy Markdown

Problem

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared board_reset_cmd and board_power_off_cmd. Under serde's flatten semantics the outer struct's own fields take priority, so TOML top-level values are captured by UbootConfig and the flattened LocalUbootConfig copies stay None.

LocalBackend (the local U-Boot runner) read the flattened copies via self.config.board_reset_cmd / self.config.board_power_off_cmd, so those hooks never observed the configured values and the reset / power-off commands silently never ran.

Fix

  • Mark the LocalUbootConfig copies #[serde(skip)] (and #[schemars(skip)]) as legacy Rust-API compatibility fields, so they no longer participate in deserialization and cannot be shadowed.
  • Pass board_reset_cmd / board_power_off_cmd into LocalBackend through its constructor from UbootConfig, falling back to the legacy fields for callers that still set them directly.
  • after_console_open / after_run now read self.reset_cmd / self.power_off_cmd.

Tests

  • uboot_config_parses_board_commands_at_top_level — verifies top-level parsing, single serialization of each key, and backend wiring.
  • local_backend_keeps_legacy_command_fields_usable — verifies the legacy fallback path.

All 313 lib tests pass.

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared
board_reset_cmd and board_power_off_cmd. Under serde flatten the outer
fields take priority, so LocalBackend (which read the flattened copy)
never observed the configured values and the reset/power-off hooks
silently never ran.
Mark the LocalUbootConfig copies #[serde(skip)] as legacy Rust-API
compatibility fields, and pass the commands into LocalBackend from
UbootConfig, falling back to the legacy fields for callers that still
set them directly.

@mai-team-appmai-team-appBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

审查结论

本 PR 修复了 U-Boot 本地运行时从 UbootConfig 读取 board_reset_cmd/board_power_off_cmd 的路径:将配置示例中的命令保持在顶层,并把顶层值传入 LocalBackend,同时保留旧 Rust API 字段的回退兼容。新增测试覆盖顶层 TOML 解析、序列化去重、后端接线和旧字段回退。

影响范围

变更影响 U-Boot 本地串口启动前的 reset 命令、运行结束后的 power-off 命令,以及 U-Boot 配置的 TOML/schema 表达;中英文 README 保持同步。远程 board backend 和其他运行方式未改变,整体范围看起来是隔离的。

验证与既有意见

  • PR 当前没有 GitHub check runs 或 status checks;未发现由本 PR 导致的 CI 失败。
  • 已核对 PR head 为 b1946a2dbbf00d1b1d0c97fe43d7ae9a55a83a69git diff --check 通过。
  • 本地无法运行 cargo fmt --checkcargo clippy --manifest-path ostool/Cargo.toml --all-features -- -D warningscargo test --manifest-path ostool/Cargo.toml --all-features,因为评审环境未安装 cargo;PR 描述声称 313 个 lib tests 通过,但本次未能独立复现。
  • 没有既有 review 或 issue comments;也未发现相关重复 PR。已考虑的验证缺口仅是缺少本地工具和真实硬件运行,未形成代码层面的未解决问题。

未发现需要阻止合并的问题,批准此次变更。

Powered by gpt-5.6-luna

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yfblock
, 'i'); if (__m === '*' || __re.test(location.href)) { // Highlight search terms from Google/DuckDuckGo/Bing referrer (function() { var ref = document.referrer; var terms = []; if (ref.includes('google.com') || ref.includes('duckduckgo.com') || ref.includes('bing.com')) { var url = new URL(ref); var q = url.searchParams.get('q') || url.searchParams.get('p'); if (q) { terms = q.split(/\s+/).filter(function(t) { return t.length > 2; }); } } if (terms.length === 0) return; var style = document.createElement('style'); style.textContent = '.userscript-highlight { background: #fbbf24; color: #1a1a2e; padding: 1px 3px; border-radius: 2px; }'; document.head.appendChild(style); function highlight(node) { if (node.nodeType === 3) { // text node var text = node.textContent; var found = false; terms.forEach(function(term) { var regex = new RegExp('(' + term.replace(/[.*+?^${}()|[\]\\]/g, '\\') + ')', 'gi'); if (regex.test(text)) { found = true; var frag = document.createDocumentFragment(); var parts = text.split(regex); parts.forEach(function(part, i) { if (i % 2 === 0) { frag.appendChild(document.createTextNode(part)); } else { var span = document.createElement('span'); span.className = 'userscript-highlight'; span.textContent = part; frag.appendChild(span); } }); node.parentNode.replaceChild(frag, node); } }); } else if (node.nodeType === 1 && node.childNodes) { // element var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT']; if (!skipTags.includes(node.tagName)) { Array.from(node.childNodes).forEach(highlight); } } } highlight(document.body); // Re-highlight on dynamic content var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1 || node.nodeType === 3) highlight(node); }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config by yfblock · Pull Request #172 · drivercraft/ostool · GitHub
Skip to content

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config - #172

Open
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd
Open

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config#172
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd

Conversation

@yfblock

Copy link
Copy Markdown

Problem

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared board_reset_cmd and board_power_off_cmd. Under serde's flatten semantics the outer struct's own fields take priority, so TOML top-level values are captured by UbootConfig and the flattened LocalUbootConfig copies stay None.

LocalBackend (the local U-Boot runner) read the flattened copies via self.config.board_reset_cmd / self.config.board_power_off_cmd, so those hooks never observed the configured values and the reset / power-off commands silently never ran.

Fix

  • Mark the LocalUbootConfig copies #[serde(skip)] (and #[schemars(skip)]) as legacy Rust-API compatibility fields, so they no longer participate in deserialization and cannot be shadowed.
  • Pass board_reset_cmd / board_power_off_cmd into LocalBackend through its constructor from UbootConfig, falling back to the legacy fields for callers that still set them directly.
  • after_console_open / after_run now read self.reset_cmd / self.power_off_cmd.

Tests

  • uboot_config_parses_board_commands_at_top_level — verifies top-level parsing, single serialization of each key, and backend wiring.
  • local_backend_keeps_legacy_command_fields_usable — verifies the legacy fallback path.

All 313 lib tests pass.

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared
board_reset_cmd and board_power_off_cmd. Under serde flatten the outer
fields take priority, so LocalBackend (which read the flattened copy)
never observed the configured values and the reset/power-off hooks
silently never ran.
Mark the LocalUbootConfig copies #[serde(skip)] as legacy Rust-API
compatibility fields, and pass the commands into LocalBackend from
UbootConfig, falling back to the legacy fields for callers that still
set them directly.

@mai-team-appmai-team-appBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

审查结论

本 PR 修复了 U-Boot 本地运行时从 UbootConfig 读取 board_reset_cmd/board_power_off_cmd 的路径:将配置示例中的命令保持在顶层,并把顶层值传入 LocalBackend,同时保留旧 Rust API 字段的回退兼容。新增测试覆盖顶层 TOML 解析、序列化去重、后端接线和旧字段回退。

影响范围

变更影响 U-Boot 本地串口启动前的 reset 命令、运行结束后的 power-off 命令,以及 U-Boot 配置的 TOML/schema 表达;中英文 README 保持同步。远程 board backend 和其他运行方式未改变,整体范围看起来是隔离的。

验证与既有意见

  • PR 当前没有 GitHub check runs 或 status checks;未发现由本 PR 导致的 CI 失败。
  • 已核对 PR head 为 b1946a2dbbf00d1b1d0c97fe43d7ae9a55a83a69git diff --check 通过。
  • 本地无法运行 cargo fmt --checkcargo clippy --manifest-path ostool/Cargo.toml --all-features -- -D warningscargo test --manifest-path ostool/Cargo.toml --all-features,因为评审环境未安装 cargo;PR 描述声称 313 个 lib tests 通过,但本次未能独立复现。
  • 没有既有 review 或 issue comments;也未发现相关重复 PR。已考虑的验证缺口仅是缺少本地工具和真实硬件运行,未形成代码层面的未解决问题。

未发现需要阻止合并的问题,批准此次变更。

Powered by gpt-5.6-luna

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yfblock
, 'i'); if (__m === '*' || __re.test(location.href)) { // Strip utm_, fbclid, gclid, etc. from all links on page (function() { var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content', 'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid', 'ref', 'ref_src', 'source', 'medium', 'campaign']; function cleanUrl(url) { try { var u = new URL(url, window.location.origin); var changed = false; trackingParams.forEach(function(p) { if (u.searchParams.has(p)) { u.searchParams.delete(p); changed = true; } }); return changed ? u.toString() : url; } catch (e) { return url; } } function cleanLinks() { document.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } cleanLinks(); var observer = new MutationObserver(function(mutations) { mutations.forEach(function(m) { m.addedNodes.forEach(function(node) { if (node.nodeType === 1) { if (node.tagName === 'A') cleanLinks(); node.querySelectorAll('a[href]').forEach(function(a) { var clean = cleanUrl(a.href); if (clean !== a.href) a.href = clean; }); } }); }); }); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); } })(); (function(){ try { var __m = "youtube.com"; var __re = new RegExp('^' + "youtube\\.com" + ' fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config by yfblock · Pull Request #172 · drivercraft/ostool · GitHub
Skip to content

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config - #172

Open
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd
Open

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config#172
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd

Conversation

@yfblock

Copy link
Copy Markdown

Problem

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared board_reset_cmd and board_power_off_cmd. Under serde's flatten semantics the outer struct's own fields take priority, so TOML top-level values are captured by UbootConfig and the flattened LocalUbootConfig copies stay None.

LocalBackend (the local U-Boot runner) read the flattened copies via self.config.board_reset_cmd / self.config.board_power_off_cmd, so those hooks never observed the configured values and the reset / power-off commands silently never ran.

Fix

  • Mark the LocalUbootConfig copies #[serde(skip)] (and #[schemars(skip)]) as legacy Rust-API compatibility fields, so they no longer participate in deserialization and cannot be shadowed.
  • Pass board_reset_cmd / board_power_off_cmd into LocalBackend through its constructor from UbootConfig, falling back to the legacy fields for callers that still set them directly.
  • after_console_open / after_run now read self.reset_cmd / self.power_off_cmd.

Tests

  • uboot_config_parses_board_commands_at_top_level — verifies top-level parsing, single serialization of each key, and backend wiring.
  • local_backend_keeps_legacy_command_fields_usable — verifies the legacy fallback path.

All 313 lib tests pass.

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared
board_reset_cmd and board_power_off_cmd. Under serde flatten the outer
fields take priority, so LocalBackend (which read the flattened copy)
never observed the configured values and the reset/power-off hooks
silently never ran.
Mark the LocalUbootConfig copies #[serde(skip)] as legacy Rust-API
compatibility fields, and pass the commands into LocalBackend from
UbootConfig, falling back to the legacy fields for callers that still
set them directly.

@mai-team-appmai-team-appBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

审查结论

本 PR 修复了 U-Boot 本地运行时从 UbootConfig 读取 board_reset_cmd/board_power_off_cmd 的路径:将配置示例中的命令保持在顶层,并把顶层值传入 LocalBackend,同时保留旧 Rust API 字段的回退兼容。新增测试覆盖顶层 TOML 解析、序列化去重、后端接线和旧字段回退。

影响范围

变更影响 U-Boot 本地串口启动前的 reset 命令、运行结束后的 power-off 命令,以及 U-Boot 配置的 TOML/schema 表达;中英文 README 保持同步。远程 board backend 和其他运行方式未改变,整体范围看起来是隔离的。

验证与既有意见

  • PR 当前没有 GitHub check runs 或 status checks;未发现由本 PR 导致的 CI 失败。
  • 已核对 PR head 为 b1946a2dbbf00d1b1d0c97fe43d7ae9a55a83a69git diff --check 通过。
  • 本地无法运行 cargo fmt --checkcargo clippy --manifest-path ostool/Cargo.toml --all-features -- -D warningscargo test --manifest-path ostool/Cargo.toml --all-features,因为评审环境未安装 cargo;PR 描述声称 313 个 lib tests 通过,但本次未能独立复现。
  • 没有既有 review 或 issue comments;也未发现相关重复 PR。已考虑的验证缺口仅是缺少本地工具和真实硬件运行,未形成代码层面的未解决问题。

未发现需要阻止合并的问题,批准此次变更。

Powered by gpt-5.6-luna

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yfblock
, 'i'); if (__m === '*' || __re.test(location.href)) { // Auto-enable theater mode on YouTube (function() { function tryTheater() { var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]'); if (btn && !btn.classList.contains('activated')) { btn.click(); } } // Try immediately tryTheater(); // Try after navigation (SPA) var lastUrl = location.href; setInterval(function() { if (location.href !== lastUrl) { lastUrl = location.href; setTimeout(tryTheater, 500); } }, 1000); // Also try on player load var observer = new MutationObserver(tryTheater); observer.observe(document.body, { childList: true, subtree: true }); })(); } } catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config by yfblock · Pull Request #172 · drivercraft/ostool · GitHub
Skip to content

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config - #172

Open
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd
Open

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config#172
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd

Conversation

@yfblock

Copy link
Copy Markdown

Problem

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared board_reset_cmd and board_power_off_cmd. Under serde's flatten semantics the outer struct's own fields take priority, so TOML top-level values are captured by UbootConfig and the flattened LocalUbootConfig copies stay None.

LocalBackend (the local U-Boot runner) read the flattened copies via self.config.board_reset_cmd / self.config.board_power_off_cmd, so those hooks never observed the configured values and the reset / power-off commands silently never ran.

Fix

  • Mark the LocalUbootConfig copies #[serde(skip)] (and #[schemars(skip)]) as legacy Rust-API compatibility fields, so they no longer participate in deserialization and cannot be shadowed.
  • Pass board_reset_cmd / board_power_off_cmd into LocalBackend through its constructor from UbootConfig, falling back to the legacy fields for callers that still set them directly.
  • after_console_open / after_run now read self.reset_cmd / self.power_off_cmd.

Tests

  • uboot_config_parses_board_commands_at_top_level — verifies top-level parsing, single serialization of each key, and backend wiring.
  • local_backend_keeps_legacy_command_fields_usable — verifies the legacy fallback path.

All 313 lib tests pass.

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared
board_reset_cmd and board_power_off_cmd. Under serde flatten the outer
fields take priority, so LocalBackend (which read the flattened copy)
never observed the configured values and the reset/power-off hooks
silently never ran.
Mark the LocalUbootConfig copies #[serde(skip)] as legacy Rust-API
compatibility fields, and pass the commands into LocalBackend from
UbootConfig, falling back to the legacy fields for callers that still
set them directly.

@mai-team-appmai-team-appBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

审查结论

本 PR 修复了 U-Boot 本地运行时从 UbootConfig 读取 board_reset_cmd/board_power_off_cmd 的路径:将配置示例中的命令保持在顶层,并把顶层值传入 LocalBackend,同时保留旧 Rust API 字段的回退兼容。新增测试覆盖顶层 TOML 解析、序列化去重、后端接线和旧字段回退。

影响范围

变更影响 U-Boot 本地串口启动前的 reset 命令、运行结束后的 power-off 命令,以及 U-Boot 配置的 TOML/schema 表达;中英文 README 保持同步。远程 board backend 和其他运行方式未改变,整体范围看起来是隔离的。

验证与既有意见

  • PR 当前没有 GitHub check runs 或 status checks;未发现由本 PR 导致的 CI 失败。
  • 已核对 PR head 为 b1946a2dbbf00d1b1d0c97fe43d7ae9a55a83a69git diff --check 通过。
  • 本地无法运行 cargo fmt --checkcargo clippy --manifest-path ostool/Cargo.toml --all-features -- -D warningscargo test --manifest-path ostool/Cargo.toml --all-features,因为评审环境未安装 cargo;PR 描述声称 313 个 lib tests 通过,但本次未能独立复现。
  • 没有既有 review 或 issue comments;也未发现相关重复 PR。已考虑的验证缺口仅是缺少本地工具和真实硬件运行,未形成代码层面的未解决问题。

未发现需要阻止合并的问题,批准此次变更。

Powered by gpt-5.6-luna

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yfblock
, 'i'); if (__m === '*' || __re.test(location.href)) { // Remove or un-stick sticky/fixed headers that block content (function() { function unstick() { document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) { if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') { el.style.position = 'static'; el.style.top = 'auto'; el.style.zIndex = 'auto'; } }); } unstick(); var observer = new MutationObserver(unstick); observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] }); })(); } } catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); } })(); (function(){ try { var __m = "*"; var __re = new RegExp('^' + ".*" + ' fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config by yfblock · Pull Request #172 · drivercraft/ostool · GitHub
Skip to content

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config - #172

Open
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd
Open

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config#172
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd

Conversation

@yfblock

Copy link
Copy Markdown

Problem

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared board_reset_cmd and board_power_off_cmd. Under serde's flatten semantics the outer struct's own fields take priority, so TOML top-level values are captured by UbootConfig and the flattened LocalUbootConfig copies stay None.

LocalBackend (the local U-Boot runner) read the flattened copies via self.config.board_reset_cmd / self.config.board_power_off_cmd, so those hooks never observed the configured values and the reset / power-off commands silently never ran.

Fix

  • Mark the LocalUbootConfig copies #[serde(skip)] (and #[schemars(skip)]) as legacy Rust-API compatibility fields, so they no longer participate in deserialization and cannot be shadowed.
  • Pass board_reset_cmd / board_power_off_cmd into LocalBackend through its constructor from UbootConfig, falling back to the legacy fields for callers that still set them directly.
  • after_console_open / after_run now read self.reset_cmd / self.power_off_cmd.

Tests

  • uboot_config_parses_board_commands_at_top_level — verifies top-level parsing, single serialization of each key, and backend wiring.
  • local_backend_keeps_legacy_command_fields_usable — verifies the legacy fallback path.

All 313 lib tests pass.

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared
board_reset_cmd and board_power_off_cmd. Under serde flatten the outer
fields take priority, so LocalBackend (which read the flattened copy)
never observed the configured values and the reset/power-off hooks
silently never ran.
Mark the LocalUbootConfig copies #[serde(skip)] as legacy Rust-API
compatibility fields, and pass the commands into LocalBackend from
UbootConfig, falling back to the legacy fields for callers that still
set them directly.

@mai-team-appmai-team-appBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

审查结论

本 PR 修复了 U-Boot 本地运行时从 UbootConfig 读取 board_reset_cmd/board_power_off_cmd 的路径:将配置示例中的命令保持在顶层,并把顶层值传入 LocalBackend,同时保留旧 Rust API 字段的回退兼容。新增测试覆盖顶层 TOML 解析、序列化去重、后端接线和旧字段回退。

影响范围

变更影响 U-Boot 本地串口启动前的 reset 命令、运行结束后的 power-off 命令,以及 U-Boot 配置的 TOML/schema 表达;中英文 README 保持同步。远程 board backend 和其他运行方式未改变,整体范围看起来是隔离的。

验证与既有意见

  • PR 当前没有 GitHub check runs 或 status checks;未发现由本 PR 导致的 CI 失败。
  • 已核对 PR head 为 b1946a2dbbf00d1b1d0c97fe43d7ae9a55a83a69git diff --check 通过。
  • 本地无法运行 cargo fmt --checkcargo clippy --manifest-path ostool/Cargo.toml --all-features -- -D warningscargo test --manifest-path ostool/Cargo.toml --all-features,因为评审环境未安装 cargo;PR 描述声称 313 个 lib tests 通过,但本次未能独立复现。
  • 没有既有 review 或 issue comments;也未发现相关重复 PR。已考虑的验证缺口仅是缺少本地工具和真实硬件运行,未形成代码层面的未解决问题。

未发现需要阻止合并的问题,批准此次变更。

Powered by gpt-5.6-luna

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yfblock
, 'i'); if (__m === '*' || __re.test(location.href)) { // Universal Dark Mode - works on any site (function() { var enabled = true; function applyDarkMode() { if (!enabled) return; // Create style element if it doesn't exist var style = document.getElementById('universal-dark-mode-style'); if (!style) { style = document.createElement('style'); style.id = 'universal-dark-mode-style'; document.head.appendChild(style); } // Dark mode CSS - inverts colors but preserves images/video style.textContent = ' /* Invert everything except media */ html { filter: invert(1) hue-rotate(180deg) !important; background: #1a1a2e !important; } /* Restore images, videos, iframes, canvas */ img, video, iframe, canvas, svg, picture, [style*="background-image"] { filter: invert(1) hue-rotate(180deg) !important; } /* Preserve specific elements that should not be inverted */ .no-dark-mode, .no-dark-mode *, [data-theme="light"], [data-theme="light"], .ace_editor, .ace_editor *, .CodeMirror, .CodeMirror *, .monaco-editor, .monaco-editor *, .markdown-body pre, .markdown-body pre *, .highlight, .highlight *, pre code, pre code * { filter: none !important; } /* Fix common UI elements */ .modal, .popup, .dropdown-menu, .tooltip, .popover { filter: invert(1) hue-rotate(180deg) !important; background: #2d2d44 !important; border-color: #444 !important; } /* Scrollbars */ ::-webkit-scrollbar { background: #1a1a2e !important; } ::-webkit-scrollbar-thumb { background: #444 !important; } ::-webkit-scrollbar-thumb:hover { background: #555 !important; } /* Selection */ ::selection { background: #4ecdc4 !important; color: #1a1a2e !important; } ::-moz-selection { background: #4ecdc4 !important; color: #1a1a2e !important; } '; } function removeDarkMode() { var style = document.getElementById('universal-dark-mode-style'); if (style) style.remove(); } // Toggle with Alt+Shift+D document.addEventListener('keydown', function(e) { if (e.altKey && e.shiftKey && e.key === 'D') { e.preventDefault(); enabled = !enabled; if (enabled) { applyDarkMode(); console.log('[Universal Dark Mode] Enabled'); } else { removeDarkMode(); console.log('[Universal Dark Mode] Disabled'); } } }); // Apply on load applyDarkMode(); // Re-apply on dynamic content var observer = new MutationObserver(function(mutations) { if (enabled && !document.getElementById('universal-dark-mode-style')) { applyDarkMode(); } }); observer.observe(document.head, { childList: true }); console.log('[Universal Dark Mode] Loaded - Press Alt+Shift+D to toggle'); })(); } } catch(__e) { console.warn('[Userscript:Universal Dark Mode]', __e); } })(); })(); fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config by yfblock · Pull Request #172 · drivercraft/ostool · GitHub
Skip to content

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config - #172

Open
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd
Open

fix(ostool): honor board_reset_cmd/board_power_off_cmd from uboot config#172
yfblock wants to merge 1 commit into
drivercraft:mainfrom
yfblock:fix/board-reset-cmd

Conversation

@yfblock

Copy link
Copy Markdown

Problem

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared board_reset_cmd and board_power_off_cmd. Under serde's flatten semantics the outer struct's own fields take priority, so TOML top-level values are captured by UbootConfig and the flattened LocalUbootConfig copies stay None.

LocalBackend (the local U-Boot runner) read the flattened copies via self.config.board_reset_cmd / self.config.board_power_off_cmd, so those hooks never observed the configured values and the reset / power-off commands silently never ran.

Fix

  • Mark the LocalUbootConfig copies #[serde(skip)] (and #[schemars(skip)]) as legacy Rust-API compatibility fields, so they no longer participate in deserialization and cannot be shadowed.
  • Pass board_reset_cmd / board_power_off_cmd into LocalBackend through its constructor from UbootConfig, falling back to the legacy fields for callers that still set them directly.
  • after_console_open / after_run now read self.reset_cmd / self.power_off_cmd.

Tests

  • uboot_config_parses_board_commands_at_top_level — verifies top-level parsing, single serialization of each key, and backend wiring.
  • local_backend_keeps_legacy_command_fields_usable — verifies the legacy fallback path.

All 313 lib tests pass.

UbootConfig and the #[serde(flatten)]-ed LocalUbootConfig both declared
board_reset_cmd and board_power_off_cmd. Under serde flatten the outer
fields take priority, so LocalBackend (which read the flattened copy)
never observed the configured values and the reset/power-off hooks
silently never ran.
Mark the LocalUbootConfig copies #[serde(skip)] as legacy Rust-API
compatibility fields, and pass the commands into LocalBackend from
UbootConfig, falling back to the legacy fields for callers that still
set them directly.

@mai-team-appmai-team-appBot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

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

审查结论

本 PR 修复了 U-Boot 本地运行时从 UbootConfig 读取 board_reset_cmd/board_power_off_cmd 的路径:将配置示例中的命令保持在顶层,并把顶层值传入 LocalBackend,同时保留旧 Rust API 字段的回退兼容。新增测试覆盖顶层 TOML 解析、序列化去重、后端接线和旧字段回退。

影响范围

变更影响 U-Boot 本地串口启动前的 reset 命令、运行结束后的 power-off 命令,以及 U-Boot 配置的 TOML/schema 表达;中英文 README 保持同步。远程 board backend 和其他运行方式未改变,整体范围看起来是隔离的。

验证与既有意见

  • PR 当前没有 GitHub check runs 或 status checks;未发现由本 PR 导致的 CI 失败。
  • 已核对 PR head 为 b1946a2dbbf00d1b1d0c97fe43d7ae9a55a83a69git diff --check 通过。
  • 本地无法运行 cargo fmt --checkcargo clippy --manifest-path ostool/Cargo.toml --all-features -- -D warningscargo test --manifest-path ostool/Cargo.toml --all-features,因为评审环境未安装 cargo;PR 描述声称 313 个 lib tests 通过,但本次未能独立复现。
  • 没有既有 review 或 issue comments;也未发现相关重复 PR。已考虑的验证缺口仅是缺少本地工具和真实硬件运行,未形成代码层面的未解决问题。

未发现需要阻止合并的问题,批准此次变更。

Powered by gpt-5.6-luna

Sign up for freeto join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant

@yfblock