# [メタ情報] # 識別子: DAS棚田管理_図解_exe # システム名: # 技術種別: Misc # 機能名: Misc # 使用言語: # 状態: 実行用 # [/メタ情報] ──────────────────────────────────────────────────────────────────── A) 棚田型 流出・流入(最新版・追記反映) (= メタデータの動き + 実データの動き) ──────────────────────────────────────────────────────────────────── 【外側:実行トリガー/司令塔(オーケストレータ)】 [人が操作する唯一の起点] (Google Sheets ボタン / GAS / cron / webhook) │ │ das_runner.sh ★実装済 │ (外側の司令塔) │ - ロック管理 │ - 実行モード切替(simulate_only / apply) │ - パイプライン起動 │ - 実行状態・結果を action_result へ通知 │ ▼ ──────────────────────────────────────────────────────────────────── 【ここから下が A) の本体:棚田の物理法則】 (人は介入しない/網羅・鳥瞰・決定論) ──────────────────────────────────────────────────────────────────── [人が記述・唯一の設計入力] tanadaシート(Google Sheets) (棚田の地形・段位・許容サイズの定義) │ │ tanada_export.py ★実装済 │ (設定同期:Sheets → CSV) ▼ tanada.csv (棚田地形の静的スナップショット) 【設計原則(確定)】 - 転出パスは原則1本(基底パス一本化+相対パス運用) - 転入パスは1本 - 転出除外パスは複数可 - 複数段(T0→T1→T2…)は上下で結んだ棚田チェーンとして扱う ════════════════════════════════════════════════════════════════════ ↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑↑ ここから下が 【メタデータの動き】 ↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓ ════════════════════════════════════════════════════════════════════ │ │ tanada_scan.py ★実装済 │ (全ファイル網羅スキャン・観測のみ) ▼ メタデータDB(scan 世代) (全棚田・全ファイルを含む事実の固定) │ │ tanada_analyze.py ★実装済(要改修) │ (mtime順ソート・サイズ積算・ │ 現段位→新段位計算) │ ※ apply後に存在すべき │ 「新ファイルパス(to_abs_path)」を確定させる ▼ 移動計画DB(Move Plan) (「もしApplyしたらこうなる」完全計画) - from_abs_path - to_abs_path - current_stage / new_stage - action(KEEP / MOVE) │ │ tanada_pipeline.py ★実装済 │ (棚田の物理法則の唯一の保持者) │ - scan 1回(ALL) │ - analyze 1回(ALL) │ - 段飛びOK / 逆流NG ▼ [ simulate_only = TRUE ] - 実体ファイルは一切触らない - 何度でも再実行可能 - 限度TB変更の影響を鳥瞰可能 - T1→T0 の戻りも理論上可能 - 人は結果を見るだけ(action_result) ════════════════════════════════════════════════════════════════════ ここまでが 【メタデータ更新処理】 (完全に独立・完結) ════════════════════════════════════════════════════════════════════ │ │ tanada_notify.py ☆未完成 │ (Move Plan の可視化・通知) ▼ │ │ tanada_apply.py ☆未実装 │ (mkdir / mv / mirror) ▼ ──────────────────────────────────────────────────────────────────── 【実データの動き(apply時・将来)】 ──────────────────────────────────────────────────────────────────── 実データ移動(棚田間) /T0 ↔ /T1 ↔ /T2 …(段飛びOK・逆流NG) │ │ mirror 作成 ▼ T?_main ─────────▶ T?_mirror │ │ tanada_scan.py(再観測) ▼ 次回サイクルへ ──────────────────────────────────────────────────────────────────── 【simulate_only の定義(確定)】 ──────────────────────────────────────────────────────────────────── simulate_only = TRUE ✔ scan / analyze / pipeline まで実行 ✔ 実体ファイルは一切触らない simulate_only = FALSE(将来) ✔ notify → apply を含めて実行 ✔ 実体移動後、必ず再 scan ──────────────────────────────────────────────────────────────────── B) 衛生・廃棄処理(Aと完全分離・独立系) ──────────────────────────────────────────────────────────────────── B-1) 空フォルダ清掃(衛生処理) - A) の結果として残る空フォルダを整理 - dry-run 必須(削除候補一覧のみ) - 削除対象は空フォルダのみ - 人が明示的に実行 B-2) 廃棄処理(pending_delete) - 意味が失われたものを隔離 - 猶予期間後に最終削除 - A) とは完全に独立 ────────────────────────────────────────────────────────────────────