Class: RosettAi::Authorship::TrailerGenerator

Inherits:
Object
  • Object
show all
Defined in:
lib/rosett_ai/authorship/trailer_generator.rb

Overview

Generates commit trailer templates for AI authorship.

Trailer format follows the convention: Role: Tool Version (Provider)

Engine capability manifests declare whether trailer support is available; engines without trailer support get a warning.

Author:

  • hugo

  • claude

Constant Summary collapse

TRAILER_ROLES =
RosettAi::Provenance::Entry::ALLOWED_ROLES

Instance Method Summary collapse

Instance Method Details

#generate(engine_name:, provider:, role:) ⇒ String

Generates a trailer string for a given engine.

Parameters:

  • engine_name (String)

    engine display name (e.g. "Claude Opus 4.6")

  • provider (String)

    engine provider (e.g. "Anthropic")

  • role (String)

Returns:

  • (String)

    formatted trailer



27
28
29
30
# File 'lib/rosett_ai/authorship/trailer_generator.rb', line 27

def generate(engine_name:, provider:, role:)
  validate_role!(role)
  "#{role}: #{engine_name} (#{provider})"
end

#generate_all(engine_name:, provider:) ⇒ Array<String>

Generates all four trailer templates for an engine.

Parameters:

  • engine_name (String)

    engine display name

  • provider (String)

    engine provider

Returns:

  • (Array<String>)

    all trailer templates



37
38
39
40
41
# File 'lib/rosett_ai/authorship/trailer_generator.rb', line 37

def generate_all(engine_name:, provider:)
  TRAILER_ROLES.map do |role|
    generate(engine_name: engine_name, provider: provider, role: role)
  end
end

#trailer_block(engine_name:, provider:) ⇒ String

Formats trailers as a block suitable for documentation.

Parameters:

  • engine_name (String)

    engine display name

  • provider (String)

    engine provider

Returns:

  • (String)

    newline-separated trailer block



48
49
50
# File 'lib/rosett_ai/authorship/trailer_generator.rb', line 48

def trailer_block(engine_name:, provider:)
  generate_all(engine_name: engine_name, provider: provider).join("\n")
end

#validate_tool(tool_name:, strict: false) ⇒ Array<String>

Validates a tool name against known engine manifests.

Parameters:

  • tool_name (String)

    tool name from a trailer (e.g. "Claude Opus 4.6")

  • strict (Boolean) (defaults to: false)

    when true, unknown tools raise AuthorshipError

Returns:

  • (Array<String>)

    warnings (empty if tool is known)

Raises:



57
58
59
60
61
62
63
64
65
66
67
# File 'lib/rosett_ai/authorship/trailer_generator.rb', line 57

def validate_tool(tool_name:, strict: false)
  known = known_engine_names
  return [] if known.empty? # no engines installed — skip validation
  return [] if known.any? { |name| tool_name.include?(name) }

  message = "Unknown AI tool '#{tool_name}' — not found in any engine manifest. " \
            "Known engines: #{known.join(', ')}"
  raise RosettAi::AuthorshipError, message if strict

  [message]
end