From ba3ba63e0051ecf92dd78559647f949c520b41ed Mon Sep 17 00:00:00 2001 From: Charles N Wyble Date: Thu, 22 Jan 2026 12:46:28 -0500 Subject: [PATCH] chore: harmonize STLP abbreviation and correct company naming --- AGENTS.md | 100 ++++++++++++++++++++++++++++ book.toml | 3 +- inventory-template.md | 37 ----------- markdown-to-tsv.py | 147 ----------------------------------------- sample-inventory.md | 29 -------- src/SUMMARY.md | 2 +- src/Welcome.md | 1 + src/hpclab-overview.md | 2 +- src/welcome.md | 6 +- 9 files changed, 107 insertions(+), 220 deletions(-) create mode 100644 AGENTS.md delete mode 100644 inventory-template.md delete mode 100644 markdown-to-tsv.py delete mode 100644 sample-inventory.md create mode 100644 src/Welcome.md diff --git a/AGENTS.md b/AGENTS.md new file mode 100644 index 0000000..6b05ac5 --- /dev/null +++ b/AGENTS.md @@ -0,0 +1,100 @@ +# AGENTS.md - Starting Line Productions Shop Book + +This document helps agents understand this codebase and work effectively with it. + +## Project Overview + +This is a **mdBook** project that creates the Starting Line Productions (STL) Shop Guide - a comprehensive manual for a fabrication lab rental business. The project documents tools, equipment, supplies, and procedures across different shop areas (Cleanfab, Dirtyfab, E3ds, Kitchen, HPCLab, RackRental). + +## Essential Commands + +### Building the Book +```bash +mdbook build # Build the book to `book/` directory +mdbook serve # Start live development server (usually on localhost:3000) +mdbook clean # Clean build artifacts +``` + +### PDF Generation (Optional) +The `book.toml` contains commented PDF configuration. To generate PDF: +1. Uncomment the `[output.pdf]` section in book.toml +2. Ensure you have a Chromium-based browser installed +3. Run `mdbook build` + +## Code Organization + +``` +├── src/ # Source markdown files +│ ├── SUMMARY.md # Book structure/table of contents +│ ├── welcome.md # Introduction page +│ ├── version-history.md # Version tracking +│ └── [shop-area]-*.md # Content files organized by shop area +├── book.toml # mdBook configuration +└── SourceMaterialTomerge/ # Binary source files (ODT, PDF, etc.) +``` + +### Content Structure +The book is organized by shop areas: +- **Cleanfab**: Clean fabrication shop +- **Dirtyfab**: Dirty fabrication shop +- **E3ds**: Electronics/3D printing area +- **Kitchen**: Kitchen facilities +- **HPCLab**: High Performance Computing Lab +- **RackRental**: Server rack rental operations + +Each area has: +- `*-overview.md`: Area introduction +- `*-tools.md`: Available tools +- `*-equipment.md`: Equipment inventory +- `*-supplies.md`: Supplies list + +## File Naming Conventions + +- Use kebab-case for all filenames +- Shop area prefixes: `cleanfab-`, `dirtyfab-`, `e3ds-`, `kitchen-`, `hpclab-`, `rackrental-` +- Suffixes indicate content type: `-overview`, `-tools`, `-equipment`, `-supplies` +- Standard files: `welcome.md`, `version-history.md`, `SUMMARY.md` + +## Content Patterns + +### Markdown Structure +- Use ATX-style headers (`#`, `##`, etc.) +- Include links to vendor/product documentation +- Add equipment pictures when available (files stored in `SourceMaterialTomerge/`) + +### SUMMARY.md Structure +- Must match actual files in `src/` directory +- Order: Welcome → Version History → Safety/Security → Area-specific content +- Use relative paths: `./filename.md` + +## Important Gotchas + +### Broken Links in SUMMARY.md +There's a known issue in SUMMARY.md line 2: `[Version History](./version-history.)` should point to `./version-history.md` (missing `.md` extension). + +### File Extensions +Ensure all markdown files in SUMMARY.md have the `.md` extension - mdBook requires exact matches. + +### SourceMaterialTomerge/ +This directory contains binary files (ODT, PDF, etc.) that are referenced in the content but not directly processed by mdBook. + +## Style Guidelines + +- Write comprehensive, detailed descriptions +- Focus on reproducibility - aim for the lab to be fully reproducible by anyone +- Include vendor documentation links +- Add plenty of images to showcase the shop setup +- Maintain consistent structure across shop areas + +## Testing + +After making changes: +1. Run `mdbook build` to verify syntax is correct +2. Run `mdbook serve` to check the book renders properly +3. Check all internal links work in the generated book +4. Verify SUMMARY.md entries point to existing files + +## External Resources + +- Project issues: https://projects.knownelement.com/project/reachableceo-vptechnicaloperations/kanban +- Discussion: https://community.turnsys.com/g/STLProducrtions \ No newline at end of file diff --git a/book.toml b/book.toml index da7af04..2086bcd 100644 --- a/book.toml +++ b/book.toml @@ -1,7 +1,6 @@ [book] -authors = ["ReachableCEO Enterprises LLC"] +authors = ["Starting Line Productions LLC"] language = "en" -multilingual = false src = "src" title = "Starting Line Productions HQ Franchie Shop Manual" diff --git a/inventory-template.md b/inventory-template.md deleted file mode 100644 index 5d19c3e..0000000 --- a/inventory-template.md +++ /dev/null @@ -1,37 +0,0 @@ -# [SHOP NAME] Inventory Template - -## Equipment - -| Item | Model/Part Number | Serial Number | Purchase Date | Purchase Price | Current Value | Location | Condition | Notes | -|------|-------------------|---------------|---------------|----------------|---------------|----------|-----------|-------| -| Example Equipment | ABC-123 | SN001234 | 2024-01-15 | $1,200.00 | $800.00 | Shelf A1 | Good | Warranty expires 2026 | - -## Tools - -| Item | Model/Part Number | Serial Number | Purchase Date | Purchase Price | Current Value | Location | Condition | Notes | -|------|-------------------|---------------|---------------|----------------|---------------|----------|-----------|-------| -| Example Tool | DEF-456 | SN005678 | 2024-02-10 | $300.00 | $250.00 | Toolbox B | Excellent | | - -## Supplies - -| Item | Model/Part Number | Quantity | Unit Cost | Total Value | Location | Expiration Date | Notes | -|------|-------------------|----------|-----------|-------------|----------|-----------------|-------| -| Example Supply | GHI-789 | 50 | $5.00 | $250.00 | Cabinet C | 2025-12-31 | | - -## Consumables - -| Item | Model/Part Number | Quantity | Unit Cost | Total Value | Location | Expiration Date | Notes | -|------|-------------------|----------|-----------|-------------|----------|-----------------|-------| -| Example Consumable | JKL-012 | 100 | $2.50 | $250.00 | Storage D | 2025-06-30 | | - ---- - -**Total Equipment Value:** $X,XXX.XX -**Total Tool Value:** $X,XXX.XX -**Total Supply Value:** $X,XXX.XX -**Total Consumables Value:** $X,XXX.XX - -**Grand Total:** $X,XXX.XX - -**Last Updated:** [DATE] -**Updated By:** [NAME] \ No newline at end of file diff --git a/markdown-to-tsv.py b/markdown-to-tsv.py deleted file mode 100644 index 97af598..0000000 --- a/markdown-to-tsv.py +++ /dev/null @@ -1,147 +0,0 @@ -#!/usr/bin/env python3 -""" -Convert markdown inventory files to TSV format for asset database import. -Processes markdown tables and extracts inventory data. -""" - -import re -import csv -import sys -import os -from pathlib import Path -import argparse -from datetime import datetime - -def parse_markdown_table(content, section_name): - """Parse a markdown table and return rows as dictionaries.""" - items = [] - - # Find the section - section_pattern = rf'## {section_name}\s*\n' - section_match = re.search(section_pattern, content, re.IGNORECASE) - - if not section_match: - return items - - # Extract content from this section until next section or end - start_pos = section_match.end() - next_section = re.search(r'\n## ', content[start_pos:]) - - if next_section: - section_content = content[start_pos:start_pos + next_section.start()] - else: - section_content = content[start_pos:] - - # Find table - table_pattern = r'\|([^|]+\|)+\s*\n\|[-\s|:]+\|\s*\n((?:\|[^|]*\|.*\n?)*)' - table_match = re.search(table_pattern, section_content) - - if not table_match: - return items - - # Parse header - header_line = table_match.group(0).split('\n')[0] - headers = [h.strip() for h in header_line.split('|')[1:-1]] - - # Parse data rows - data_section = table_match.group(2) - for line in data_section.strip().split('\n'): - if line.strip() and '|' in line: - values = [v.strip() for v in line.split('|')[1:-1]] - if values and values[0]: # Skip empty rows - item = dict(zip(headers, values)) - item['Category'] = section_name - items.append(item) - - return items - -def extract_shop_name(content): - """Extract shop name from markdown title.""" - title_match = re.search(r'^#\s*(.+)', content, re.MULTILINE) - if title_match: - return title_match.group(1).strip() - return "Unknown Shop" - -def process_markdown_file(file_path): - """Process a single markdown file and extract all inventory items.""" - try: - with open(file_path, 'r', encoding='utf-8') as f: - content = f.read() - - shop_name = extract_shop_name(content) - all_items = [] - - # Process each section - sections = ['Equipment', 'Tools', 'Supplies', 'Consumables'] - for section in sections: - items = parse_markdown_table(content, section) - for item in items: - item['Shop'] = shop_name - item['Source_File'] = os.path.basename(file_path) - all_items.append(item) - - return all_items - - except Exception as e: - print(f"Error processing {file_path}: {e}", file=sys.stderr) - return [] - -def write_tsv(items, output_file): - """Write items to TSV file.""" - if not items: - print("No items to write.") - return - - # Get all unique fields - all_fields = set() - for item in items: - all_fields.update(item.keys()) - - # Standard field order - standard_fields = ['Shop', 'Category', 'Item', 'Model/Part Number', 'Serial Number', - 'Purchase Date', 'Purchase Price', 'Current Value', 'Location', - 'Condition', 'Quantity', 'Unit Cost', 'Total Value', 'Expiration Date', - 'Notes', 'Source_File'] - - # Arrange fields with standard ones first - fieldnames = [f for f in standard_fields if f in all_fields] - fieldnames.extend([f for f in all_fields if f not in standard_fields]) - - with open(output_file, 'w', newline='', encoding='utf-8') as f: - writer = csv.DictWriter(f, fieldnames=fieldnames, delimiter='\t') - writer.writeheader() - writer.writerows(items) - -def main(): - parser = argparse.ArgumentParser(description='Convert markdown inventory to TSV') - parser.add_argument('input', nargs='*', help='Input markdown files or directories') - parser.add_argument('-o', '--output', default='inventory.tsv', help='Output TSV file') - parser.add_argument('-r', '--recursive', action='store_true', help='Process directories recursively') - - args = parser.parse_args() - - if not args.input: - # Default to current directory src folder - args.input = ['src/'] - - all_items = [] - - for input_path in args.input: - path = Path(input_path) - - if path.is_file() and path.suffix == '.md': - all_items.extend(process_markdown_file(path)) - elif path.is_dir(): - pattern = '**/*.md' if args.recursive else '*.md' - for md_file in path.glob(pattern): - if 'inventory' in md_file.name.lower() or 'equipment' in md_file.name.lower() or 'tools' in md_file.name.lower(): - all_items.extend(process_markdown_file(md_file)) - - if all_items: - write_tsv(all_items, args.output) - print(f"Processed {len(all_items)} items and wrote to {args.output}") - else: - print("No inventory items found in the specified files.") - -if __name__ == '__main__': - main() \ No newline at end of file diff --git a/sample-inventory.md b/sample-inventory.md deleted file mode 100644 index 02a4f72..0000000 --- a/sample-inventory.md +++ /dev/null @@ -1,29 +0,0 @@ -# Sample Clean Fabrication Shop Inventory - -## Equipment - -| Item | Model/Part Number | Serial Number | Purchase Date | Purchase Price | Current Value | Location | Condition | Notes | -|------|-------------------|---------------|---------------|----------------|---------------|----------|-----------|-------| -| Soldering Station | Hakko FX-888D | SN123456 | 2023-03-15 | $149.99 | $120.00 | Bench A | Excellent | Under warranty | -| Hot Air Station | Quick 861DW | SN789012 | 2023-05-22 | $89.99 | $75.00 | Bench B | Good | | - -## Tools - -| Item | Model/Part Number | Serial Number | Purchase Date | Purchase Price | Current Value | Location | Condition | Notes | -|------|-------------------|---------------|---------------|----------------|---------------|----------|-----------|-------| -| Digital Multimeter | Fluke 87V | SN345678 | 2023-01-10 | $389.99 | $350.00 | Toolbox 1 | Excellent | Calibrated 2024 | -| Oscilloscope | Rigol DS1054Z | SN901234 | 2023-04-12 | $349.99 | $300.00 | Bench C | Good | | - -## Supplies - -| Item | Model/Part Number | Quantity | Unit Cost | Total Value | Location | Expiration Date | Notes | -|------|-------------------|----------|-----------|-------------|----------|-----------------|-------| -| Solder Wire | Kester 63/37 | 5 | $24.99 | $124.95 | Cabinet A | | 1lb spools | -| Flux Paste | Kester 186 | 3 | $12.99 | $38.97 | Cabinet A | 2025-12-31 | | - -## Consumables - -| Item | Model/Part Number | Quantity | Unit Cost | Total Value | Location | Expiration Date | Notes | -|------|-------------------|----------|-----------|-------------|----------|-----------------|-------| -| Solder Wick | Chemtronics 80-3-5 | 10 | $4.99 | $49.90 | Drawer B | | | -| Isopropyl Alcohol | 99% IPA | 2 | $8.99 | $17.98 | Chemical Cabinet | | 1L bottles | \ No newline at end of file diff --git a/src/SUMMARY.md b/src/SUMMARY.md index 4a42782..8047bfa 100644 --- a/src/SUMMARY.md +++ b/src/SUMMARY.md @@ -1,5 +1,5 @@ - [Welcome](./Welcome.md) -- [Version History](./version-history.) +- [Version History](./version-history.md) - [Shop Health / Safety / Security information](./shss.md) - [First Aid](./first-aid.md) - [Emergency Action Plan](./emactplan.md) diff --git a/src/Welcome.md b/src/Welcome.md new file mode 100644 index 0000000..f82f58e --- /dev/null +++ b/src/Welcome.md @@ -0,0 +1 @@ +# Welcome diff --git a/src/hpclab-overview.md b/src/hpclab-overview.md index 42a87e4..fdc0abf 100644 --- a/src/hpclab-overview.md +++ b/src/hpclab-overview.md @@ -1,3 +1,3 @@ # TSYS High Performance Computing Lab Overview -Currently, TSYS Group (Starting Line Productions parent company) operates an HPC cluster to run various medium/large engineering workloads. TSYS is considering making some capacity on this cluster available to STL customers at some point in the future. +Currently, **Turnkey Network Systems LLC** (part of the **TSYS Group**) operates an HPC cluster to run various medium/large engineering workloads. We are considering making some capacity on this cluster available to STLP customers at some point in the future. diff --git a/src/welcome.md b/src/welcome.md index 6e64d8b..4924b25 100644 --- a/src/welcome.md +++ b/src/welcome.md @@ -1,11 +1,11 @@ # Starting Line Productions Shop Guide -Welcome to Starting Line Productions (STL)! +Welcome to Starting Line Productions (STLP)! -We created STL to serve the needs of our parent corporation (Turnkey Network Systems) and support R&D at Suborbital Systems (high altitude balloons) and MeetMorse (ground stations and subscriber equipment). We have spare capacity in between hardware revisions and wanted to monetize the asset base. Hence, we are making it available to the public at industry leading breakthrough pricing and access hours. +We created STLP to serve the needs of our parent corporation, **Turnkey Network Systems LLC** (part of the **TSYS Group**), and support R&D at Suborbital Systems (high altitude balloons) and MeetMorse (ground stations and subscriber equipment). We have spare capacity in between hardware revisions and wanted to monetize the asset base. Hence, we are making it available to the public at industry leading breakthrough pricing and access hours. This document provides a comprehensive overview of the tools, equipment and supplies provided as part of your rental. It covers all the rental areas, what is provided with each and -links to vendor/product documentation. A big goal of STL is to have the lab be fully reproducible by anyone! +links to vendor/product documentation. A big goal of STLP is to have the lab be fully reproducible by anyone! We include pictures of all the areas and tools/equipment. We put quite a bit of work into building this shop and want to show it off!