feat(go): durable transaction engine and Kiro IDE 1.0 adapter
Split the monolithic transaction into focused modules: append-only crash-recoverable journal under ~/.elydora/transactions with owner tokens and per-transaction namespaces, staged atomic publication (stage .pending, fsync, rename, fsync), platform-specific atomic replacement (MoveFileEx, renameat2, renamex_np), private-directory hardening per OS, lock-guarded recovery, and workspace cleanup that removes only transaction-created empty directories. Add the Kiro IDE 1.0 plugin: strict v1 hook schema with one enabled PreToolUse guard and PostToolUse audit pair bound to the active workspace, agent-to-workspace identity binding in runtime config, and exact migration of the legacy elydora-audit.kiro.hook contract. Gates: go test ./... and -race pass, go vet clean, govulncheck reports zero reachable vulnerabilities, git diff --check clean.
This commit is contained in:
1 parent
dd72793cdb
commit
eb41b991bf
70 files changed
+8182
-358
No files matched your search
@@ -13,6 +13,7 @@ type managedFileSnapshot struct {
|
||||
contents []byte
|
||||
info os.FileInfo
|
||||
mode os.FileMode
|
||||
identity string
|
||||
}
|
||||
|
||||
func readManagedFile(
|
||||
@@ -51,6 +52,13 @@ func readManagedFile(
|
||||
file.Close(),
|
||||
)
|
||||
}
|
||||
identity, identityErr := transactionFileIdentity(file, after)
|
||||
if identityErr != nil {
|
||||
return nil, errors.Join(
|
||||
fmt.Errorf("identify %s at %s: %w", label, filePath, identityErr),
|
||||
file.Close(),
|
||||
)
|
||||
}
|
||||
raw, readErr := io.ReadAll(io.LimitReader(file, maximumBytes+1))
|
||||
closeErr := file.Close()
|
||||
if readErr != nil || closeErr != nil {
|
||||
@@ -70,6 +78,7 @@ func readManagedFile(
|
||||
contents: raw,
|
||||
info: after,
|
||||
mode: after.Mode().Perm(),
|
||||
identity: identity,
|
||||
}, nil
|
||||
}
|
||||
|
||||
|
||||
Reference in new issue
Block a user