Phase 1: 共用类型定义 - apps/server/src/common/import-result.types.ts — ImportRowError + ImportResult<T> - apps/admin/src/types/import.ts — 前端对应类型 + ImportDisplayConfig Phase 2: 后端增强 - students.service.ts — batchImport/matchImport 改为 ImportResult 格式 · 每行跳过时收集 ImportRowError(code + reason) · reason 支持 markdown 标记(**字段名** / `值`) - archive.service.ts — batchImportArchive 统一用 ImportResult 格式 · 各 Sheet 错误使用标准 error code - archive.controller.ts — 日志使用新的 success 字段 Phase 3: 前端基础 - 安装 react-markdown - ImportResultModal 组件(共用导入结果弹窗) · Statistic 成功统计 + Table 错误明细 · 原因列支持 react-markdown 渲染(粗体字段名、等宽代码值) · 错误类型用 Tag 颜色区分 - api/index.ts — 403 错误从 console.warn 改为 message.warning 用户可见 Phase 4: 前端集成 - Students/index.tsx — 替换硬编码导入结果弹窗 · 删除'后端只返回统计汇总'注释和跳过原因 hardcode · 新格式自动使用 ImportResultModal,旧格式兼容 - StudentProfileContent/index.tsx — 替换内联导入 Modal 为 ImportResultModal
23 lines
888 B
Bash
Executable File
23 lines
888 B
Bash
Executable File
#!/usr/bin/env bash
|
|
# Resolve and ensure the working-tree directory SDD uses for its short-lived
|
|
# artifacts: task briefs, implementer reports, review packages, and the
|
|
# progress ledger. Print the directory's absolute path.
|
|
#
|
|
# The workspace lives in the working tree (not under .git/) because Claude Code
|
|
# treats .git/ as a protected path and denies agent writes there — which blocks
|
|
# an implementer subagent from writing its report file. A self-ignoring
|
|
# .gitignore keeps the workspace out of `git status` and out of accidental
|
|
# commits without modifying any tracked file.
|
|
#
|
|
# Single source of truth for the workspace location, so task-brief and
|
|
# review-package cannot drift to different directories.
|
|
#
|
|
# Usage: sdd-workspace
|
|
set -euo pipefail
|
|
|
|
root=$(git rev-parse --show-toplevel)
|
|
dir="$root/.superpowers/sdd"
|
|
mkdir -p "$dir"
|
|
printf '*\n' > "$dir/.gitignore"
|
|
cd "$dir" && pwd
|