Class: RosettAi::Provenance::Tracker

Inherits:
Object
  • Object
show all
Defined in:
lib/rosett_ai/provenance/tracker.rb

Overview

MCP-facing facade for provenance operations.

Delegates to Store for the actual provenance logic, providing the simplified interface expected by Mcp::Tools::ProvenanceTool.

Author:

  • hugo

  • claude

Instance Method Summary collapse

Constructor Details

#initialize(root: Dir.pwd) ⇒ Tracker

Returns a new instance of Tracker.

Parameters:

  • root (Pathname, String) (defaults to: Dir.pwd)

    project root (defaults to pwd)



17
18
19
# File 'lib/rosett_ai/provenance/tracker.rb', line 17

def initialize(root: Dir.pwd)
  @store = Store.new(root: root)
end

Instance Method Details

#find_by_commit(commit) ⇒ Hash?

Finds provenance entries for a specific commit.

Parameters:

  • commit (String)

    commit SHA

Returns:

  • (Hash, nil)

    matching entry



35
36
37
38
# File 'lib/rosett_ai/provenance/tracker.rb', line 35

def find_by_commit(commit)
  entries = @store.entries_for_commit(commit)
  entries.first
end

#find_by_file(file) ⇒ Array<Hash>

Finds provenance entries referencing a file.

Parameters:

  • file (String)

    file path

Returns:

  • (Array<Hash>)

    matching entries



44
45
46
# File 'lib/rosett_ai/provenance/tracker.rb', line 44

def find_by_file(file)
  @store.entries_for_file(file)
end

#log(role: nil) ⇒ Array<Hash>

Returns provenance log, optionally filtered by role.

Parameters:

  • role (String, nil) (defaults to: nil)

    AI role filter

Returns:

  • (Array<Hash>)

    provenance entries



52
53
54
55
56
57
58
59
# File 'lib/rosett_ai/provenance/tracker.rb', line 52

def log(role: nil)
  return [] unless @store.exist?

  entries = @store.read['entries'] || []
  return entries unless role

  entries.select { |e| e['role'] == role }
end

#validateHash

Validates all provenance entries and hash chain integrity.

Returns:

  • (Hash)

    with :errors key



24
25
26
27
28
29
# File 'lib/rosett_ai/provenance/tracker.rb', line 24

def validate
  errors = []
  errors << 'Provenance file not found' unless @store.exist?
  errors.concat(@store.verify_chain) if @store.exist?
  { errors: errors }
end