wal: pause
This commit is contained in:
122
scripts/tien-kiem-cua.ps1
Normal file
122
scripts/tien-kiem-cua.ps1
Normal file
@ -0,0 +1,122 @@
|
||||
# tien-kiem-cua.ps1 - GD-3 khoan (iv): tien kiem chi phi ~0 o DAU MOI CUA.
|
||||
#
|
||||
# Chi DOC. KHONG ghi. LUON exit 0 - day la lop INFORM, KHONG phai cong chan.
|
||||
# Cong chan bang ma loi = W3b (khoan C3-04 + thang 4 trang thai), dang cho owner (P1).
|
||||
# Ai sua file nay de tra ma != 0 la da doi lop, phai qua W3b truoc.
|
||||
#
|
||||
# Vi sao KHONG tin mtime cua he dieu hanh:
|
||||
# hook 'wal:' cham tep o bien moi luot, va 'git checkout' viet lai mtime hang loat.
|
||||
# mtime tra loi "tep bi cham luc nao", KHONG tra loi "cua dong luc nao".
|
||||
# => chon cua bang DAU THOI GIAN GHI TRONG TEP (hub: phu-luc GD-3 khoan (iv)).
|
||||
#
|
||||
# Guard vang tep = VI TU MAY (khoan (vii)): Test-Path roi bo qua VA KHAI.
|
||||
# CAM dung menh de "cai do chua lam" - menh de do sai ngay giay tep kia ha canh.
|
||||
#
|
||||
# A2 (mat ca tap): het nguon => in co THIEU-TAP RIENG, KHONG in "ok".
|
||||
# So 0 khong duoc phep doc thanh "sach".
|
||||
#
|
||||
# Dung: powershell -NoProfile -ExecutionPolicy Bypass -File scripts/tien-kiem-cua.ps1
|
||||
# -Cua adap-apply (ten cua dang mo - chi de in kem, khong doi hanh vi)
|
||||
# -RepoRoot <path> (fault-inject tren cay tam)
|
||||
|
||||
param(
|
||||
[string]$Cua = '',
|
||||
[string]$RepoRoot = ''
|
||||
)
|
||||
|
||||
$ErrorActionPreference = 'Stop'
|
||||
|
||||
function Get-RepoRoot {
|
||||
param([string]$Explicit)
|
||||
if ($Explicit -and $Explicit.Trim().Length -gt 0) { return $Explicit }
|
||||
return (Resolve-Path (Join-Path $PSScriptRoot '..')).Path
|
||||
}
|
||||
|
||||
# Rut dau thoi gian GHI TRONG TEP cua WAL (cua dung: /pause, /snapshot, hook wal:).
|
||||
# Khuon: "updated: YYYY-MM-DD | session: S<n> ..."
|
||||
function Read-WalStamp {
|
||||
param([string]$Root)
|
||||
$p = Join-Path $Root '.claude/WAL.md'
|
||||
if (-not (Test-Path -LiteralPath $p)) { return $null }
|
||||
# chi doc 10 dong dau - re, va moc luon nam o dau tep
|
||||
$head = Get-Content -LiteralPath $p -TotalCount 10 -ErrorAction Stop
|
||||
foreach ($line in $head) {
|
||||
$m = [regex]::Match($line, 'updated:\s*(\d{4}-\d{2}-\d{2})')
|
||||
if ($m.Success) {
|
||||
$s = [regex]::Match($line, 'session:\s*(S\d+)')
|
||||
return [pscustomobject]@{
|
||||
Nguon = 'WAL'
|
||||
Ngay = $m.Groups[1].Value
|
||||
Phien = $(if ($s.Success) { $s.Groups[1].Value } else { '?' })
|
||||
}
|
||||
}
|
||||
}
|
||||
return $null
|
||||
}
|
||||
|
||||
# Rut dau thoi gian GHI TRONG TEP cua so dem phien (cua dung: /session-start, /session-end).
|
||||
function Read-CounterStamp {
|
||||
param([string]$Root)
|
||||
$p = Join-Path $Root '.claude/governance/.session-counter.json'
|
||||
if (-not (Test-Path -LiteralPath $p)) { return $null }
|
||||
$raw = Get-Content -LiteralPath $p -Raw -ErrorAction Stop
|
||||
$j = $raw | ConvertFrom-Json
|
||||
$ngay = $j.last_ticked_at
|
||||
if (-not $ngay) { return $null }
|
||||
if ($ngay -notmatch '^\d{4}-\d{2}-\d{2}$') { return $null }
|
||||
$phien = $j.last_ticked_session
|
||||
if (-not $phien) { $phien = '?' }
|
||||
return [pscustomobject]@{
|
||||
Nguon = 'counter'
|
||||
Ngay = $ngay
|
||||
Phien = "$phien"
|
||||
}
|
||||
}
|
||||
|
||||
try {
|
||||
$root = Get-RepoRoot -Explicit $RepoRoot
|
||||
$nhan = ''
|
||||
if ($Cua -and $Cua.Trim().Length -gt 0) { $nhan = " cua=$Cua" }
|
||||
|
||||
$nguon = @()
|
||||
$hong = @()
|
||||
|
||||
foreach ($fn in @('Read-WalStamp', 'Read-CounterStamp')) {
|
||||
$r = $null
|
||||
try { $r = & $fn -Root $root } catch { $r = $null }
|
||||
if ($null -ne $r) { $nguon += $r } else { $hong += $fn }
|
||||
}
|
||||
|
||||
# A2 - mat CA TAP: khong con nguon nao doc duoc.
|
||||
# In co RIENG, tuyet doi khong in "ok". So 0 mat quyen doc thanh "sach".
|
||||
if ($nguon.Count -eq 0) {
|
||||
Write-Output "TIEN-KIEM:$nhan THIEU-TAP - 0/2 nguon moc doc duoc (WAL.md + .session-counter.json) | KHONG ket luan duoc gi | (khong chan)"
|
||||
exit 0
|
||||
}
|
||||
|
||||
# chon cua dong GAN NHAT theo dau thoi gian TRONG TEP (khong phai mtime)
|
||||
$moi = $nguon | Sort-Object -Property Ngay -Descending | Select-Object -First 1
|
||||
|
||||
$co = @()
|
||||
if ($hong.Count -gt 0) {
|
||||
$ten = ($hong -join ',') -replace 'Read-|Stamp', ''
|
||||
$co += "NGUON-HONG:$ten"
|
||||
}
|
||||
|
||||
# lech phien giua 2 nguon = dau hieu mot dau cua khong dong
|
||||
if ($nguon.Count -ge 2) {
|
||||
$pset = @($nguon | ForEach-Object { $_.Phien } | Sort-Object -Unique)
|
||||
if ($pset.Count -gt 1) { $co += ("LECH-PHIEN:" + ($pset -join '/')) }
|
||||
}
|
||||
|
||||
$trangthai = $(if ($co.Count -eq 0) { 'ok' } else { ($co -join ' ') })
|
||||
|
||||
Write-Output ("TIEN-KIEM:$nhan cua-dong-gan-nhat={0} moc-trong-tep={1} phien={2} | nguon {3}/2 | {4}" -f `
|
||||
$moi.Nguon, $moi.Ngay, $moi.Phien, $nguon.Count, $trangthai)
|
||||
exit 0
|
||||
}
|
||||
catch {
|
||||
# fail-soft, y nguyen khuon nhip-no-probe: mot buoc MOI khong bao gio duoc lam hong nghi thuc dang chay tot
|
||||
Write-Output "tien-kiem loi (khong chan)"
|
||||
exit 0
|
||||
}
|
||||
Reference in New Issue
Block a user