fix: keep Makelore branding first in the sidebar
This commit is contained in:
@@ -8,11 +8,11 @@
|
||||
- Worktree: /Users/chillishark/Makelore 麦洛/.codex-worktrees/makelore/20260929-empty-work-merge-39c633d0
|
||||
- Base commit: a77ddbd6813bb71d490544edfef6e1f35240070f
|
||||
- Owner: codex
|
||||
- Status: Ready for Integration
|
||||
- Status: Planning
|
||||
|
||||
## Scope
|
||||
|
||||
- Move the existing “编程 Code” module-home return entry from the project configuration sidebar into the Coding chat/workspace sidebar top row above the brand. Retain its `/module-select` target and the configuration page's own back action.
|
||||
- Move the existing “编程 Code” module-home return entry from the project configuration sidebar into the Coding chat/workspace sidebar navigation row immediately below the topmost brand. Retain its `/module-select` target and the configuration page's own back action.
|
||||
|
||||
## Intent And Constraints
|
||||
|
||||
@@ -29,7 +29,7 @@
|
||||
|
||||
## Outcome
|
||||
|
||||
- Reused the existing ModuleSwitcher at the top left above the brand in the `/chat` sidebar, aligned with the collapse control on the right, retaining its accessible return-home label and `/module-select` action. Project configuration and nested resource pages omit the entire sidebar header block, so no empty placeholder remains. Existing configuration back action, sidebar resizing/peek and other module controls are unchanged. README synchronized.
|
||||
- Reused the existing ModuleSwitcher at the left of the navigation row below the topmost brand in the `/chat` sidebar, aligned with the collapse control on the right, retaining its accessible return-home label and `/module-select` action. Project configuration and nested resource pages omit the entire sidebar header block, so no empty placeholder remains. Existing configuration back action, sidebar resizing/peek and other module controls are unchanged. README synchronized.
|
||||
|
||||
## Verification
|
||||
|
||||
@@ -43,7 +43,7 @@
|
||||
|
||||
## Promotion Candidates
|
||||
|
||||
- Target: canonical classroom navigation when next integrated. Proposal: Code module-home return is visible at the upper left above the chat sidebar brand, aligned with the right-side collapse control and omitted from project configuration/resource sidebars; original configuration back remains. Evidence: explicit user confirmation, existing component reuse, actual Electron navigation and screenshots. No architecture or module-target change; no further product confirmation required.
|
||||
- Target: canonical classroom navigation when next integrated. Proposal: Code module-home return is visible below the topmost chat sidebar brand, aligned with the right-side collapse control and omitted from project configuration/resource sidebars; original configuration back remains. Evidence: explicit user confirmation, existing component reuse, actual Electron navigation and screenshots. No architecture or module-target change; no further product confirmation required.
|
||||
|
||||
## Follow-up: Update The Temporary Renderer
|
||||
|
||||
@@ -72,3 +72,11 @@
|
||||
|
||||
- Temporary app updated successfully from the newest built teacher-composer-actions source (8af0ca7), retaining grouped introductions, empty-work behavior and all earlier overlays. Running JS is `index-BSBCYLkH.js`, CSS `index-CA1PKQZ_.css`; generated source is `/var/folders/mx/ltbgwsks5_n8zllj69p_wbcw0000gn/T/makelore-trial-tdq_nuah/code-back-toprow-33d87a81/source`. Main PID 32583/profile remain unchanged.
|
||||
- Actual live geometry confirms exactly one collapse control, same horizontal center, no overlap, 13px inset from the sidebar right edge and navigation above the brand. Current account, rendered messages, teacher text/panel, Work tab and all 14 drafts match the pre-refresh snapshot; all 34 recorded data files have unchanged hashes. Zero alerts. Normal runtime lease released, prior background throttling restored and the inspector opened for this refresh closed. Launch/guidance provenance now points at the combined built Renderer, including the new 163f262 overlay; separate temporary CSS injection is no longer needed for the preserved teacher-controls update. No paid validation prompt, main merge, push or formal-install change.
|
||||
|
||||
|
||||
## Follow-up: Brand First
|
||||
|
||||
- User corrects the order using a brand screenshot: the Makelore logo/name/caption must be at the top. Keep the return/collapse row directly beneath it with left/right alignment. This supersedes the previous interpretation that navigation comes before branding, and includes updating the same trial.
|
||||
- Project Context Loaded / Planning Gate: Passed. Same-task feature ownership, branch/worktree/base verified. Entry, positioning, integrated state, decisions, architecture/domain and other previously loaded context are unchanged from 1329d23; active record and peer scopes read again. The teacher-controls task is now ready and already preserved in the trial. No semantic conflict or new shared-memory write. Only reorder existing Sidebar markup, align the existing E2E/README description, verify and refresh the latest generated Renderer with existing state preservation.
|
||||
|
||||
- Reordered only the existing Sidebar brand/control blocks. Updated README and the existing Electron scenario to require brand-first positioning while keeping the same-row/right-edge, narrow-width, collapsed return and configuration-route checks. Typecheck, scoped lint, production build and the complete existing navigation scenario passed (1/1); inspected the actual default-width screenshot. No new behavior or dependency was introduced.
|
||||
|
||||
@@ -31,7 +31,7 @@ Makelore 是一个面向软件、视觉创作、智能机器人与个人云智
|
||||
- macOS 窗口按钮:红色关闭当前窗口,全屏时先退出全屏再关闭;黄色最小化,绿色保留原生缩放/全屏行为。关窗后应用和进行中的后台任务继续运行,点击 Dock、托盘或菜单可重新打开窗口;`Cmd+Q` 退出应用。
|
||||
- 桌面文本右键菜单:主 Renderer 窗口由 Electron Main 提供原生“剪切、复制、粘贴、全选”操作;菜单只在可编辑区域或已有文本选择时出现,普通空白区域不显示,也不向 Renderer 暴露剪贴板 IPC。
|
||||
- AI 编程核心对话运行时:Electron Main 按需启动一个长驻 Pi Agent Server,同一进程内为每条 Conversation 建立独立的 Runtime、Session、凭证视图、扩展上下文和 JSONL 通道,同时复用 Pi 模块与进程启动成本;Server 异常退出时所有旧通道统一失效,下一次恢复只重启一个 Server。正式包中的 Agent Server 从明确传入的 `resources/pi-runtime` 根定位依赖清单与包入口,不从脚本所在目录或应用 `node_modules` 猜测解析。Renderer 不直接启动或调用 Pi,也不读取其 wire 类型。项目与 Conversation 元数据先从本地读取,选中对话后才按需准备对应逻辑线程;输入框不等待运行时准备完成。同一助手工具批次中,会取得项目写租约的 `bash`、`edit`、`write` 与动态产品工具按顺序执行,避免批次在命令启动前自锁;纯只读工具仍可并行。子 Agent 仍使用独立的短生命周期进程,以保留并发配额、故障和写入边界;macOS 上两类后台进程都使用 Electron 自带的 Helper,不在 Dock 中创建额外应用图标。
|
||||
- AI 编程默认入口:进入 Code 后保持在 `/chat`。左侧栏顶部在品牌区上方提供同排导航:左侧“← 编程 Code”返回模块选择首页,右侧收起侧栏;窄侧栏仅省略溢出的文字,折叠后的展开入口保持在标题栏;项目配置及其资源子页不再重复显示此侧栏入口,保留配置页自身的返回操作。尚未选择本地项目时,页面以麦洛 M 标识和居中引导语建立焦点,下方提供独立的“新增项目”主操作以及可横向浏览、直接进入的已有项目卡片;项目创建和进入仍复用侧栏现有流程。已有项目的新 Conversation 在可编辑 Composer 上方沿用同一品牌引导,第一条消息出现后切换为正常时间线。
|
||||
- AI 编程默认入口:进入 Code 后保持在 `/chat`。左侧栏最顶部显示麦洛品牌区,其下提供同排导航:左侧“← 编程 Code”返回模块选择首页,右侧收起侧栏;窄侧栏仅省略溢出的文字,折叠后的展开入口保持在标题栏;项目配置及其资源子页不再重复显示此侧栏入口,保留配置页自身的返回操作。尚未选择本地项目时,页面以麦洛 M 标识和居中引导语建立焦点,下方提供独立的“新增项目”主操作以及可横向浏览、直接进入的已有项目卡片;项目创建和进入仍复用侧栏现有流程。已有项目的新 Conversation 在可编辑 Composer 上方沿用同一品牌引导,第一条消息出现后切换为正常时间线。
|
||||
- AI 编程历史与配额反馈:Pi 上下文压缩不删除用户可见的 active-branch 历史,压缩摘要保持 Main-private;Renderer 首次渲染最近 120 个节点,向上滚动时按 100 个节点追加更早内容并保持阅读位置。Main 精确识别 `token_point_balance_exhausted` / `词元点数余额不足`,只向 Renderer 投影不可重试的稳定配额错误和安全中文提示,重开会话后仍可见且不暴露上游原始错误或 request id。
|
||||
- 账号词元点数:左下角账户菜单显示本人永久余额和预占,提供充值、充值订单与分页收支记录。真正新注册赠送 100 点,1 元充值 50 点,永久有效;旧账户不补送,旧会员/订阅/周额度/重置卡入口已移除。家长充值始终进入自己的钱包,青少年可查看自己的精确余额;使用他人共享钱包时仅显示可用状态,不显示付款人的余额或记录。Main 持有凭据并转发充值请求;付款结果未知时沿用原请求并核查原订单,只有服务端确认才显示到账。扫码信息缺失时可到网页账户页继续原订单,付款来源也由网页账户页管理。需配套部署 Works Square 永久点数 API 与 0094 迁移;本地模拟验收不代表真实支付通过。
|
||||
- 桌面性能策略:应用窗口使用不透明浅色表面并默认保留硬件合成;仅在显式安全模式或短时间内重复 GPU 进程崩溃时启用软件渲染,并把故障原因保存在用户数据目录。启动关键路径只创建本地应用壳,认证、代理、同步、更新和遥测在首帧后延迟初始化;开发版可通过 `app:performance` 快照观察 GPU、进程、WebContents、事件循环与 Renderer Long Task 聚合指标。
|
||||
|
||||
@@ -414,6 +414,10 @@ export function Sidebar({
|
||||
)}
|
||||
>
|
||||
<div className="min-w-0 w-full">
|
||||
{workspaceLayout && <button type="button" aria-label="返回首页" title="返回首页" onClick={() => navigate('/module-select')} className="classroom-brand flex w-full items-center gap-2 rounded-lg text-left">
|
||||
<span className="classroom-brand-mark"><img src={classroomMark} alt="" className="h-7 w-7" /></span>
|
||||
<span className="min-w-0"><span className="block text-base font-semibold tracking-tight">麦洛</span><span className="classroom-brand-caption">把脑洞变成作品</span></span>
|
||||
</button>}
|
||||
{workspaceLayout && <div className="no-drag flex h-10 min-w-0 items-center gap-1" data-testid="classroom-sidebar-navigation">
|
||||
<ModuleSwitcher sidebarCollapsed={sidebarCollapsed} toolbar />
|
||||
{!sidebarPinnedCollapsed && ['darwin', 'win32'].includes(window.electron?.platform ?? '') && <button
|
||||
@@ -426,10 +430,6 @@ export function Sidebar({
|
||||
className="no-drag motion-press flex h-8 w-8 shrink-0 items-center justify-center rounded-md text-muted-foreground hover:bg-surface-subtle hover:text-foreground"
|
||||
><PanelLeftClose className="h-4 w-4" /></button>}
|
||||
</div>}
|
||||
{workspaceLayout && <button type="button" aria-label="返回首页" title="返回首页" onClick={() => navigate('/module-select')} className="classroom-brand flex w-full items-center gap-2 rounded-lg text-left">
|
||||
<span className="classroom-brand-mark"><img src={classroomMark} alt="" className="h-7 w-7" /></span>
|
||||
<span className="min-w-0"><span className="block text-base font-semibold tracking-tight">麦洛</span><span className="classroom-brand-caption">把脑洞变成作品</span></span>
|
||||
</button>}
|
||||
{!workspaceLayout && <ModuleSwitcher sidebarCollapsed={sidebarCollapsed} compact={!sidebarCollapsed} />}
|
||||
</div>
|
||||
</div>}
|
||||
|
||||
@@ -90,7 +90,8 @@ test.describe('Makelore module navigation without setup flow', () => {
|
||||
expect(brandBox).not.toBeNull();
|
||||
expect(returnBox).not.toBeNull();
|
||||
expect(collapseBox).not.toBeNull();
|
||||
expect(returnBox!.y + returnBox!.height).toBeLessThanOrEqual(brandBox!.y);
|
||||
expect(returnBox!.y).toBeGreaterThanOrEqual(brandBox!.y + brandBox!.height);
|
||||
expect(brandBox!.y - sidebarBox!.y).toBeLessThanOrEqual(8);
|
||||
expect(Math.abs(returnBox!.y + returnBox!.height / 2 - collapseBox!.y - collapseBox!.height / 2)).toBeLessThan(1);
|
||||
expect(returnBox!.x + returnBox!.width).toBeLessThanOrEqual(collapseBox!.x);
|
||||
expect(sidebarBox!.x + sidebarBox!.width - collapseBox!.x - collapseBox!.width).toBeLessThanOrEqual(14);
|
||||
|
||||
Reference in New Issue
Block a user