orchestrata_ultimate.session.cli.achievements

Reference › orchestrata_ultimate › session › cli › achievements

The achievement command group. list shows the achievements of the latest session and add appends one to it. The achievements feed the changelog entry and session summary when the session ends (see lifecycle).

At a glance

Source src/orchestrata_ultimate/session/cli/achievements.py
Lines of code 67
Classes 0
Functions 3
Imports (internal) orchestrata_ultimate.core.base.traces, orchestrata_ultimate.session.cli._manager
Imported by orchestrata_ultimate.session.cli.main
Tests that import it none

Class diagram

No classes; see Functions.

Dependency diagram

Dependency diagram orchestrata_ultimate.session.cli.achievements

API

Functions

Function Signature Summary
achievement click.group, traces achievement() -> None Manage session achievements.
achievement_list click.command, click.pass_context, traces achievement_list(ctx: click.Context) -> None List achievements from the latest session.
achievement_add click.command, click.argument, click.pass_context, traces achievement_add(ctx: click.Context, text: str) -> None Add an achievement to the latest session.

Source

Permalink: https://gitlab.com/MSamy/orchestrata-ultimate-architecture/-/blob/a4cbc2bdf/src/orchestrata_ultimate/session/cli/achievements.py

# mypy: ignore-errors
"""Achievement commands (achievement group) for the session CLI."""

import sys

import click

from orchestrata_ultimate.core.base.traces import traces
from orchestrata_ultimate.session.cli._manager import _get_manager


@click.group()
@traces(spec="006", story="FR-018", reqs=["REQ-006-FR18-006"])
def achievement() -> None:
    """Manage session achievements."""


@click.command(name="list")
@click.pass_context
@traces(spec="006", story="FR-18", reqs=["REQ-006-FR18-006", "REQ-006-FR10-004"])
def achievement_list(ctx: click.Context) -> None:
    """List achievements from the latest session."""
    root = ctx.obj["root"]
    mgr = _get_manager(root)

    if not mgr.file_exists():
        click.echo(f"No context files found in {root}", err=True)
        sys.exit(1)

    ctx_data = mgr.read()
    latest = ctx_data.latest_session()

    if not latest:
        click.echo("No sessions found.")
        return

    achievements = latest.achievements
    if not achievements:
        click.echo(f"No achievements recorded for session {latest.session_id}.")
        return

    click.echo(f"Achievements for Session {latest.session_id}:")
    click.echo("-" * 50)
    for i, ach in enumerate(achievements, 1):
        click.echo(f"  {i}. {ach}")
    click.echo(f"\nTotal: {len(achievements)} achievements")


@click.command(name="add")
@click.argument("text")
@click.pass_context
@traces(spec="006", story="FR-18", reqs=["REQ-006-FR18-006", "REQ-006-FR10-004"])
def achievement_add(ctx: click.Context, text: str) -> None:
    """Add an achievement to the latest session."""
    root = ctx.obj["root"]
    mgr = _get_manager(root)

    ctx_data = mgr.read()
    latest = ctx_data.latest_session()

    if not latest:
        click.echo("No sessions found. Create a session first.", err=True)
        sys.exit(1)

    latest.achievements.append(text)
    mgr.write(ctx_data)
    click.echo(f"Added achievement to session {latest.session_id}: {text}")