# 数据生命周期与隐私边界 本文适用于 dsh-teacher-preset 1.0.x。插件不提供云端数据库;持久化数据位于配置的 `outputDir`。但是,DSH 在调用模型时可能把当前任务所需内容发送给你配置的模型提供方,因此“本地存储”不等于“模型调用永不出本机”。请同时遵守模型提供方和所在机构的数据规则。 ## 数据最小化 - 教师和学生使用稳定的内部 ID;能用化名时不要保存真实姓名。 - 只记录完成教学目标、评价和下一课调整所必需的信息。 - 不保存密码、API Key、Token、Cookie、身份证号、住址、医疗记录或完整联系方式。 - 评价备注聚焦学习证据,不记录与教学无关的敏感描述。 - 在把材料交给外部模型前,按学校或机构政策做匿名化。 ## 存储内容 - `//`:Markdown 材料及可选 HTML 导出。 - `/.backups/`:材料更新和恢复产生的历史版本。 - `/.teacher-workspace/contexts/`:教师、班级、课程和学生上下文及历史。 - `/.teacher-workspace/packages/`:单元包清单、目标关联和 SHA-256。 - `/.teacher-workspace/assessments/`:评价证据、诊断和下一课调整。 - `/.teacher-workspace/transactions/` 与 `staging/`:中断恢复所需的短期事务数据。 插件不会主动上传这些文件,也不会自行建立网络连接。访问权限、磁盘加密、备份和模型侧数据处理由运行环境负责。 配置的 `outputDir` 绝对路径不会加入系统提示,正常材料工具结果只向模型返回工作区相对路径。底层文件系统的权限、空间或 I/O 异常由 Node.js 生成,诊断信息可能包含本机绝对路径并被 DSH 发送给模型提供方;因此目录名不要包含学生姓名、学校机密或其他敏感标识。材料正文、上下文、评价和搜索命中仍可能作为任务内容发送给已配置的模型提供方。 ## 单写者与并发限制 同一 `outputDir` 同一时刻只允许一个 DSH 插件实例写入。开始保存、更新、迁移、恢复、单元包或评价记录操作前,先停止其他使用该目录的实例;并发写入不受支持,可能造成事务冲突或需人工恢复的 staging 记录。只读导出也应在写入停止后执行,以获得一致副本。 ## 保留策略 v1.0 默认不自动删除教学数据、备份或历史版本,避免静默数据丢失。机构应明确保留期限并定期复核: 1. 活跃课程期间保留必要上下文、单元包和评价证据。 2. 课程结束后按机构政策归档或删除学生级数据。 3. 材料备份和上下文历史同样可能包含个人信息,不能只清理当前版本。 4. 已完成的事务日志会自动清理;无法与日志关联的 staging 目录会保留并在启动时警告,必须人工核对后处理。 ## 导出 完整、可迁移的导出单位是整个 `outputDir`,包括隐藏目录 `.teacher-workspace` 和 `.backups`: 1. 停止使用该输出目录的 DSH 实例,避免导出期间继续写入。 2. 复制整个 `outputDir` 到访问受控的位置,不要只复制 Markdown 文件。 3. 在副本中确认 `workspace.json`、上下文、单元包、评价记录和材料都存在。 4. 在新位置启动后调用 `teacher_migrate_workspace` 刷新 v0.4 材料索引。 5. 用 `teacher_read_unit_package` 复核材料校验和;单份材料可用 `teacher_export_material` 生成打印用 HTML。 导出文件仍包含原始敏感度的数据;传输和备份时应使用机构批准的加密与访问控制。 ## 删除 v1.0 不提供级联删除工具,原因是上下文、单元包、评价和材料存在交叉引用,自动猜测删除范围容易造成不可逆数据丢失。删除必须由数据负责人在文件系统中显式执行: 1. 停止所有使用该 `outputDir` 的 DSH 实例。 2. 先按“导出”流程建立可验证备份,并记录保留依据和批准人。 3. 解析并确认目标目录的绝对路径;不得把主目录、磁盘根目录、仓库根目录、环境变量、通配符或未解析的链接作为递归删除目标。 4. 删除单个教学上下文时,先用清单确认关联评价和单元包,再按“评价记录 → 单元包清单 → 对应 Markdown 材料及其 HTML 导出 → `.backups` 中的材料历史 → 上下文历史 → 当前上下文”的顺序删除;同时核对并清理只属于该范围的 transaction sidecar、事务日志和孤立 staging 内容。 5. 重新执行 `teacher_migrate_workspace` 刷新 `legacy-materials.json`,再对整个具体 `outputDir`(包括隐藏目录)按相关 ID、文件名和已知个人信息做检索复核,确认没有残留副本或悬空引用。 6. 删除整个工作区时,只删除已经人工核对的具体 `outputDir`;插件卸载本身不会删除该目录。 7. 删除后重新启动插件并执行列表、读取和迁移检查,确认没有悬空引用;按机构策略处理工作区之外的导出与备份副本。 如删除范围不明确,应停止操作并由数据负责人确认,不能依靠文件名猜测。 ## 访问控制与事件处置 - 使用操作系统账户权限限制 `outputDir`,共享设备上启用磁盘加密和锁屏。 - 不要把真实教学数据提交到 Git、问题跟踪器或测试夹具。 - 怀疑泄露时,先隔离副本、停止模型调用、轮换可能暴露的凭据,再按机构流程通知相关人员。 - 安全缺陷报告遵循仓库根目录的 `SECURITY.md`。