AnalyzeProjects evaluates a controlled portfolio of local projects with OpenAI and produces per-project JSON plus a compiled Markdown summary. ProjectIndex.md is the sole inclusion authority: the analyzer does not discover extra projects from drive roots.
The checked-in index contains exactly 33 projects:
| Group | Count | Evaluation basis |
|---|---|---|
| DRS | 14 | Desktop Application Release Standard |
| CTS | 9 | Command Tool Standard |
| WDS | 2 | Website Development Standard |
| Standards | 8 | Internal clarity, completeness, consistency, and implementability |
QB-Winget and WingettingQB64 are evaluated as DRS. HolyC-Llama, ConversionTools, and ScriptWriters are included in the CTS evaluation inventory. AptlantisLogos is evaluated as CTS because it is a whole-drive support/standardization project, not a WDS website project. The eight standards are read from D:\.library\aptlantis_core, not the historical .city_hall tree, and exclude D:\.library\aptlantis_core\Blanks.
- Parse and validate
ProjectIndex.md. - Require 33 unique, existing project directories with the exact 14/9/2/8 group distribution.
- Select
<folder>.manifest.tomlwhen present. A single alternative direct manifest is accepted; a manifest is optional. - Read each DRS, CTS, and WDS governing standard once.
- Sample high-value files within the configured file and character budgets.
- Send the project evidence and its group-specific governance context to
gpt-5-mini-2025-08-07. - Validate and normalize the JSON response, write individual results, then compile the summary.
Standards projects use a separate rubric. Application release requirements are not automatically imposed on governance documents.
Every transferred file block is labeled either complete file or sampled excerpt, including the exact excerpt size when shortened. An excerpt ending is a context-transfer boundary, not evidence of a damaged repository file. The prompt prohibits treating that boundary as a defect, and post-processing removes transfer-related truncation claims from actionable findings.
Each result records:
project_groupgoverning_standardrepository_urlmanifest_pathwhen availablesampling.sampled_files, sampled characters, and configured limits
The original assessment fields remain compatible with existing dashboard consumers.
Copy config.example.toml to the ignored local config.toml when bootstrapping a checkout. Set the OpenAI key in the process environment; credentials are not read from configuration files:
$env:OPENAI_API_KEY = [Environment]::GetEnvironmentVariable("OPENAI_API_KEY", "Machine")The analyzer fails before scanning when the key is unavailable. If a credential was previously stored in config.toml, rotate it through the OpenAI dashboard.
If OpenAI rejects the configured key with 401 or 403, the run stops immediately instead of retrying every project.
From D:\CTS\AnalyzeProjects:
python Summarizer.pyThe configured output remains under the existing dashboard summary location. Recent result files may be reused when skip_already_processed is enabled.
The test suite uses temporary directories and mocked HTTP requests; it does not make paid API calls:
python -m unittest discover -s tests -vTo inspect the index without invoking the model:
python -c "import Summarizer; c=Summarizer.load_config('config.toml'); print([(t.project_group, t.project_name) for t in Summarizer.discover_projects(c)])"Malformed entries, duplicate paths, missing directories, missing standards, and incorrect group totals are fatal rather than silently skipped.