feat/002_init-remote
Raw Download raw file

tissue index

Generate an index/summary of all issues.

Tissue Commands

# Generate default index
tissue index

# Output to specific file
tissue index --output ISSUES.md

Manual Workflow (bash + git)

Generate basic index

# Create README index of all issues
generate_index() {
    cd ../issues 2>/dev/null || return 1

    OUTPUT_FILE="${1:-README.md}"

    cat > "$OUTPUT_FILE" << 'EOF'
# Issues Index

This is an automatically generated index of all issues in this repository.

Last updated: $(date -u +"%Y-%m-%d %H:%M:%S UTC")

## Summary

EOF

    # Add statistics using yq
    TOTAL=0
    OPEN=0
    IN_PROGRESS=0
    CLOSED=0
    BLOCKED=0

    for file in *.md; do
        [ -f "$file" ] || continue
        [ "$file" = "README.md" ] && continue

        ((TOTAL++))
        STATUS=$(yq --front-matter '.status // "unknown"' "$file" 2>/dev/null)
        case "$STATUS" in
            open) ((OPEN++)) ;;
            in-progress) ((IN_PROGRESS++)) ;;
            closed) ((CLOSED++)) ;;
            blocked) ((BLOCKED++)) ;;
        esac
    done

    cat >> "$OUTPUT_FILE" << EOF
- **Total Issues**: $TOTAL
- **Open**: $OPEN
- **In Progress**: $IN_PROGRESS
- **Closed**: $CLOSED

## Issues by Status

EOF

    # Generate sections by status
    for status in "open" "in-progress" "closed"; do
        case "$status" in
            open) HEADING="### 📂 Open Issues" ;;
            in-progress) HEADING="### 🚧 In Progress" ;;
            closed) HEADING="### ✅ Closed Issues" ;;
        esac

        echo "$HEADING" >> "$OUTPUT_FILE"
        echo "" >> "$OUTPUT_FILE"

        COUNT=0
        for file in *.md; do
            [ "$file" = "README.md" ] && continue
            [ -f "$file" ] || continue

            FILE_STATUS=$(yq --front-matter '.status // ""' "$file" 2>/dev/null)
            if [ "$FILE_STATUS" = "$status" ]; then
                NUM=$(echo "$file" | cut -d'_' -f1)
                TITLE=$(yq --front-matter '.title // ""' "$file")
                PRIORITY=$(yq --front-matter '.priority // "medium"' "$file")
                ASSIGNEE=$(yq --front-matter '.assignee // null' "$file")

                # Priority emoji
                case "$PRIORITY" in
                    critical) EMOJI="🔴" ;;
                    high) EMOJI="🟠" ;;
                    medium) EMOJI="🟡" ;;
                    low) EMOJI="🟢" ;;
                    *) EMOJI="⚪" ;;
                esac

                echo -n "- $EMOJI **#${NUM}**: [${TITLE}](./${file})" >> "$OUTPUT_FILE"
                [ "$ASSIGNEE" != "null" ] && echo -n " (@${ASSIGNEE})" >> "$OUTPUT_FILE"
                echo "" >> "$OUTPUT_FILE"

                ((COUNT++))
            fi
        done

        [ "$COUNT" -eq 0 ] && echo "*No issues*" >> "$OUTPUT_FILE"
        echo "" >> "$OUTPUT_FILE"
    done

    echo "Index generated: $OUTPUT_FILE"
    cd - > /dev/null
}

generate_index

What tissue does for you:

  1. Automatically generates formatted indexes
  2. Provides multiple output formats (Markdown, HTML, etc.)
  3. Creates visual charts and statistics
  4. Groups issues by various criteria
  5. Updates timestamps automatically
  6. Generates both summary and detailed views
  7. Handles large numbers of issues efficiently
  8. Maintains consistent formatting
  9. Auto-commits index updates
  10. Supports custom templates for index generation