package hostexec import ( "errors" "os" ) // ProjectRootClient keeps the agent's status and cleanup hint. It never // establishes a lifetime lock or participates in root admission. func ProjectRootClient(dataDir string, state State) error { d, err := openLocal(dataDir) if err != nil { return err } defer d.close() if state.State == "settled" { old, err := d.read(state.Host) if errors.Is(err, os.ErrNotExist) { return nil } if err != nil { return err } if old.Host != state.Host || old.Incarnation != state.Incarnation || old.Op != state.Op { return ErrState } return d.remove(state.Host) } state.Process, err = currentControllerProcess() if err != nil { return err } return d.write(state) } // ClearRootClientMirror follows a successful tokenless root serving view. // Removing this status hint conveys no execution or update authority. func ClearRootClientMirror(dataDir, host string) error { d, err := openLocal(dataDir) if err != nil { return err } defer d.close() err = d.remove(host) if errors.Is(err, os.ErrNotExist) { return nil } return err }