Project Overview
High-level purpose, structure, supported workflows, and active experiment story.
This page gathers the project's core documentation into one indexed, linkable handbook. It is meant to be the human-readable companion to the dashboard: architecture, status, workflows, validation scope, integration targets, archive posture, and roadmap live here in one place.
High-level purpose, structure, supported workflows, and active experiment story.
Repo-wide answer to what is indexed, integrated, automated, and publication-validated.
Current historical domain and result-family coverage against the project's main goals.
Concrete release-hardening gate for the first 1.0 tag.
Working draft of the first stable release notes.
Architecture, pitfalls, build commands, and day-to-day maintenance guidance.
Local guide to the primary integrated solver line, its entry points, and its AO support role.
Authoritative validation-surface guide for the supported confidence gate.
How the modern experiment workspace, overlay plots, and generated run assets fit together.
Catalog of preserved datasets, baseline results, thesis artifacts, and archive holdings.
Operator-facing workflow map: validation, experiments, docs sync, and intake.
Current bridge strategy and investigation state for the next post-M1 integration target.
Filesystem review: supported line, reference snapshots, archives, and mixed-purpose areas.
Repo-wide read on what is now well documented, what still feels thin, and where the next documentation passes should go.
Migration history, current phase, roadmap, and long-form status narrative.
The handbook assembles the repo overview, status matrix, validation scope, workflows, development guide, integration notes, structure review, duplication policy, and long-form roadmap into one page.
This page is generated during the same docs/status build cadence as the release dashboard and public project page. Updating the source docs and regenerating the project docs refreshes the handbook too.
Release dashboard, project page, public handbook, repository root.
High-level purpose, structure, supported workflows, and active experiment story.
Modernized codebase from the PhD thesis "A Method of Program Understanding using Constraint Satisfaction" (Steven Woods, University of Waterloo, CS-96-33).
Originally developed in Allegro Common Lisp on SPARC, renovated for SBCL on modern hardware.
A constraint satisfaction approach to automated program understanding. Given a program's abstract syntax, the system matches it against a library of programming plans (templates) using CSP techniques to identify algorithmic patterns.
Three CSP solving strategies are implemented and compared:
adt): Direct CSP matching with backtracking, forward checking, and dynamic rearrangementmemory-search): Two-phase approach using a memory of previously solved problems to guide searchThe primary goal is not just to make the Lisp code run on modern hardware. It is to restore an integrated constraint-solver baseline that:
in the repo and archive intake, and
historical solver lineage with any remaining deltas explained.
Current focus after 1.0.0: keep the supported PhD-result validation path green, use the integrated baseline as the stable reference point, and make the next major effort the ingestion, de-duplication, and categorization of newly found relevant material. See RENOVATION.md for the active roadmap, VALIDATION-MATRIX.md for the current domain/result coverage map, REPOSITORY-STATUS.md for the repo-wide integration/testing/publication status table, REPOSITORY-STRUCTURE-REVIEW.md for the filesystem clarity review, and docs/release-dashboard.html for the visual release dashboard. A full generated handbook now lives at docs/project-handbook.html, with the public readable copy at <https://sgwoods.github.io/public/phd-renovation-handbook.html>. The same source data and doc-refresh build now drive the handbook, dashboard, and public-facing PhD project page so those views stay in sync. The thesis itself is available from the project home surfaces in both docs/phd-renovation-thesis.pdf and docs/phd-renovation-thesis.ps form, with the canonical source PDF preserved under data/thesis/.
csp/ Base CSP solver (backtracking, AC-3, queens, ADT, MPR)
qcsp3/ Extended solver (memory-CSP, GSAT, Quilici search)
qcsp-may29-1996/ Historical snapshot (May 1996, includes embedded batch data)
qcsp-alex-sep16-1997/ Historical snapshot (Sep 1997, with extended adt)
data/ Consolidated data directory (see data/README.md)
sparc-archive/ Original SPARC archive listings and thesis-era data
acl-experiments/ Original ACL experiment results (ij2/ij3/ij4)
csp-batch/ Earliest batch experiments (T1-T6, 1993-1994)
csp-adt-batch/ ADT domain batch experiments (ij1-ij4)
motors-releases/ MOTORS solver releases (.tar.Z, 1993)
motors-backups/ MOTORS solver backups (.zoo, 1994)
thesis/ Canonical PhD thesis source PDF
Q-Batch-SBCL/ Replicated experiments (SBCL, M4 Mac)
Graph/ 4-way comparison plots (ACL vs qcsp3 vs alex vs may29)
incoming/ Single intake bucket for newly found relevant material
tests/ FiveAM test suites
src/ Entry point
qcsp3/ is the primary codebase for the supported thesis-validationbaseline and the leading candidate for the future gold-standard integrated solver; csp/, qcsp-may29-1996/, and qcsp-alex-sep16-1997/ are the comparison snapshots.
tests/ is the authoritative validation surface. It contains the FourFiveAM suites, the asserted AO runner, and the artifact/thesis-result validation scripts that CI uses. The AO runner now covers the bounded M1 AO surface: qcsp3/may29 cases 1-3 plus wrappers, and the alex revise baseline.
Q-Batch-SBCL/ is the runnable SBCL experiment workspace. It holds themodern experiment drivers, generated run directories, and comparison plots.
data/ holds preserved ACL/SPARC-era baselines and archive material.data/thesis/ holds the canonical thesis PDF; the docs/status build exportspublic-facing docs/phd-renovation-thesis.pdf and docs/phd-renovation-thesis.ps copies from it.
incoming/ is the first stop for newly found relevant code, data,publications, or experiment artifacts before review and promotion. Dump names are fine; review can normalize the folder label later if the contents reveal a better date/source name.
historical finds/ is archive intake and provenance work, not supportedbaseline code.
run-test4*.lisp, run-csp-tests.lisp, and renovate.lisp aremanual compatibility helpers, not the primary supported workflow.
VALIDATION-MATRIX.md summarizes which historical domains and resultfamilies are executable now, integrity-checkable now, or still reference-only.
REPOSITORY-STATUS.md answers the broader repo-wide question: what isindexed, integrated, tested, and publication-validated.
RELEASE-1.0-CHECKLIST.md is the concrete release-hardening punch list forthe first 1.0.0 tag.
RELEASE-1.0.0-NOTES.md is the working draft of the first release notes.HANOI-4-STATUS.md records the current bounded position on the Hanoi-4lane: documented for 1.0, behaviorally unresolved as a 2.0 goal.
DOCS-COVERAGE-REVIEW.md records what parts of the repo are now welldocumented, what still feels thin, and where the next docs passes should go.
WORKFLOWS.md maps the primary supported operator workflows and thesecondary/manual ones.
docs/project-handbook.html is the full generated human-readable handbookthat gathers the major status, roadmap, workflow, and architecture docs into one indexed page.
docs/README.md explains which files under docs/ are authoritative sourcedata versus generated outputs.
MANUAL-HELPERS.md explains the repo-root helper scripts and how theyrelate to the supported operator flow.
tools/README.md explains the maintained generators that keep the dashboard,handbook, public page, and status manifest synchronized.
REPOSITORY-STRUCTURE-REVIEW.md classifies the repo layout into supportedsystems, result archives, experiment workspaces, and archive-only material.
DUPLICATES-REVIEW.md records which reviewed historical overlaps are trueduplicates versus which still carry archive/provenance value.
incoming/README.md and incoming/INDEX.md define and track the intake flowfor future finds.
historical finds/README.md explains the reviewed archive/recovery lane andhow it differs from both incoming/ and the supported baseline.
qcsp-alex-sep16-1997/testdata/Results/README.md andqcsp-alex-sep16-1997/testdata/Results-Loop/README.md clarify the deeper preserved Alex result families.
historical finds/Refine/README.md, historical finds/Unravel/README.md,and historical finds/Unravel-changes/README.md provide local guidance for the archive-only recovered tooling/context trees.
| System | Directory | Description |
|---|---|---|
:phd-research | csp/ | Base CSP solver with queens, ADT, MPR domains |
:qcsp3 | qcsp3/ | Extended solver with memory-CSP and Quilici search |
:qcsp-may29-1996 | qcsp-may29-1996/ | Historical snapshot (May 1996) |
:qcsp-alex-sep16-1997 | qcsp-alex-sep16-1997/ | Historical snapshot (Sep 1997) |
# Interactive REPL
sbcl --load "src/main.lisp"
# Run all FiveAM test suites (CSP, QCSP3, May29, Alex)
sbcl --non-interactive --load "tests/run.lisp"
# Run asserted AO regression coverage
sbcl --non-interactive --load "tests/ao-run.lisp"
# Run individual suites
sbcl --non-interactive --load "tests/csp-suite.lisp"
sbcl --non-interactive --load "tests/qcsp3-suite.lisp"
sbcl --non-interactive --load "tests/may29-suite.lisp"
sbcl --non-interactive --load "tests/alex-suite.lisp"
# Run the validation spine used by CI
bash tests/validate-artifacts.sh
bash tests/validate-dashboard.sh
bash tests/validate-ff-provenance.sh
bash tests/validate-adt-batch.sh
bash tests/validate-csp-batch.sh
bash tests/validate-ao.sh
# Run legacy/manual AO harnesses
sbcl --non-interactive --load "run-test4.lisp"
sbcl --non-interactive --load "run-test4-may29.lisp"
sbcl --non-interactive --load "run-test4-alex.lisp"
# Try it interactively
# (qc 4) ;; 4-Queens
# (qc 8) ;; 8-Queens
# (adt) ;; ADT pattern recognition
# (memory-search) ;; Two-phase memory-based search
Three experiment series evaluate CSP search efficiency under increasing noise (50-1000 extraneous program statements):
| Series | Method | Description |
|---|---|---|
| ij2 | memory-search | Baseline: phase 1 uses BT only |
| ij3 | memory-search | Both phases with FC/DR and advance sort |
| ij4 | adt (direct) | Direct matching with FC/DR and advance sort |
Each series: 20 noise levels x 10 random seeds = 200 runs per snapshot.
# qcsp3 (primary system)
bash Q-Batch-SBCL/ij2.sh && bash Q-Batch-SBCL/ij3.sh && bash Q-Batch-SBCL/ij4.sh
# Historical snapshots
bash Q-Batch-SBCL/run-alex-all.sh # alex (Sep 1997)
bash Q-Batch-SBCL/run-may29-all.sh # may29 (May 1996)
python3 Q-Batch-SBCL/Graph/compare-all-overlay.py # 4-way overlay plots (uses data/acl-experiments/Graph)
The supported SBCL baseline preserves the published ACL/SPARC experimental story for ij2, ij3, and ij4: the regenerated CI curves stay highly correlated with the thesis-era ACL curves, preserve the same efficiency ordering, and remain within stable per-series ratio bands. Exact magnitudes are not identical across platforms, so the repo validates historical trend preservation rather than claiming point-for-point statistical identity.
The older ADT ij1-ij4 archive family is now integrity-checkable through tests/validate-adt-batch.sh, which validates the preserved raw file grids and historical CI summaries without claiming a full modern rerun path.
The earliest DREV-era T1-T6 family is now integrity-checkable through tests/validate-csp-batch.sh, which validates the preserved summary layer in data/csp-save-results/ against the historical batch tree and its known archive quirks.
Key findings:
ts-matches-type logic was simplified relative to the earlier snapshots; the dormant DFA options may be the missing compensating mechanism.
Plots are in Q-Batch-SBCL/Graph/compare-*-overlay.png.
Directory guides:
csp/README.mdcsp/ADT-Random/README.mdcsp/MPR-Random/README.mdcsp/MPR-Situation/README.mdqcsp3/README.mdqcsp3/extras/README.mdqcsp3/ADT-Batch/README.mdqcsp3/ADT-Random/README.mdqcsp3/ADT-Situation/README.mdqcsp3/MPR-Random/README.mdqcsp3/MPR-Situation/README.mdsrc/README.mdQ-Batch-SBCL/README.mdQ-Batch-SBCL/Graph/README.mdtests/README.mdqcsp-may29-1996/extras/README.mdqcsp-may29-1996/ADT-Random/README.mdqcsp-may29-1996/ADT-Situation/README.mdqcsp-may29-1996/ADT-SituationMar96/README.mdqcsp-may29-1996/MPR-Random/README.mdqcsp-may29-1996/MPR-Situation/README.mdqcsp-alex-sep16-1997/MyBatch/README.mdqcsp-alex-sep16-1997/ADT-Random/README.mdqcsp-alex-sep16-1997/ADT-Situation/README.mdqcsp-alex-sep16-1997/MPR-Random/README.mdqcsp-alex-sep16-1997/MPR-Situation/README.mdqcsp-alex-sep16-1997/testdata/Results/README.mdqcsp-alex-sep16-1997/testdata/Results-Loop/README.mdWORKFLOWS.mdMANUAL-HELPERS.mddocs/README.mdtools/README.mddata/README.mdincoming/README.mdhistorical finds/README.mdhistorical finds/Refine/README.mdhistorical finds/Unravel/README.mdhistorical finds/Unravel-changes/README.mdREPOSITORY-STATUS.mdREPOSITORY-STRUCTURE-REVIEW.mdDOCS-COVERAGE-REVIEW.mdDUPLICATES-REVIEW.mdADT-BATCH-INTEGRATION.mdAcademic research code. See data/thesis/ for the thesis.
Repo-wide answer to what is indexed, integrated, automated, and publication-validated.
This file answers a broader question than VALIDATION-MATRIX.md:
Is the entire repository indexed and, where practical, integrated, tested, and validated against published or historically reported results?
Short answer: not entirely yet.
bounded AO baseline, and several preserved result families are now indexed and either executable or integrity-checkable.
part of the supported integrated line.
provenance, recovery, or context rather than active validation.
Use this artifact as the repo-wide counterpart to VALIDATION-MATRIX.md. For reviewed duplicate and redundancy decisions, see DUPLICATES-REVIEW.md. For the practical operator view of "what do I run?", see WORKFLOWS.md. For the repo-root helper scripts specifically, see MANUAL-HELPERS.md. For the documentation-focused coverage read, see DOCS-COVERAGE-REVIEW.md. For the current bounded Hanoi-4 position, see HANOI-4-STATUS.md. For the concrete 1.0.0 release gate, see RELEASE-1.0-CHECKLIST.md.
Indexed: documented well enough that its role in the repo is understood.Integrated: part of the supported solver story rather than just preserved.Automated: covered by CI or a repeatable validation script.Publication / report validation: tied directly to thesis or historicallyreported results, either executable or integrity-checkable.
| Question | Current answer |
|---|---|
| Is the whole repo indexed? | Mostly for primary systems, validation surfaces, and major archives; not exhaustively for every recovered intake subtree or legacy side directory. |
| Is the whole repo integrated? | No. qcsp3/ plus the supported validation spine are integrated; most historical/result archives remain reference or integrity-check layers. |
| Is the whole repo tested? | No. The supported solver line and bounded AO baseline are tested and currently clean in fresh validation runs; many historical batches are integrity-checked instead of rerun. |
| Is the whole repo publication-validated? | Partially. The main thesis ij2/ij3/ij4 story is executable and validated; several older result families are tied to publications/reports as preserved artifacts, but not all are modern reruns. |
| Area | Kind | Indexed | Integrated | Automated | Publication / report validation | Current read |
|---|---|---|---|---|---|---|
qcsp3/ | Primary solver line | Yes | Yes | Yes | Yes | Operational center of the supported post-M1 baseline. |
csp/ | Reference solver snapshot | Yes | Reference-only | Yes | Indirectly | Covered by regression tests and used as a comparison anchor. |
qcsp-may29-1996/ | Reference solver snapshot + embedded batches | Yes | Partly | Yes | Yes, partly | Core solver snapshot is tested; embedded batch/result trees are partly integrity-checked. |
qcsp-alex-sep16-1997/ | Reference solver snapshot + archive-heavy extras | Yes | Partly | Yes | Partly | Core snapshot is tested; some experiment/result material remains provenance-only. |
tests/ | Validation spine | Yes | Yes | Yes | Yes | Authoritative supported validation surface. |
Q-Batch-SBCL/ | Modern experiment workspace | Yes | Yes | Yes | Yes | Main executable thesis-result replication path, but mixes tracked infra and generated outputs. |
data/acl-experiments/ | ACL thesis-era baseline results | Yes | Yes | Yes | Yes | Direct baseline for the supported ij2/ij3/ij4 comparison checks. |
data/sparc-archive/PrevResults/ | Thesis-era / SPARC preserved results | Yes | Partly | Partly | Yes | Some families are integrity-checked; others are mapped but not rerun. |
qcsp-may29-1996/NewData4b-Batch/ | Preserved ff* family source tree | Yes | Partly | Yes | Yes | ff1/ff2/ff3 are now integrity-checked, not fully rerunnable through qcsp3/. |
data/csp-adt-batch/ | Preserved ADT batch results | Yes | No, but bridge investigation started | Yes | Report-linked | Integrity-checkable preserved family; the first narrow ij2 bridges now run under both maintained csp and maintained qcsp3. The mismatch still starts in preprocessing, qcsp3 is materially closer than csp, a normalized old-dist1-pre-quilici probe is worse rather than better, the latest structure probe shows qcsp3 currently builds a smaller noise layer with the biggest node-domain squeeze on t2-c, and the source-level generator probe confirms that csp/dist1 and qcsp3/dist1 are genuinely different noise models. |
data/csp-batch/ + data/csp-save-results/ | Earliest DREV-era batch family | Yes | No | Yes | Report-linked | Integrity-checkable preserved family; outside the integrated executable line. |
historical finds/yj-sun/Csp/ | Archive recovery candidate | Yes | No | No | Indirectly | Strong provenance value; not part of the supported line. |
historical finds/yj-sun/Gen++/ | Upstream toolchain archive | Partly | No | No | Indirectly | Important context for historical input generation, but not integrated. |
Other historical finds/ subtrees | Archive/context intake | Partly | No | No | Unclear / indirect | Preserved as recovery/context material rather than validated code or data. |
data/motors-releases/ + data/motors-backups/ | Compressed external solver archives | Yes | No | No | Historical context | Cataloged but not unpacked into a validated path yet. |
data/thesis/ | Publication artifact | Yes | Reference-only | No | Yes | Thesis PDF is preserved as the publication anchor, not a generated artifact. |
data/lost-datasets.md + terrain references | Missing historical domain | Yes | No | No | Historically relevant | Explicitly tracked as the major blocked lane outside the current integrated line. |
HANOI-4-STATUS.md + future incoming/ finds | Deferred historical/research lane | Yes | No | No | Not yet | Explicitly documented as a 2.0 behavior/repeatability goal; 1.0 only requires a clear statement of the situation, artifacts, and references once they are ingested. |
Root run-test4*.lisp | Manual AO harnesses | Yes | Partly | No | Indirectly | Preserved for manual/historical use; supported AO confidence now flows through tests/ao-run.lisp. |
Root run-csp-tests.lisp / renovate.lisp | Legacy/manual loader helpers | Partly | No | No | No | Still usable, but secondary to src/main.lisp and tests/. |
docs/ | Generated/public status outputs | Yes | Yes | Yes | Project-status, not research publication | First-class operator/public status artifacts driven from one source file. |
The repository now has three broad zones:
Supported integrated baselineqcsp3/, the validation spine in tests/, the modern experiment workspace in Q-Batch-SBCL/, and the thesis-era ACL baselines under data/.
Reference and integrity-check layersHistorical snapshots and preserved result families that are documented and checked, but not yet folded into one executable gold-standard line.
Archive, recovery, and context materialRecovered historical finds, compressed legacy archives, and missing-domain trackers that matter to the long-term story but are not yet integrated.
Incoming review queueNewly found relevant material should land in incoming/ first, then be reviewed and promoted into one of the three zones above.
Deferred research-readiness lanesTopics like Hanoi-4 that are important enough to track explicitly, but whose current 1.0 requirement is documentation and bounded scope rather than full behavioral closure.
The current post-1.0.0 mainline priority is intake hardening and release maintenance.
That means the current recommended order is:
current,
incoming/ review, de-duplication, and categorization the next majoroperational lane,
1.0.1 for remaining STYLE-WARNING cleanup outside the supportedrelease gate,
active integration obligation,
Hanoi-4 as a documented 1.x lane and a 2.0research/repeatability goal.
The current ADT batch note lives in ADT-BATCH-INTEGRATION.md. Current recommendation: keep the preserved wrapper mapping and bridge probes as historical explanation, but do not require the maintained integrated line to absorb the family.
Keep this file in sync whenever one of these changes happens:
integrity-checkable or executable,
Current historical domain and result-family coverage against the project's main goals.
This file tracks the historical domains and result families that matter to the project's primary goal:
qcsp3/ is currently the leading candidate for that gold-standard line. It has now cleared Milestone M1, but it has not yet earned that status across the full historical surface.
The first explicit gate for qcsp3/ is:
Milestone M1: integrated validated baseline
To satisfy M1, qcsp3/ must:
ij2/ij3/ij4story,
ff* family,even if that family is still integrity-checkable rather than rerunnable through qcsp3/, and
This is the first practical step toward one gold-standard code line. M1 is now accepted, but it is not the final "everything historical is unified" finish line.
The current delta ledger for this milestone lives in INTEGRATION-DELTAS.md. The short gate summary for this milestone lives in M1-READINESS.md. The current ADT batch investigation note lives in ADT-BATCH-INTEGRATION.md.
Executable now: we have a supported runnable validation path today.Integrity-checkable now: the preserved artifacts can be checked or comparedreliably, even if we do not yet have a clean modern rerun path.
Provenance-only for now: the family is historically meaningful, but theexecutable or integrity story is not yet strong enough.
| Domain / result family | Historical source | Current validation status | Current executable/check path | Gold-standard target status |
|---|---|---|---|---|
| Core queens regressions | csp/, qcsp3/, qcsp-may29-1996/, qcsp-alex-sep16-1997/ | Executable now | tests/run.lisp | Covered as reference baseline; should remain covered in the integrated line |
| Confused queens metrics | same four snapshots | Executable now | tests/run.lisp | Covered as deterministic regression anchor |
AO / test4 baseline | root run-test4*.lisp, snapshot extras | Executable now | tests/ao-run.lisp, tests/validate-ao.sh | In scope for M1; qcsp3 and May29 now assert AO cases 1-3 across the reduction families plus test4s / test4a, while alex keeps its revise baseline |
PhD ij2 / ij3 / ij4 reported trend story | data/acl-experiments/Graph/, thesis plots, SBCL reruns | Executable now | tests/validate-artifacts.sh, tests/validate-thesis-comparison.py, Q-Batch-SBCL/ | In scope for M1; central gate for the integrated line |
Older ff1 / ff2 / ff3 FCDR distribution family | qcsp-may29-1996/NewData4b-Batch/, data/sparc-archive/PrevResults/ | Integrity-checkable now | tests/validate-ff-provenance.sh | In scope for M1 as a documented integrity-checked family |
Early exp-1 / exp-2 / exp-3 result families | historical finds/yj-sun/Csp/testdata/Results/, data/sparc-archive/PrevResults/ | Integrity-checkable now | Crosswalk documented in historical finds/yj-sun/Csp/RESULTS-CROSSWALK.md | Not yet covered by the integrated line |
ADT batch archives (ij1-ij4 era before SBCL replication) | data/csp-adt-batch/, snapshot batch trees | Integrity-checkable now; executable investigation documented | tests/validate-adt-batch.sh, tests/investigate-adt-batch-bridge.sh, tests/investigate-adt-batch-random-lineage.sh, tests/investigate-adt-batch-input-shape.sh, tests/investigate-adt-batch-source-drift.sh, tests/investigate-adt-batch-structure-drift.sh, tests/investigate-adt-batch-generator-drift.sh, tests/investigate-adt-batch-qcsp3-bridge.sh, tests/investigate-adt-batch-qcsp3-old-dist1-bridge.sh | Snapshot-specific preserved family; integrity-checkable and explained, but not a required reproduction target for the integrated qcsp3 line |
Earliest CSP batch families (T1-T6) | data/csp-batch/, data/csp-save-results/ | Integrity-checkable now | tests/validate-csp-batch.sh | Preserved DREV-era archive now checkable; still outside the integrated executable line |
| MPR domain behavior | source snapshots and runtime-generated situation/random files | Executable now at solver level | tests/run.lisp MPR assertions | Covered at regression level, but not yet tied to a broader historical result family |
| Alex-specific DFA-related ADT behavior | qcsp-alex-sep16-1997/ | Provenance-only for now | Diagnosed but not yet part of supported validation | Open research/integration item |
| QCSP-nov96 terrain domain | data/lost-datasets.md, QCSP-nov96.dir, Lacie1 recovery lead | Provenance-only for now | No runnable path yet; Lacie1 reportedly contains terrain data and generator but remains unsorted | Recovery lead identified, still outside M1 |
| Hanoi-4 domain / repeatability lane | currently tracked through HANOI-4-STATUS.md and future incoming/ finds | Provenance-only for now | No indexed executable or integrity-check path yet | Not a 1.0 blocker; document the situation for 1.0, treat clear behavioral understanding as a 2.0 goal |
categorization as new material lands in incoming/.
project phase explicitly chooses to emulate its older noise semantics.
noise in that path as a regression signal.
incoming/, classify it deliberately asexecutable, integrity-checkable, provenance-only, or duplicate before promoting it into the main repo story.
1.0.1 for remaining STYLE-WARNING cleanup outside the supportedrelease gate rather than letting that noise blur intake or release work.
post-1.0.0 integrated line more than it increases maintenance surface.
Hanoi-4 as explicitly bounded for 1.x: maintain a clear statusrecord, but defer full behavior/repeatability understanding to 2.0.
Concrete release-hardening gate for the first 1.0 tag.
This file is the concrete punch list for the first 1.0.0 release.
It turns the current roadmap into a release gate we can actually close.
1.0.0 Means1.0.0 does not mean every preserved historical family is fully rerunnable through one code path.
It means:
integrity-checkable, or explicitly deferred,
accidental.
1.0.0qcsp3/ as the operational center of the supported integrated lineij2 / ij3 / ij4 validation pathff* integrity/provenance relationshipT1-T6 as preserved integrity-checkable familiesHanoi-41.0.0Hanoi-4 behavior/repeatability closureqcsp3/ when they arebetter treated as documented archives
a release blocker
These must pass for a 1.0.0 release candidate:
sbcl --non-interactive --load "tests/run.lisp"
bash tests/validate-artifacts.sh
bash tests/validate-ff-provenance.sh
bash tests/validate-adt-batch.sh
bash tests/validate-csp-batch.sh
bash tests/validate-ao.sh
bash tests/validate-dashboard.sh
README.md, RENOVATION.md, VALIDATION-MATRIX.md, andREPOSITORY-STATUS.md agree on current scope
M1-READINESS.md, INTEGRATION-DELTAS.md, andHANOI-4-STATUS.md reflect current accepted boundaries
docs/release-dashboard-data.json reflects the active release focusdocs/release-dashboard.html, docs/project-handbook.html, docs/public-phd-renovation.html, docs/public-phd-renovation-handbook.html, docs/public-status-phd-renovation.json
1.0 blockers remain in project docsCurrent draft:
RELEASE-1.0.0-NOTES.mdTarget 1.0.1 to reduce the remaining STYLE-WARNING noise that still appears outside the supported release gate, especially older gsat lexical-special warnings and legacy helper-path warnings such as the compile-all reference.
As of March 22, 2026, the project looks close enough to 1.0.0 that the main remaining work is release hardening, not broad new solver expansion.
The most likely remaining pre-1.0 work is:
1.0.0 release notes from the now-stable scope,Hanoi-4 stay explicitrather than quietly becoming implied blockers.
Working draft of the first stable release notes.
1.0.0 marks the first stable integrated release of the PhD renovation project.
This release establishes a clear, reproducible thesis-result baseline on modern SBCL, classifies the major preserved historical families honestly, and ships with synchronized status, handbook, dashboard, and public project pages.
qcsp3/ is the operational center of the supported integrated solver line.ij2 / ij3 / ij4 result story is executable from afresh checkout.
test4 baseline is asserted rather than smoke-only.ff*, ADT batch, and DREV-era T1-T6 families are no longervague archive material; they are documented and integrity-checkable where appropriate.
documented explicitly rather than left as implicit lore.
1.0.0 is backed by the supported validation spine:
tests/run.lisptests/validate-artifacts.shtests/validate-ff-provenance.shtests/validate-adt-batch.shtests/validate-csp-batch.shtests/validate-ao.shtests/validate-dashboard.shij2 / ij3 / ij4 trend-validation pathff1 / ff2 / ff3exp-1 / exp-2 / exp-3 crosswalked result familiesij1-ij4)T1-T6 familyrequired qcsp3 reproduction target
Hanoi-4 is documented for 1.0, with full behavioral and repeatabilityunderstanding deferred to 2.0
1.0 blocker
1.0.0 does not claim:
Hanoi-4 repeatability.
Instead, it claims a trustworthy supported baseline with explicit boundaries.
ij4 still diverges in the documented way tied to its simplifiedts-matches-type behavior
integrated line
This release also establishes:
snapshots,
1.0.0 is the first release where the renovated solver line, thesis-result validation path, preserved historical family classification, and public-facing status/documentation story all line up cleanly enough to treat the project as stable and trustworthy to build on.
Bounded status record for the deferred Hanoi-4 lane: documented for 1.0, behaviorally unresolved for 2.0.
This file records the repo's current position on Hanoi-4.
It exists to keep the plan honest: Hanoi-4 is now treated as a documented post-1.0 research/repeatability lane rather than an implicit blocker for the first gold-standard integrated solver release.
Short answer: Hanoi-4 is not currently an indexed, validated, or integrated result family in this repository.
As of March 22, 2026:
Hanoi-4 experiment family is indexed in the main validationmatrix,
Hanoi-4 validation harness is part of the supported gate,supported or integrity-checkable surface.
That does not make Hanoi-4 unimportant. It means the repo should describe the gap clearly instead of letting it act as an undefined 1.0 obligation.
1.0 PositionFor the 1.0 integrated-line goal, the requirement is:
Hanoi-4 situation,Hanoi-4 artifacts,and when the supporting references are actually ingested and indexed, and
So 1.0 requires clarity and bounded scope, not a complete Hanoi-4 repeatability solution.
2.0 PositionFor the eventual 2.0 research-readiness goal, the requirement becomes:
Hanoi-4 code, data, and resultartifacts,
Hanoi-4 results are stably repeatable orwhether they vary materially across runs, environments, or solver variants,
Hanoi-4 should become executable, integrity-checkable, orremain a documented research-only family.
The future Hanoi-4 lane should not start from scratch. Once actual Hanoi-4 artifacts are ingested, this lane should explicitly review later planning/encoding work that may suggest better problem formulations than the historical 1998 framing.
Initial seeded reference:
Hanoi* (LPAR 2008 / EasyChair proceedings). URL: <https://sat.inesc-id.pt/~ines/publications/lpar08-sp.pdf> Why it matters here:
and disk cycle behavior,
hierarchical setup, problem encoding choices, and whether repeatability questions may partly be encoding questions rather than only solver questions.
This does not mean the repo is adopting SAT-based Hanoi work as part of the current integrated Lisp baseline. It means future Hanoi-4 analysis should be informed by later literature instead of treating the 1998 state as the only conceptual frame.
| Item | Current state |
|---|---|
| Indexed code | None currently indexed in the supported repo surface |
| Indexed datasets | None currently indexed in the supported repo surface |
| Indexed preserved outputs | None currently indexed in the supported repo surface |
| Indexed literature / notes | None currently indexed in the supported repo surface |
| Repeatability assessment | Not yet possible from the currently indexed material |
When Hanoi-4 materials are found:
incoming/ first,incoming/INDEX.md,overlap,
archive lane, or a research-only lane.
Until a real Hanoi-4 artifact/reference set is ingested and reviewed, the project should not treat Hanoi-4 as a hidden blocker for 1.0.
It should treat Hanoi-4 as:
1.0, and2.0.Accepted first integration gate for the validated solver line.
This file answers one narrow question:
What still matters for Milestone M1, and are any remaining non-terrain historical families still blocking it?
Short answer: no additional non-terrain family is currently an undisclosed M1 blocker. The only explicitly blocked major historical lane remains the terrain domain, and that is outside M1 by design.
Project decision as of March 21, 2026: Milestone M1 is accepted.
| Gate | Current status | Evidence | M1 read |
|---|---|---|---|
| Supported FiveAM/core baseline | Met | tests/run.lisp | Core solver baseline is already part of the validated line. |
Supported PhD ij2 / ij3 / ij4 trend story | Met | tests/validate-artifacts.sh, tests/validate-thesis-comparison.py | This is the central executable thesis baseline and remains the main gate. |
| Asserted AO baseline | Met for bounded scope | tests/ao-run.lisp, tests/validate-ao.sh | M1 accepts the current honest AO boundary: qcsp3 and May29 now assert AO cases 1-3 across the reduction families plus test4s / test4a, while alex keeps its revise baseline. Broader AO breadth can stay post-M1. |
Preserved ff1 / ff2 / ff3 relationship | Met as integrity-checked | tests/validate-ff-provenance.sh | M1 does not require ff* to be rerunnable through qcsp3/; it requires the family to stay explicitly connected and checked. |
| Meaningful snapshot deltas documented | Met | INTEGRATION-DELTAS.md | The remaining snapshot differences are now explicit rather than folklore. |
| Validation/dashboard/public status flow | Met | tests/validate-dashboard.sh, docs/public-status-phd-renovation.json | Operator/public status outputs are now part of the maintained baseline flow. |
These matter historically, but they are not first-gate blockers for M1:
| Family / lane | Current state | Why it does not block M1 |
|---|---|---|
Early exp-1 / exp-2 / exp-3 families | Integrity-checkable/documented lineage | Useful for broader historical coverage, but not required for the first integrated validated line. |
ADT batch archive (ij1-ij4) | Integrity-checkable | Important archive family, but outside the minimum M1 executable story. |
Earliest DREV-era T1-T6 family | Integrity-checkable | Historically meaningful, but also outside the minimum M1 executable story. |
| Alex DFA-option behavior | Diagnosed but not promoted into supported validation | This is a research-readiness lane, not a first integrated-baseline gate. |
| Hanoi-4 behavior / repeatability | Explicitly tracked, but not yet indexed as a runnable family | For 1.0, a clear status statement is sufficient; full understanding is deferred to 2.0. |
| Remaining minor log noise | Small leftovers only | Worth trimming, but not strong enough to block M1 once bounded and documented. |
| Family / lane | Current state | Why it is outside M1 |
|---|---|---|
| QCSP-nov96 terrain domain | Provenance-only, recovery lead exists | Missing runnable artifacts still prevent inclusion; this is the one major historical gap that remains blocked outside M1. |
M1 is ready when we can say all of the following with a straight face:
qcsp3/ is the operational center of the supported thesis-result story.ff* stays connected to the integrated line as a checked preserved family.silently missing.
That means the question is no longer "what other non-terrain archive family must be pulled in before M1?" M1 has been accepted, and the active question is now "what documentation and operator-facing cleanup best prepares the repo for the next integration step?"
Ledger of meaningful remaining differences between the integrated line and preserved snapshots.
This file records the remaining meaningful differences between qcsp3/ and the historical reference snapshots that matter for Milestone M1 and the eventual gold-standard integrated solver line.
It is not a changelog of every historical quirk. It is the short list of currently relevant deltas that future work should either:
Accept for M1: documented and bounded; not a blocker for the firstintegrated validated baseline.
Reduce after M1: real gap, but not a first-gate blocker once the boundaryis explicit.
Blocker outside M1: important, but outside the first integrated-baselinetarget because artifacts or coverage are still missing.
| Delta area | qcsp3/ position | Reference snapshot(s) | Why it matters | Current handling | M1 status |
|---|---|---|---|---|---|
Supported PhD ij2 / ij3 / ij4 baseline | qcsp3/ is the default supported executable path | csp/, qcsp-may29-1996/, qcsp-alex-sep16-1997/ | This is the central thesis-result story and the main modern validation gate. | CI regenerates the SBCL artifacts and checks ACL-vs-SBCL trend preservation through tests/validate-artifacts.sh and tests/validate-thesis-comparison.py. | Accept for M1 |
Alex ij4 divergence | qcsp3/ and may29 track the supported direct-matching baseline; alex diverges sharply upward | qcsp-alex-sep16-1997/ | This is the most visible solver-behavior difference among the maintained snapshots. | Root cause is documented: alex simplified ts-matches-type, likely expecting DFA-related options to compensate; Q-Batch-SBCL/diagnose-ij4.sh reproduces the effect. | Accept for M1, but keep documented |
| AO baseline breadth | qcsp3/ has asserted AO coverage for the supported deterministic baseline | AO extras / run-test4*.lisp paths across snapshots | AO is part of the integrated story, but the full historical AO surface is broader than the bounded supported baseline. | tests/ao-run.lisp and tests/validate-ao.sh now cover qcsp3 and May29 cases 1-3 across the AO reduction families plus the legacy test4s / test4a wrappers, with alex retaining its revise baseline. Further AO expansion is now a post-M1 choice rather than a missing first-gate check. | Acceptable for M1 |
ff1 / ff2 / ff3 family | qcsp3/ does not yet rerun this family directly | qcsp-may29-1996/NewData4b-Batch/, data/sparc-archive/PrevResults/ | This family is historically important and explicitly in scope for M1. | The lineage and aggregation path are documented, and tests/validate-ff-provenance.sh integrity-checks the preserved carry-forward artifacts. | Accept for M1 as integrity-checked, not executable |
Early exp-1 / exp-2 / exp-3 families | not yet under the integrated executable umbrella | historical finds/yj-sun/Csp/testdata/Results/, data/sparc-archive/PrevResults/ | These help explain earlier experiment/result layers, but they are not yet part of the supported modern rerun path. | Crosswalk documented in historical finds/yj-sun/Csp/RESULTS-CROSSWALK.md. | Reduce after M1 |
| ADT batch archives before the SBCL replication line | not yet under a modern executable path, but now structurally validated | data/csp-adt-batch/, historical batch trees | These likely contain useful historical coverage, but they are still archive-heavy and workflow-light. | tests/validate-adt-batch.sh now checks the preserved ij1-ij4 raw grids and CI summary tables; the family is integrity-checkable rather than executable. | Reduce after M1 |
Earliest CSP batch families (T1-T6) | not yet tied to the integrated executable line, but now structurally validated | data/csp-batch/, data/csp-save-results/ | Historically meaningful and useful as an early baseline layer, but still outside the modern executable path. | tests/validate-csp-batch.sh now checks the preserved DREV-era summary layer and batch-tree structure, including known archive quirks. | Reduce after M1 |
| QCSP-nov96 terrain domain | missing from the runnable line, but with a new recovery lead | QCSP-nov96.dir, data/lost-datasets.md, Lacie1 drive lead | This is the clearest missing historical domain, but source/data loss still prevents current integration. | Documented as outside M1, with Lacie1 now recorded as the strongest recovery lead pending review. | Blocker outside M1 |
| Hanoi-4 behavior / repeatability | not yet an indexed or validated repo family | future incoming/ finds; see HANOI-4-STATUS.md | Potentially important historical/research lane, but currently lacks an indexed artifact/reference base. | Explicitly treat 1.0 as requiring only a clear status statement and artifact/reference inventory; defer actual behavioral closure to 2.0. | Accept as non-blocking for 1.0; reduce after 1.0 |
| Validation-log noise | qcsp3/ baseline is now much quieter; the AO harness redefinition chatter is trimmed, leaving only small legacy leftovers like the alex adt-setup note | mostly alex setup and small historical harness leftovers | A noisy merge gate makes regressions harder to notice, even when behavior is correct. | The large alex/core STYLE-WARNING tail is cleared, and the AO/manual harness chatter has been reduced; what remains is mostly cosmetic but still worth trimming. | Reduce after M1 |
Milestone M1 is satisfied when:
qcsp3/ remains the operational center of the supported thesis-result path,ff* family remains explicitly connected to the integrated line even ifit is still integrity-check-only, and
So M1 does not mean "all historical families are unified already." It means the repo has crossed from "best-supported candidate" to "first explicitly integrated validated line."
For the short operational answer to "what still blocks M1 right now?", see M1-READINESS.md.
Architecture, pitfalls, build commands, and day-to-day maintenance guidance.
Onboarding guide for AI assistants and developers working on this project.
A 1990s PhD research codebase (Common Lisp) that solves program understanding as a constraint satisfaction problem. Given a program's abstract syntax, the solver matches it against a library of programming plans (templates) to identify algorithmic patterns like sorting, searching, or data structure operations.
The codebase was originally written in Allegro Common Lisp on SPARC/Solaris (1993-1997) and has been renovated to run on SBCL (Steel Bank Common Lisp) on modern hardware. The renovation preserved algorithmic equivalence — verified by reproducing 1,800+ experiment runs with statistically matching results.
The broader project goal now goes beyond renovation: use the preserved snapshots, tests, and result artifacts to converge on one gold-standard code line that can reproduce the PhD results and absorb the historically reported domains/results under a single validated umbrella.
Two top-level status artifacts now help answer broader repo questions quickly:
REPOSITORY-STATUS.md: repo-wide indexing/integration/testing/publicationstatus table
REPOSITORY-STRUCTURE-REVIEW.md: filesystem clarity review andclassification guide
docs/project-handbook.html: generated full readable handbook that pulls thecurrent core docs together into one indexed page
New material intake now has one dedicated landing zone:
incoming/: single bucket for newly found relevant code, data,publications, and experiment artifacts before review and promotion
The project contains four independent ASDF systems that share the same architecture but represent different development stages:
| System | Package | Nickname | Directory | Files | Era |
|---|---|---|---|---|---|
:phd-research | PHD-CSP | csp | csp/ | 14 | 1993-1994 |
:qcsp3 | PHD-QCSP3 | qcsp3 | qcsp3/ | 13 | 1996 (primary) |
:qcsp-may29-1996 | PHD-QCSP-MAY29 | qcsp-may29 | qcsp-may29-1996/ | 13 | May 1996 |
:qcsp-alex-sep16-1997 | PHD-QCSP-ALEX | qcsp-alex | qcsp-alex-sep16-1997/ | 14 | Sep 1997 |
:qcsp3 is the primary system and the leading integration target. The others are historical snapshots kept for comparison, provenance, and regression anchoring. All four load independently and cannot be loaded simultaneously (they define overlapping function names in separate packages).
Each system has the same core files (loaded in this order via ASDF :serial t):
| File | Role |
|---|---|
package.lisp | Package definition, all defvar declarations, exports |
bm.lisp | BackMark search algorithm |
bt.lisp | BackTrack search (main solver entry point) |
ct.lisp | Constraint Techniques — AC-3 arc consistency |
gsat.lisp | GSAT local search (qcsp3/may29/alex only) |
utility.lisp | Output formatting, global state management, set-globals |
queens.lisp | N-Queens problem domain — q, qs, qc, cq, cqs, cqc |
mpr-simple.lisp | Model Pattern Recognition constraints |
mpr-setup.lisp | MPR template/situation data and save-situation |
quilici-search.lisp | Constraint-ordered search (qcsp3/may29/alex only) |
adt-simple.lisp | Abstract Data Type recognition constraints |
adt-setup.lisp | ADT template/situation data and save-situation |
memory-csp.lisp | Two-phase memory-based search (qcsp3/may29/alex only) |
;; N-Queens (deterministic, good for testing)
(qcsp3:qc 4) ; 4-Queens with AC-3 → :complete
(qcsp3:qc 8) ; 8-Queens with AC-3 → :complete
;; ADT recognition (uses random seed for noise generation)
(qcsp3:adt :random-ident "unique")
;; MPR recognition
(qcsp3:mpr :random-ident "unique")
;; Two-phase memory-based search
(qcsp3:memory-search "quilici-t1-index" "quilici-t1"
:sit-noise 0 :random-ident "unique")
CRITICAL: The queens.lisp, adt-setup.lisp, and mpr-setup.lisp files contain runtime (load ...) calls that reload domain-specific function definitions when switching between queens/ADT/MPR domains. These are NOT dead code and MUST NOT be removed. They exist because the same function names (e.g., constraint checkers) are redefined per domain.
All four systems use (string-equal random-ident "unique") instead of (eq random-ident 'unique) because 'unique resolves to different symbols in different packages. Any new cross-package symbol comparisons should use string-equal or compare via symbol-name.
All four packages export:
q qs qc cq cqs cqc queens adt mpr bm backtracking ac-3
set-globals show-solution show-options comment1 *unix*
*constraint-cks* *node-consistency-checks*
*backtrack-nodes-created* *nodes-visited*
qcsp3/may29/alex additionally export:
adt-gsat memory-search quilici-search
# Load into REPL
sbcl --load "src/main.lisp"
# Run all FiveAM test suites (4 systems, 25 tests, ~90 assertions)
sbcl --non-interactive --load "tests/run.lisp"
# Run asserted AO coverage
sbcl --non-interactive --load "tests/ao-run.lisp"
# Run individual suites
sbcl --non-interactive --load "tests/csp-suite.lisp"
sbcl --non-interactive --load "tests/qcsp3-suite.lisp"
sbcl --non-interactive --load "tests/may29-suite.lisp"
sbcl --non-interactive --load "tests/alex-suite.lisp"
# Legacy/manual AO harnesses
sbcl --non-interactive --load "run-test4.lisp"
sbcl --non-interactive --load "run-test4-may29.lisp"
sbcl --non-interactive --load "run-test4-alex.lisp"
# Full supported validation spine
bash tests/validate-artifacts.sh
bash tests/validate-ff-provenance.sh
bash tests/validate-ao.sh
# Run experiments (takes hours — generates 200 data points each)
bash Q-Batch-SBCL/ij2.sh
bash Q-Batch-SBCL/ij3.sh
bash Q-Batch-SBCL/ij4.sh
bash Q-Batch-SBCL/run-may29-all.sh
bash Q-Batch-SBCL/run-alex-all.sh
# Generate comparison plots (requires matplotlib)
python3 Q-Batch-SBCL/Graph/compare-all-overlay.py # reads ACL baselines from data/acl-experiments/Graph
GitHub Actions runs tests/run.lisp, the artifact validation smoke test (tests/validate-artifacts.sh), the preserved ff* provenance check (tests/validate-ff-provenance.sh), and the asserted AO regression validation (tests/validate-ao.sh, backed by tests/ao-run.lisp) on every push to main and on PRs. See .github/workflows/test.yml.
Tests run in separate SBCL processes (one per suite) because the four systems cannot coexist in a single Lisp image. tests/run.lisp orchestrates this.
tests/ is the authoritative supported validation surface. The repo-root run-test4*.lisp scripts remain useful historical/manual harnesses, but CI and day-to-day confidence checks should flow through:
tests/run.lisptests/ao-run.lisptests/validate-artifacts.shtests/validate-ff-provenance.shtests/validate-ao.shtests/validate-thesis-comparison.pyEach suite:
"unique"): exact NCC, TCC upper-bound ceiling:complete, consp (for memory-search results)csp/ Base CSP solver (14 source .lisp files)
README.md Snapshot guide and file-role orientation
qcsp3/ Extended solver (13 source files + extras/)
qcsp-may29-1996/ May 1996 snapshot (13 source + extras/ + batch data)
qcsp-alex-sep16-1997/ Sep 1997 snapshot (14 source + extras/ + testdata/)
data/ Consolidated data directory (see data/README.md)
sparc-archive/ Original SPARC archive listings (1993-1997)
acl-experiments/ ACL-era ij2/ij3/ij4 experiment results
csp-batch/ Earliest batch experiments (T1-T6)
csp-adt-batch/ ADT domain batch experiments
csp-save-results/ DREV memorandum results (1993)
csp-misc/ C source, parsers, docs, utility scripts
motors-releases/ MOTORS solver releases (.tar.Z, 1993)
motors-backups/ MOTORS solver backups (.zoo, 1994)
thesis/ PhD thesis PDF
lost-datasets.md QCSP-nov96 terrain/TCSP recovery guide
Q-Batch-SBCL/ SBCL experiment infrastructure
README.md Experiment/workspace guide
Graph/ Analysis scripts and comparison plots
tests/ FiveAM test suites
README.md Validation entry points and coverage guide
run.lisp Test orchestrator (runs all 4 suites)
csp-suite.lisp CSP tests (4 tests)
qcsp3-suite.lisp QCSP3 tests (8 tests)
may29-suite.lisp May29 tests (5 tests)
alex-suite.lisp Alex tests (5 tests)
ao-run.lisp Asserted AO regression runner
validate-artifacts.sh Thesis artifact regeneration/validation
validate-ff-provenance.sh NewData4b/PrevResults integrity check
validate-ao.sh AO validation wrapper
validate-thesis-comparison.py ACL-vs-SBCL thesis baseline check
src/main.lisp REPL entry point
*.asd ASDF system definitions (4 files)
run-test4*.lisp Legacy/manual AO harnesses (3 files)
These are hard-won lessons from the ACL-to-SBCL renovation. Any AI assistant working on this code should be aware of them.
SBCL enforces defconstant semantics strictly. If a constant is defined with a list value, reloading the file fails because the new list is not eql to the old one. Use defparameter instead for any non-numeric, non-character, non-symbol constant.
The (load ...) calls in queens.lisp, adt-setup.lisp, and mpr-setup.lisp are runtime domain switches, not build-time includes. They reload constraint definitions when switching problem domains. Do not remove them or convert them to ASDF dependencies.
ASDF loads files in serial order. If queens.lisp sets *domain-loaded* to 'queens, then adt-simple.lisp (loaded later) overwrites it to 'adt. The runtime (load ...) calls reset it correctly when a domain is actually invoked.
set-globals takes different numbers of parameters across systems:
Callers in queens.lisp were fixed to pass the correct count with nil placeholders. If you modify set-globals, check all callers.
(eq random-ident 'unique) fails across packages because 'unique is PHD-QCSP3::UNIQUE in one package but KEYWORD:UNIQUE or CL-USER::UNIQUE in the caller. Always use string-equal for cross-package comparisons.
sbcl --eval "(form1) (form2)" fails with "Multiple expressions in --eval option." Write a temporary .lisp file and use --load instead, or chain multiple --eval flags.
The solver writes to ADT-Random/, ADT-Situation/, MPR-Random/, MPR-Situation/ relative to the working directory. On CI (clean checkout), these don't exist. Test suites use (ensure-directories-exist "DIR/dummy") to create them. If you add a new test that writes data, include this call.
Alex's adt-setup.lisp has *template-object-list* commented out — it loads template data from external files not included in the repository. Alex ADT tests must explicitly pass :situation-id "quilici-i1" :template-id "quilici-t1" to use the inline Quilici data. The alex ADT-Situation/ directory is permanently empty.
csp and qcsp3 bt.lisp return :complete (keyword). The original may29 and alex bt.lisp returned 'complete (package-internal symbol). This was normalized to :complete during renovation, but tests use string= on symbol-name as an extra safety net.
SBCL compiles .lisp to .fasl. If you modify a source file but a stale .fasl exists, SBCL may warn "object file is older than source." Delete *.fasl in the source directories. They're in .gitignore.
.asd files replacing manual load chainswith ACL-vs-SBCL comparison plots and automated thesis-trend validation
data/ with READMEsintentional STYLE-WARNINGs from domain function redefinitions)
from the working tree (terrain-setup.lisp, terrain-simple.lisp, closure.lisp). Recovery now has a concrete lead: a Lacie1 historical drive reportedly containing terrain data and the generator. See data/lost-datasets.md.
See GitHub Issues for tracked items. Potential improvements:
redefinitions still emit ~20 STYLE-WARNINGs per system load. Could be muffled with sb-ext:muffle-conditions in the redefinition sites.
cqc (confused N-Queens)tests only assert :complete, not specific TCC/BT counts.
supported ACL ij2/ij3/ij4 baselines against regenerated SBCL tables. A later improvement would tie the older data/sparc-archive/PrevResults/ff*.ci family to a documented modern mapping.
have minimal inline comments. Adding docstrings to key functions would help future understanding.
node-type-consis anddfa-rearrangement parameters that default to nil. Enabling them in ij4 experiments might close the alex TCC divergence gap.
Lacie1 terrain/generator lead and anylate-1996 backup media so the terrain domain can move from blocked archive lore toward a real validation family.
fixing a verified bug. The renovation deliberately preserved algorithmic behavior.
sbcl --non-interactive --load "tests/run.lisp"is wrong with the core search.
random-ident "unique". TCC variesdue to random noise generation but should stay within the test ceilings.
The solver itself has zero external dependencies beyond Common Lisp.
Local guide to the primary integrated solver line, its entry points, and its AO support role.
Primary integrated solver line and current operational center of the project. This directory backs the :qcsp3 ASDF system and is the leading candidate for the eventual gold-standard codebase.
Loaded via ASDF system :qcsp3 (defined in qcsp3.asd at the repository root).
qcsp3/ is where the supported post-M1 solver story comes together:
test4 validation path.If you are trying to understand the active integrated line rather than the historical comparison snapshots, start here.
| File | Role |
|---|---|
package.lisp | Package definition, exports, and shared special variables |
bm.lisp | BackMark search |
bt.lisp | BackTrack search |
ct.lisp | Constraint Techniques (AC-3) |
gsat.lisp | GSAT local search |
utility.lisp | Global setup, counters, reporting, and output formatting |
queens.lisp | Queens and confused-queens domains plus convenience wrappers |
mpr-simple.lisp | MPR domain entry point |
mpr-setup.lisp | MPR setup/data support |
quilici-search.lisp | Constraint-ordered Quilici-style search |
adt-simple.lisp | ADT domain entry point |
adt-setup.lisp | ADT setup/data support |
memory-csp.lisp | Two-phase memory-based search |
| Entry point | Purpose |
|---|---|
qcsp3:q, qcsp3:qs, qcsp3:qc | Standard queens variants |
qcsp3:cq, qcsp3:cqs, qcsp3:cqc | Confused-queens variants |
qcsp3:adt | Direct ADT matching |
qcsp3:mpr | Model Pattern Recognition |
qcsp3:memory-search | Two-phase memory-based search used in thesis experiments |
qcsp3:quilici-search | Earlier Quilici-style ordered search path |
qcsp3:bm, qcsp3:backtracking, qcsp3:ac-3 | Core solver/search algorithms |
qcsp3:set-globals, qcsp3:show-options, qcsp3:show-solution | Shared setup/reporting helpers |
Recent 0.3.x work is also pushing more operator guidance into the code itself. In a REPL you can inspect the active docstrings directly:
(documentation 'qcsp3:backtracking 'function)
(documentation 'qcsp3:ac-3 'function)
(documentation 'qcsp3:memory-search 'function)
(documentation 'qcsp3:quilici-search 'function)
The most common interactive load path is still:
sbcl --load "src/main.lisp"
This directory contains three kinds of material:
qcsp3 solver line,That means qcsp3/ is mostly code, but not code-only.
| Directory | Current role |
|---|---|
extras/ | AO helper files and legacy test4 support not loaded by ASDF |
ADT-Situation/ | Runtime-generated ADT situations |
ADT-Random/ | Runtime-generated ADT random-state files |
MPR-Situation/ | Runtime-generated MPR situations |
MPR-Random/ | Runtime-generated MPR random-state files |
ADT-Batch/ | Preserved/generated ADT batch-style output workspace tied to direct-matching runs |
Local guides now exist for the two mixed-use subareas that most often confuse readers:
extras/README.mdADT-Batch/README.mdThe active working-state data areas now also explain themselves locally:
ADT-Random/README.mdADT-Situation/README.mdMPR-Random/README.mdMPR-Situation/README.mdextras/The extras/ directory is important, but it is not part of the ASDF system. It contains the arc-oriented support files used by:
tests/ao-run.lisprun-test4.lisprun-test4-alex.lispKey files:
| File | Role |
|---|---|
ac-graph.lisp | AO graph representation |
hierarchy.lisp | AO ordering hierarchy |
ao-ac3.lisp | AO AC-3 variant |
ao-ac-new.lisp | AO AC-new variant |
ao-revise-step.lisp | Stepwise AO revise |
ao-revise-aggressive.lisp | Aggressive AO revise |
applyr.lisp | Relation application / propagation helpers |
example-extend.lisp | Mutable example graph state used by test4 |
test4.lisp | Legacy AO harness definitions |
qcsp3/ is covered by the main supported validation spine through:
tests/run.lisptests/validate-artifacts.shtests/validate-ao.shIn practice that means:
ij2 / ij3 / ij4 story depends on this tree,path under tests/ao-qcsp3-suite.lisp.
data/, not here.Q-Batch-SBCL/, nothere.
csp/,qcsp-may29-1996/, and qcsp-alex-sep16-1997/.
If you are orienting quickly:
package.lispqueens.lispadt-simple.lispmpr-simple.lispmemory-csp.lisputility.lispextras/ only if you are working on AO / test4Local guide to the earliest tracked solver root's direct-ADT seed workspace.
Local guide to the base csp snapshot's direct-ADT random-seed workspace.
csp/ADT-Random/ stores seed files used by the earliest tracked solver root for direct ADT generation and replay.
These are:
Unlike later snapshots, the tracked base csp/ tree does not also carry a full adjacent ADT-Situation/ workspace. That difference is meaningful: the earliest root preserves the seed side more clearly than the later regenerated situation side.
qcsp-may29-1996/, qcsp-alex-sep16-1997/, qcsp3/)carry fuller ADT working-state layouts.
data/csp-adt-batch/ is the preserved canonical ADT batch archive.If you need the earliest tracked ADT seed lineage, start here.
If you need preserved batch outputs, use data/.
Local guide to the earliest tracked solver root's MPR seed workspace.
Local guide to the base csp snapshot's MPR random-seed workspace.
csp/MPR-Random/ stores seed files for generated MPR situations in the earliest tracked solver root.
These files are:
csp/MPR-Situation/ contains the paired generated MPR situation files.If you need the base snapshot's MPR seed lineage, start here.
Local guide to the earliest tracked solver root's generated MPR situation workspace.
Local guide to the base csp snapshot's generated MPR situation workspace.
csp/MPR-Situation/ contains generated MPR situation files for the earliest tracked solver root.
This is working-state input data, not a canonical preserved results archive.
Like later snapshots, this directory uses multi-part hidden situation files such as:
.Sit-test-1-ddist-0007241891-0.g.Sit-test-1-ddist-0007241891-0.p.Sit-test-1-ddist-0007241891-0.r.Sit-test-1-ddist-0007241891-0.yThere is also a nested Keep/ area, which should be read as preserved local holdover material rather than the primary active workspace surface.
csp/MPR-Random/ provides the paired seed lineage.qcsp-may29-1996/, qcsp-alex-sep16-1997/, qcsp3/)carry parallel MPR working-state directories with more surrounding infrastructure.
If you need to inspect the earliest tracked MPR input state, use this directory.
If you need validated preserved results, use the archive/data guides instead.
Local guide to the bounded AO / test4 support layer that sits alongside the integrated solver line.
Local guide to the non-ASDF AO support layer under the primary integrated solver tree.
qcsp3/extras/ is the preserved AO / test4 support workspace used by the supported legacy AO validation path. It is important, but it is not part of the main :qcsp3 ASDF load.
Think of this directory as:
test4 family,The main current entry points are:
tests/ao-run.lisprun-test4.lisprun-test4-may29.lisprun-test4-alex.lispIf you only load src/main.lisp or the :qcsp3 ASDF system, these files are not loaded automatically.
| File | Role |
|---|---|
ac-graph.lisp | AO graph representation and graph-level helpers |
hierarchy.lisp | AO ordering hierarchy and relation layering |
ao-ac3.lisp | AO AC-3 style propagation path |
ao-ac-new.lisp | Alternate AO propagation path |
ao-revise.lisp | Shared revise support |
ao-revise-step.lisp | Step-oriented AO revise implementation |
ao-revise-aggressive.lisp | Aggressive AO revise implementation |
ao-revise-fns.lisp | Shared revise helper functions |
applyr.lisp | Relation application / propagation helpers |
example-extend.lisp | Mutable example graph setup used by the legacy harness |
test4.lisp | Legacy AO harness definitions and wrapper entry points |
comment.lisp | Preserved AO comments / historical context file |
compile-ao.lisp | Historical compile helper for the AO layer |
This directory is inside the supported validation umbrella, but only through a bounded surface:
tests/ao-qcsp3-suite.lisptests/ao-may29-suite.lisptests/ao-alex-suite.lispbash tests/validate-ao.shThat means the repo currently treats these files as:
qcsp3/queens.lisp, qcsp3/adt-simple.lisp, or qcsp3/memory-csp.lisp.
If you need to understand or debug this layer, read in this order:
test4.lispexample-extend.lispac-graph.lispao-ac3.lisp and ao-ac-new.lispao-revise-step.lisp and ao-revise-aggressive.lispapplyr.lisphierarchy.lispij2 / ij3 / ij4 result pipeline.If the task is about AO or test4, come here.
If the task is about the integrated solver line, start one level up in qcsp3/.
Local guide to the qcsp3 snapshot's direct-ADT batch-style workspace and how it differs from the canonical preserved archive.
Local guide to the direct-ADT batch-style workspace under the primary solver tree.
qcsp3/ADT-Batch/ is a mixed preserved/generated workspace that captures direct ADT batch-style runs under the qcsp3 snapshot. It is not the canonical preserved ADT batch archive for the project.
Use this directory as:
qcsp3 direct ADT runs were staged,batch-style families.
The project's canonical preserved ADT batch family lives in:
data/csp-adt-batch/That archive is integrity-checked by:
bash tests/validate-adt-batch.shThis qcsp3/ADT-Batch/ directory is different:
qcsp3 snapshot tree,ij1-ij4 ADT batch archive.
The workspace currently contains many single-run outputs with names like:
Test-ij4-050.1Test-ij4-100.1Test-ij4-1000.99That naming pattern indicates:
ij4,These are useful as a snapshot-local run record, but they should not be treated as the authoritative batch archive without comparing them back to data/csp-adt-batch/.
The repo now treats the broader ADT batch family as:
integrated qcsp3 line.
That means this directory has go-forward value mainly for:
It is not part of the supported current validation spine.
Start with:
ADT-BATCH-INTEGRATION.mddata/csp-adt-batch/README.mdtests/README.mdThen use this directory only to answer snapshot-specific questions about qcsp3 output shape or naming.
If you want the preserved historical ADT batch archive, go to data/.
If you want the qcsp3 snapshot's own batch-style output workspace, use this directory.
Local guide to the maintained direct-ADT random-seed workspace and how it differs from preserved batch archives.
Local guide to the qcsp3 snapshot's direct-ADT random-seed workspace.
qcsp3/ADT-Random/ holds the random-state files used to generate or replay direct ADT experiment situations under the maintained qcsp3 line.
These files are:
Files are typically named like:
Rnd0805098560Rnd0145944017The numeric suffix is the seed identity carried through related situation and batch outputs.
qcsp3/ADT-Situation/ contains the generated ADT situations built fromthese seeds.
Q-Batch-SBCL/ is the supported modern experiment workspace that consumesmaintained solver behavior.
data/csp-adt-batch/ is the preserved canonical ADT batch archive; thisdirectory is not a replacement for it.
This directory is part of the maintained solver workspace and has go-forward value, but it is not validated directly as a standalone artifact family in the main test spine.
Its main roles are:
If you are tracing direct-ADT seed lineage inside qcsp3, start here.
If you are looking for preserved historical results, start in data/ instead.
Local guide to the generated direct-ADT situation workspace used for maintained-line input state and bridge/debug analysis.
Local guide to the generated direct-ADT situation workspace under qcsp3.
qcsp3/ADT-Situation/ contains generated ADT situation files produced from the maintained qcsp3 source definitions and random seeds.
This is a working-state directory, not a canonical preserved-results archive.
Situation files commonly look like:
Sit-quilici-i1-dist1-0805098560-50Sit-quilici-i1-dist1-0805098560-1000The pattern usually carries:
These are solver inputs or regenerated intermediate artifacts, not final publication-level results. They are useful when you need to inspect:
qcsp3/ADT-Random/ holds the seed files paired with this directory.tests/investigate-adt-batch-*.sh uses this kind of material when tracingADT bridge divergence.
data/csp-adt-batch/ remains the preserved historical ADT batch archive.These files have operational value for the maintained line, but the directory is not itself treated as a canonical validated archive surface.
Think of it as:
data/.If you want to inspect the generated ADT input state for qcsp3, come here.
If you want stable preserved batch results, use data/csp-adt-batch/.
Local guide to the maintained MPR random-seed workspace and its role in reproducibility/debugging.
Local guide to the qcsp3 snapshot's MPR random-seed workspace.
qcsp3/MPR-Random/ stores seed files for generated MPR situations under the maintained qcsp3 line.
These are working-state artifacts used to regenerate comparable MPR situations or to trace seed lineage during investigations.
Files are typically named like:
Rnd0080215333Rnd3253070110The seed identity is usually mirrored into the related generated situation files under qcsp3/MPR-Situation/.
qcsp3/MPR-Situation/ contains the generated MPR situations paired withthese seeds.
qcsp3/mpr-simple.lisp and qcsp3/mpr-setup.lisp define the maintained MPRdomain behavior that consumes or regenerates this state.
trees and archives; this directory is the maintained-line working copy.
This directory is part of the active solver workspace, but it is not a first-class validated artifact family on its own.
Its value is mostly:
If you need the maintained MPR seeds for qcsp3, use this directory.
If you need publication/result provenance, start with the preserved data and snapshot documentation first.
Local guide to the generated MPR situation workspace under the maintained solver line.
Local guide to the generated MPR situation workspace under qcsp3.
qcsp3/MPR-Situation/ contains generated MPR situation files for the maintained solver line.
These files represent generated domain inputs or intermediate working state, not canonical final result summaries.
Many files are hidden dotfiles with extensions like:
.Sit-test-1-ddist-0080215333-0.g.Sit-test-1-ddist-0080215333-0.p.Sit-test-1-ddist-0080215333-0.r.Sit-test-1-ddist-0080215333-0.yThat layout indicates a multi-file per-situation representation rather than a single flat artifact.
They are useful when you need to understand:
solver itself.
qcsp3/MPR-Random/ carries the seed files paired with this directory.qcsp3/mpr-simple.lisp and qcsp3/mpr-setup.lisp are the main maintainedcode entry points for this domain.
preserved publication results.
This directory supports the maintained solver line, but it is not validated as an independent archive family by the main test spine.
Treat it as:
If you need to inspect generated MPR inputs inside the active qcsp3 line, come here.
If you are tracing publication/result provenance, use data/ and the historical snapshot docs first.
Local guide to the May29 snapshot's AO / test4 support layer and its role in the bounded AO baseline.
Local guide to the May 29, 1996 snapshot's AO / test4 support layer.
qcsp-may29-1996/extras/ contains the non-ASDF AO support files used by the May29 snapshot. This is the May29 counterpart to qcsp3/extras/.
It matters because:
later integrated qcsp3 AO surface.
The main current entry points are:
tests/ao-run.lisprun-test4-may29.lispThese files are not part of the :qcsp-may29-1996 ASDF system by default.
| File | Role |
|---|---|
ac-graph.lisp | AO graph representation and graph-level helpers |
hierarchy.lisp | AO ordering hierarchy and relation layering |
ao-ac3.lisp | AO AC-3 style propagation path |
ao-ac-new.lisp | Alternate AO propagation path |
ao-revise.lisp | Shared revise support / preserved stub |
ao-revise-step.lisp | Step-oriented AO revise implementation |
ao-revise-aggressive.lisp | Aggressive AO revise implementation |
ao-revise-fns.lisp | Shared revise helper functions |
applyr.lisp | Relation application / propagation helpers |
example-extend.lisp | Mutable example graph setup used by the legacy harness |
test4.lisp | Legacy AO harness definitions and wrapper entry points |
comment.lisp | Preserved AO comments / historical context file |
compile-ao.lisp | Historical compile helper for the AO layer |
This directory participates in the supported validation umbrella only through the bounded AO path:
tests/ao-may29-suite.lispbash tests/validate-ao.shThat means it is:
This directory and qcsp3/extras/ are intentionally similar.
In practice:
qcsp3/extras/ is the later integrated line's AO counterpart,asserted harness.
ij2 / ij3 / ij4 artifact pipeline.If the task is about May29 AO behavior or run-test4-may29.lisp, start here.
If the task is about the May29 snapshot's main solver line, start one level up in qcsp-may29-1996/.
Local guide to the May29 snapshot's direct-ADT seed workspace.
Local guide to the May29 snapshot's direct-ADT random-seed workspace.
qcsp-may29-1996/ADT-Random/ stores seed files used to generate or replay direct ADT situations inside the May 29, 1996 snapshot.
These files are:
qcsp-may29-1996/ADT-Situation/ contains the paired generated situations.qcsp-may29-1996/ADT-SituationMar96/ preserves an older ADT situation layerand should not be confused with the active May29 working directory.
data/csp-adt-batch/ is the canonical preserved ADT batch archive.If you need May29 seed lineage for ADT generation, start here.
If you need preserved historical batch results, use data/ first.
Local guide to the May29 snapshot's generated ADT situation workspace.
Local guide to the generated direct-ADT situation workspace under the May29 snapshot.
qcsp-may29-1996/ADT-Situation/ contains generated ADT situations for the May29 solver line. These are working-state inputs or regenerated intermediates, not a canonical results archive.
Typical names look like:
Sit-h-i2-dist1-0805098560-100Sit-h-i2-dist1-0805098560-2000Those names usually encode:
This directory is the active May29 working-state location.
The nearby ADT-SituationMar96/ directory is different: it preserves older March 1996 ADT situation material and should be treated as a preserved historical layer rather than the current May29 regeneration target.
qcsp-may29-1996/ADT-Random/ provides the seed files paired with thisdirectory.
data/csp-adt-batch/ remains the canonical preserved ADT batch archive.qcsp-may29-1996/NewData4b-Batch/ and related batch trees preserve summaryoutputs, not the same kind of input-state workspace found here.
If you want May29 generated ADT input state, use this directory.
If you want preserved archival outputs, start with data/ or the snapshot's batch/result trees.
Local guide to the older preserved March 1996 ADT situation layer carried beside the May29 workspace.
Local guide to the older preserved March 1996 ADT situation layer.
qcsp-may29-1996/ADT-SituationMar96/ is a preserved historical situation tree kept beside the active May29 ADT workspace for provenance.
This directory should be read as:
qcsp-may29-1996/ADT-Situation/ is the active May29 generated situationarea.
qcsp-may29-1996/ADT-Random/ holds the seed files used for May29-eraregeneration work.
If you are reading current May29 working state, use ADT-Situation/.
If you are tracing older preserved situation lineage, use this directory.
Local guide to the May29 snapshot's MPR seed workspace.
Local guide to the May29 snapshot's MPR random-seed workspace.
qcsp-may29-1996/MPR-Random/ stores random-seed files used to generate or replay MPR situations in the May29 snapshot.
These are snapshot-local working artifacts, not a standalone preserved result family.
qcsp-may29-1996/MPR-Situation/ contains the paired generated MPRsituations.
mpr-simple.lisp and mpr-setup.lisp define the code that uses orregenerates this state.
If you need seed-level reproducibility for May29 MPR generation, start here.
Local guide to the May29 snapshot's generated MPR situation workspace.
Local guide to the generated MPR situation workspace under the May29 snapshot.
qcsp-may29-1996/MPR-Situation/ contains generated MPR situation files for the May29 line.
Like the corresponding qcsp3 directory, this is working-state input material and not a canonical result archive.
Many files are hidden multi-part situation files such as:
.Sit-test-1-ddist-0183914511-0.g.Sit-test-1-ddist-0183914511-0.p.Sit-test-1-ddist-0183914511-0.r.Sit-test-1-ddist-0183914511-0.yThat indicates a multi-file per-situation representation.
qcsp-may29-1996/MPR-Random/ provides the seed lineage.this directory is snapshot-local generated state.
If you need May29 generated MPR inputs, come here.
If you need validated result families, use the preserved data/archive guides.
Local guide to the Alex snapshot's preserved batch orchestration tree and why it remains provenance-only.
Local guide to the Alex snapshot's preserved batch orchestration tree.
qcsp-alex-sep16-1997/MyBatch/ is a preserved Allegro-era batch runner workspace. It is not part of the supported modern validation spine, but it is valuable for provenance because it preserves how large experiment families were scripted under the Alex snapshot.
Use it as:
preserved historical tooling.
The tree has two main layers:
batch-0.lisp through batch-23.lispold-batch/ with older batch-exe-*, exp-*, and run-exp-* driversThere are also a few shell/helper files such as:
run-batchrun-batch-ykone-moreThis mix strongly suggests a preserved execution/control surface rather than a single coherent modern workflow.
This directory is related to, but not the same as:
Q-Batch-SBCL/ for the supported modern experiment workspace,historical finds/yj-sun/Csp/ for related recovered orchestration/provenancematerial,
qcsp-alex-sep16-1997/testdata/ for the preserved result/data side of theAlex snapshot.
MyBatch/ is currently treated as:
The repo does not currently claim that these batch drivers can be rerun cleanly on the maintained modern path.
This tree is especially useful for:
If the task is about preserved Alex-era batch orchestration, use this directory.
If the task is about running supported experiments today, use Q-Batch-SBCL/ instead.
Local guide to the main preserved Alex result-family tree.
Local guide to the main preserved results tree under the Alex snapshot's testdata/.
qcsp-alex-sep16-1997/testdata/Results/ is the broad preserved experiment results area for the Alex snapshot. It is historically important, but it is not part of the current supported validation spine.
Use it as:
testdata/ as a whole.| Subdirectory | Current read |
|---|---|
exp-1, exp-2, exp-3, exp-6, exp-9, exp-10 | Preserved numbered experiment families. |
bexp-2, bexp-10, bexp-ssa, bexp-y2k | Batch or batch-like experiment groupings preserved from the Alex era. |
PS/ | Plot/PostScript output layer for parts of the preserved result story. |
Inter/ | Intermediate or helper result material. |
before-dec-30/ | Older preserved pre-cutoff result layer. |
exp-8-d/ | Preserved special-case experiment family with its own nested exp-8 subtree. |
If you need the broad Alex preserved result families, start here.
If you need the supported modern experiment path, use Q-Batch-SBCL/ instead.
Local guide to the preserved loop-analysis result subtree inside the Alex snapshot.
Local guide to the loop-analysis result subtree under the Alex snapshot's testdata/.
qcsp-alex-sep16-1997/testdata/Results-Loop/ preserves a specialized loop-focused result family that sits beside the broader Results/ tree.
This is archive/provenance material, not a supported active validation surface.
The tree includes:
before-dec-30/ historical layer.testdata/Results/ is the broader preserved Alex results tree.testdata/thesis-results/ is the publication-layout layer.Q-Batch-SBCL/ is the supported modern experiment workspace.Use this directory when the question is specifically about preserved loop-analysis results, not when you want the main current experiment path.
Local guide to the Alex snapshot's direct-ADT seed workspace.
Local guide to the Alex snapshot's direct-ADT random-seed workspace.
qcsp-alex-sep16-1997/ADT-Random/ stores seed files for generated ADT situations under the Alex snapshot.
These files are useful for:
qcsp3,They are not the canonical preserved result archive.
qcsp-alex-sep16-1997/ADT-Situation/ is the paired situation workspace.historical finds/yj-sun/Csp/ may carry related lineage, but this directoryis the tracked Alex snapshot copy.
If you need Alex seed lineage for ADT generation, start here.
Local guide to the Alex snapshot's direct-ADT situation workspace.
Local guide to the Alex snapshot's direct-ADT situation workspace.
qcsp-alex-sep16-1997/ADT-Situation/ is the tracked location for generated ADT situations under the Alex snapshot.
At the moment this directory is sparse compared with other snapshot workspaces, which is itself useful information: the tracked Alex tree preserves the generation surface, but not necessarily a large carried situation corpus.
qcsp-alex-sep16-1997/ADT-Random/ provides the paired seed files.testdata/ and MyBatch/ preserve more of the Alex result/orchestrationstory than this directory does.
Treat this as a snapshot-local working-state location, not as a canonical historical results archive.
Local guide to the Alex snapshot's MPR seed workspace.
Local guide to the Alex snapshot's MPR random-seed workspace.
qcsp-alex-sep16-1997/MPR-Random/ stores seed files used to generate or replay MPR situations in the Alex snapshot.
These are snapshot-local working-state artifacts with provenance value, not a standalone validated results family.
qcsp-alex-sep16-1997/MPR-Situation/ is the paired generated situation area.testdata/ and related preserved experiment trees.
If you need Alex MPR seed lineage, start here.
Local guide to the Alex snapshot's generated MPR situation workspace.
Local guide to the Alex snapshot's generated MPR situation workspace.
qcsp-alex-sep16-1997/MPR-Situation/ contains generated MPR situation files for the Alex solver snapshot.
This is a working-state input area, not the main preserved results/archive surface for the Alex tree.
Like the other solver snapshots, this directory uses multi-part hidden situation files such as:
.Sit-test-1-ddist-0145944017-0.g.Sit-test-1-ddist-0145944017-0.p.Sit-test-1-ddist-0145944017-0.r.Sit-test-1-ddist-0145944017-0.yqcsp-alex-sep16-1997/MPR-Random/ carries the paired seed lineage.qcsp-alex-sep16-1997/testdata/ is the more important preservedpublication/result-side area for this snapshot.
If you need Alex generated MPR input state, use this directory.
If you need preserved experimental outputs, start with testdata/.
Interactive entry-point guide for loading the primary solver line in a REPL.
This directory contains the modern interactive entry point for the renovated project.
src/main.lisp is the supported "load the solver and start exploring" workflow.
Use it when you want:
qcsp3: entry points ready to call interactively.From the repository root:
sbcl --load "src/main.lisp"
That path:
:qcsp3,qcsp3/,tests/.Q-Batch-SBCL/.regression coverage; those are exercised through the test suites.
After loading:
(qcsp3:qc 4) for 4-Queens(qcsp3:cqc 4) for confused queens(qcsp3:adt) for direct ADT matching(qcsp3:mpr) for MPR(qcsp3:memory-search) for the two-phase memory-based pathThe 0.3.x docs lane is also pushing more guidance directly into the Lisp entry points. From the REPL you can inspect those docstrings with:
(documentation 'qcsp3:backtracking 'function)
(documentation 'qcsp3:ac-3 'function)
(documentation 'qcsp3:memory-search 'function)
(documentation 'qcsp3:quilici-search 'function)
This is the fastest way to see what an entry point expects without leaving the interactive session.
If qcsp3/ is the main solver line and tests/ is the validation gate, src/ is the simplest supported operator entry point.
Authoritative validation-surface guide for the supported confidence gate.
This directory is the authoritative validation surface for the renovated project. If the question is "what proves the current baseline still works?", start here.
run.lisp: orchestrates the Four FiveAM suites in separate SBCL processes.ao-run.lisp: asserted AO regression runner for the supported test4baseline across qcsp3, may29, and alex, now covering qcsp3/may29 AO cases 1-3 plus the legacy wrappers and alex's revise baseline.
validate-artifacts.sh: rebuilds SBCL graph artifacts, regenerates overlayplots, and checks the current thesis-result pipeline.
validate-dashboard.sh: regenerates the visual release dashboard and thefull readable handbook plus the public-facing PhD project page and this repo's public status manifest from their shared status/doc sources, and fails if the checked-in outputs are out of sync.
validate-ff-provenance.sh: checks that the preserved NewData4b-Batchff* graph summaries match their PrevResults/ carry-forward copies and that the supporting raw/count lineage is present.
validate-adt-batch.sh: checks that the preserved data/csp-adt-batch/ij1-ij4 raw file grids and historically uneven CI summary tables still line up as expected.
validate-csp-batch.sh: checks that the preserved data/csp-batch/ anddata/csp-save-results/ DREV-era T1-T6 archive still matches its historical summary layout and known row-count quirks.
investigate-adt-batch-bridge.sh: runs the first narrow executable bridgecase for the preserved ADT batch ij2 family and reports whether the current csp:adt output matches or diverges from the preserved archive. It now defaults to the closer surviving qcsp3 Rnddefault bundle, and PHD_ADT_BRIDGE_RANDOM_SOURCE=... can override that seed source for comparison runs.
investigate-adt-batch-random-lineage.sh: reruns that same ij2 bridgecase against the surviving Rnddefault bundles from may29, qcsp3, alex, and historical finds/yj-sun/Csp to test whether random-state lineage is driving the divergence.
investigate-adt-batch-input-shape.sh: inspects the generated ij2situation and domain shape before search starts so we can tell whether the bridge mismatch begins in preprocessing or only later in the search. Under the current qcsp3-seeded bridge, it shows that Dsize and NCC already diverge before backtracking starts.
investigate-adt-batch-source-drift.sh / run-adt-batch-input-shape-generic.lisp:compare that pre-search ij2 shape across maintained source/dist variants. The current result is that qcsp3/dist1 is materially closer to the preserved ij2-050.1 preprocessing metrics than csp/dist1.
investigate-adt-batch-qcsp3-bridge.sh / run-adt-batch-bridge-qcsp3-ij2.lisp:run the same narrow ij2 bridge through maintained qcsp3 using a legacy-compatible temporary workdir. The current result is still divergent, but materially closer to the preserved case than the maintained csp bridge on the tracked non-timing metrics.
investigate-adt-batch-qcsp3-old-dist1-bridge.sh:reruns that same narrow ij2 qcsp3 bridge through a temporary normalized copy of the carried old-dist1-pre-quilici distribution. The current result is that the preserved pre-Quilici label is runnable in isolation, but it lands farther from the preserved ij2-050.1 metrics than maintained qcsp3/dist1.
investigate-adt-batch-structure-drift.sh:compares the generated ij2 situation profile and node-consistent domain shape for maintained csp/dist1 versus maintained qcsp3/dist1. The current result is that qcsp3 builds a smaller noise layer with fewer begin/end statements, more check statements, and the largest domain squeeze on t2-c.
investigate-adt-batch-generator-drift.sh:compares the maintained csp and qcsp3 ADT source definitions directly. The current result is that csp/dist1 and qcsp3/dist1 are different noise distributions, and qcsp3 also changed generator behavior beyond the raw weights.
validate-ao.sh: shell wrapper that runs ao-run.lisp.validate-thesis-comparison.py: checks that regenerated SBCL ij2 / ij3 /ij4 CI tables preserve the supported ACL baseline story.
csp-suite.lisp: base solver regression metrics.qcsp3-suite.lisp: primary solver regression metrics.may29-suite.lisp: May 29 1996 snapshot regression metrics.alex-suite.lisp: Sep 16 1997 alex snapshot regression metrics.ao-qcsp3-suite.lisp, ao-may29-suite.lisp, ao-alex-suite.lisp:deterministic AO assertions for the supported test4 path, including the bounded M1 AO surface.
Run these from the repository root:
sbcl --non-interactive --load "tests/run.lisp"
bash tests/validate-artifacts.sh
bash tests/validate-dashboard.sh
bash tests/validate-ff-provenance.sh
bash tests/validate-adt-batch.sh
bash tests/validate-csp-batch.sh
bash tests/validate-ao.sh
This is the baseline CI path and the best local confidence check before or after code changes. Fresh March 21, 2026 validation runs of tests/run.lisp and tests/validate-ao.sh are currently clean for the supported path, so any new warning output in those flows should be treated as a potential regression signal.
investigate-adt-batch-bridge.sh is intentionally outside that supported gate for now. It is an executable research/integration probe, not yet a passing baseline check.
The repo-root scripts:
run-test4.lisprun-test4-may29.lisprun-test4-alex.lispare still useful as historical/manual harnesses, but tests/ao-run.lisp is the asserted path that CI treats as supported coverage.
How the modern experiment workspace, overlay plots, and generated run assets fit together.
This directory is the modern SBCL experiment workspace for thesis-result replication.
bootstrap*.lisp, gen-seeds*.lisp, generate-*.lisp: experiment setup andscript generation helpers.
ij2*.lisp, ij3*.lisp, ij4*.lisp: generated per-noise experiment drivers.ij2.sh, ij3.sh, ij4.sh, run-may29-all.sh, run-alex-all.sh: runnerscripts for the supported experiment families.
Graph/: data extraction, comparison plotting, and tracked overlay outputs.See Graph/README.md for the local plotting/data-flow guide.
This directory mixes tracked experiment infrastructure with runtime-generated outputs:
Graph/*.py,Graph/*.gp, and the checked-in comparison overlay PNGs.
ij2/, ij3/, ij4/,may29-ij2/, may29-ij3/, may29-ij4/, alex-ij2/, alex-ij3/, alex-ij4/, plus console *.out files and extracted graph tables/PDFs.
If this directory looks busy, that is normal: it is both the experiment control surface and the scratch space for regenerated outputs.
Run experiments from the repository root:
bash Q-Batch-SBCL/ij2.sh
bash Q-Batch-SBCL/ij3.sh
bash Q-Batch-SBCL/ij4.sh
bash Q-Batch-SBCL/run-may29-all.sh
bash Q-Batch-SBCL/run-alex-all.sh
Regenerate comparison artifacts:
bash tests/validate-artifacts.sh
That validation path compares regenerated SBCL CI tables against the preserved ACL baseline under data/acl-experiments/Graph/.
Use this directory in two ways:
ij*.sh andrun-*-all.sh scripts,
Graph/.If the question is about rerunning experiment families, start here.
If the question is about extracted tables, overlay PNGs, or comparison PDFs, drop into Graph/README.md.
Local guide to the extracted CI tables, comparison scripts, and tracked overlay outputs.
This directory is the thesis-result comparison and plotting surface for the modern SBCL experiment workspace.
Use it when the question is:
extract-data.pycompare-plots.pycompare-ij2-overlay.pycompare-all-overlay.py*.gp gnuplot helpersThese are maintained operator/build files.
Examples:
ij2-ci.datij3-ci.datij4-ci.datij2-ci-time.datij3-other-ci.datij*-raw.datThese are regenerated from the checked-in SBCL experiment outputs by tests/validate-artifacts.sh.
Examples:
compare-ij2-overlay.pngcompare-ij3-overlay.pngcompare-ij4-overlay.pngcompare-all-overlay.pngcompare-*.pdfThe overlay PNGs are tracked because they are part of the published/readable artifact surface for the repo. The PDF outputs are generated comparison artifacts.
This directory combines:
Q-Batch-SBCL/ runs,data/acl-experiments/Graph/,If you want the supported rebuild path, run:
bash tests/validate-artifacts.sh
That path:
Use the Python scripts directly only when you want a narrower/manual refresh:
python3 Q-Batch-SBCL/Graph/compare-plots.py
python3 Q-Batch-SBCL/Graph/compare-ij2-overlay.py
python3 Q-Batch-SBCL/Graph/compare-all-overlay.py
Use the gnuplot helpers when you specifically want the older plot path rather than the supported validation wrapper.
If the task is confidence in the thesis-result story, use tests/validate-artifacts.sh.
If the task is manual plot iteration or debugging one comparison layer, work directly in this directory.
Catalog of preserved datasets, baseline results, thesis artifacts, and archive holdings.
Master index for all datasets in the PhD renovation project. This directory consolidates standalone data archives; snapshot-embedded and runtime-generated data remain in place and are cataloged here.
| Directory | Origin | Files | Era | Description |
|---|---|---|---|---|
| sparc-archive/ | DataFind/ | 153 | 1993-1997 | Original SPARC workstation archive: directory listings, experiment metadata, 64 reference ADT situation files, 83 thesis-era result files |
| acl-experiments/ | Q-Batch/ | 676 | 1996 | Canonical ACL-era ij2/ij3/ij4 experiment baseline for the active thesis-validation path |
| csp-batch/ | csp/Batch/ | 150 | 1993-1994 | Earliest batch experiments (T1-T6 series) for the base CSP solver |
| csp-adt-batch/ | csp/ADT-Batch/ | 893 | 1994-1995 | ADT domain batch experiments (ij1-ij4 series) |
| csp-save-results/ | csp/Save-Results/ | 15 | 1993 | Saved results from DREV memorandum experiments |
| csp-misc/ | csp/ (various) | 65 | 1993-1995 | Non-core development artifacts: C source, parser, docs, scripts |
| motors-releases/ | csp/Releases/ | 5 | 1993 | MOTORS solver releases v0.5-v1.01 (.tar.Z COMPRESSED) |
| motors-backups/ | csp/Bak/ | 3 | 1994 | MOTORS solver backups (.zoo COMPRESSED, obsolete format) |
| thesis/ | Publications/ | 1 | 1996 | PhD thesis PDF (CS-96-33) |
See also: lost-datasets.md for the Nov 1996 snapshot (terrain CSP data, never recovered).
Local guides worth using in place:
acl-experiments/README.md explains the canonical ACL baseline used by thesupported thesis-validation path.
sparc-archive/README.md explains the older SPARC-era preserved resultfamilies and archive indexes.
thesis/README.md explains how the thesis PDF relates to the activevalidation story.
---
These datasets are embedded within historical code snapshots and are left in place to preserve snapshot integrity. Each is documented with a README.
| Directory | Files | Format | Description |
|---|---|---|---|
| New-Batch/ | 755 | Mixed | ACL ij1-ij5 experiments + graph data + shell scripts |
| Q-Batch/ | 676 | Mixed | Reviewed duplicate of data/acl-experiments/ (retained for snapshot integrity, not the active canonical copy) |
| NewData4a-Batch/ | 73 | Mixed | Extended experiment series 4a |
| NewData4b-Batch/ | 62 | Mixed | Extended experiment series 4b |
| NewData5-Batch/ | 304 | Mixed | Extended experiment series 5 |
| NewData6-Batch/ | 324 | Mixed | Extended experiment series 6 |
| Q-Batch-Freeze/ | 46 | Mixed | Frozen experiment snapshot |
| ADT-SituationMar96/ | 203 | .gz | COMPRESSED (gzip) ADT situation files from March 1996 |
| ADT-Batch/ | 9 | Mixed | ADT batch experiment scripts |
| Keep/ | 1 | Text | Preserved notes |
| artifacts/ | 2 | Text | Miscellaneous artifacts |
| Directory | Files | Format | Description |
|---|---|---|---|
| testdata/ | 520 | Mixed | C program analysis results (8 subdirectories: Results, Static, thesis-results, data-c, data-d, data-y, fmkfile, Results-Loop) |
| MyBatch/ | 28 | Lisp/sh | Batch experiment scripts (batch-0 through batch-24) |
| artifacts/ | 15 | Mixed | Experimental results, template backups, PostScript |
| SteveBkps/ | 1 | Text | Historical backup |
---
Modern SBCL experiment framework. Shell scripts and Lisp loaders reference relative paths to the 4 ASDF systems. See also Q-Batch-SBCL/README.md for the code/test/results layout inside that workspace.
Tracked files: bootstrap\.lisp, gen-seeds\.lisp, generate-experiments.lisp, ij\.lisp (45 experiment scripts), \.sh (6 runner scripts), diagnose-ij4.sh, Graph/\.py (4 Python scripts), Graph/\.gp (5 Gnuplot scripts), Graph/\*.png (4 comparison overlay plots).
Gitignored/runtime-generated:
may29-ij2/, may29-ij3/, may29-ij4/ (200 files each when populated)
To regenerate experiments: bash Q-Batch-SBCL/ij2.sh (also ij3.sh, ij4.sh, run-may29-all.sh, run-alex-all.sh).
To regenerate the supported thesis-comparison artifacts: bash tests/validate-artifacts.sh.
---
These directories are created by the solver at runtime. They are gitignored and regenerated on demand.
| System | Directory | Typical Files | Generated By |
|---|---|---|---|
| csp/ | ADT-Random/ | ~55 Rnd\* files | (csp:adt ...) |
| csp/ | MPR-Random/ | ~42 Rnd\* files | (csp:mpr ...) |
| csp/ | MPR-Situation/ | ~500 Sit-\* files | (csp:mpr ...) |
| qcsp3/ | ADT-Situation/ | ~350 Sit-\* files | (qcsp3:adt ...) |
| qcsp3/ | ADT-Random/ | ~160 Rnd\* files | (qcsp3:adt ...) |
| qcsp3/ | MPR-Situation/ | ~125 Sit-\* files | (qcsp3:mpr ...) |
| qcsp3/ | MPR-Random/ | ~25 Rnd\* files | (qcsp3:mpr ...) |
| qcsp-may29-1996/ | ADT-Situation/ | ~590 Sit-\* files | (qcsp-may29:adt ...) |
| qcsp-may29-1996/ | ADT-Random/ | ~110 Rnd\* files | (qcsp-may29:adt ...) |
| qcsp-may29-1996/ | MPR-Situation/ | ~90 Sit-\* files | (qcsp-may29:mpr ...) |
| qcsp-may29-1996/ | MPR-Random/ | ~18 Rnd\* files | (qcsp-may29:mpr ...) |
| qcsp-alex-sep16-1997/ | ADT-Situation/ | 0 (empty) | Template data not available |
| qcsp-alex-sep16-1997/ | ADT-Random/ | ~107 Rnd\* files | (qcsp-alex:adt ...) |
| qcsp-alex-sep16-1997/ | MPR-Situation/ | ~100 Sit-\* files | (qcsp-alex:mpr ...) |
| qcsp-alex-sep16-1997/ | MPR-Random/ | ~20 Rnd\* files | (qcsp-alex:mpr ...) |
File formats:
Rnd* files: Serialized Lisp random-state objects (~14 KB each, text)Sit-* files: Serialized Lisp situation structures (750 B - 800 KB, text)Sit-{domain}-{template}-{distribution}-{seed}-{noise}Note: alex ADT-Situation/ is permanently empty because *template-object-list* is commented out in alex adt-setup.lisp (template data loads from external files not included in the repository).
---
| Count | Format | Location | How to Decompress |
|---|---|---|---|
| 5 | .tar.Z (compress+tar) | data/motors-releases/ | uncompress FILE.tar.Z && tar xf FILE.tar |
| 3 | .zoo (Zoo archive) | data/motors-backups/ | zoo x FILE.zoo (obsolete; macOS: brew install zoo) |
| 203 | .gz (gzip) | qcsp-may29-1996/ADT-SituationMar96/ | gunzip FILE.gz |
| ~50 | .ps (PostScript) | Throughout | ps2pdf FILE.ps or any PS viewer |
| ~8 | .xvgr (XMGrace) | data/sparc-archive/PrevResults/ | Deprecated visualization format |
| 1 | data/thesis/ | Standard PDF viewer |
---
See lost-datasets.md for a full inventory of the November 1996 snapshot, which contained unique terrain CSP code and data that was never recovered from the original SPARC archive.
Key losses:
terrain-setup.lisp, terrain-simple.lisp, closure.lisp -- terrain CSP sourceTCSP-Situation/, TCSP-Random/ -- terrain CSP data filesHow new finds enter the repo safely before review, promotion, or duplicate classification.
This directory is the single intake bucket for newly found material that may be relevant to the project:
Think of this as the shell-friendly implementation of:
new relevant information to integrate
Use incoming/ first whenever new material arrives and its final home is not yet settled.
Do not drop new finds directly into:
qcsp3/csp/qcsp-may29-1996/qcsp-alex-sep16-1997/data/historical finds/until that material has been reviewed.
If you already know the likely date/source, a dated name is helpful, for example:
incoming/2026-03-21-lacie1/incoming/2026-04-02-sparc-cdrom/incoming/2026-04-10-paper-scan/If not, a rough dump name is fine:
incoming/lacie-drive-dump/incoming/old-sparc-stuff/incoming/misc-papers/date/source naming scheme than the original dump name.
incoming/INDEX.md with one row for the new intake.incoming/.data/ for canonical preserved datasets/publicationshistorical finds/ for archive/recovery materialDUPLICATES-REVIEW.md if it is a reviewed duplicate/redundant copyEvery reviewed intake should end in one of these states:
promoted: moved into the main repo structurehistorical: retained under historical finds/duplicate: documented as redundant/canonical elsewherereference-only: preserved, but not integratedpending: still under reviewThe usual destinations mean:
| Destination | Use when |
|---|---|
data/ | The material is a canonical preserved dataset, publication, or baseline result family |
historical finds/ | The material has archive/recovery value but is not part of the supported baseline |
| solver snapshot tree | The material clearly belongs to one historical code line and keeping it there helps snapshot integrity |
DUPLICATES-REVIEW.md | Review shows the material is redundant with a canonical active copy elsewhere |
stay in incoming/ | The material is not understood well enough yet to classify safely |
incoming/ is the only place where "unreviewed but relevant" material should accumulate.
That keeps three other zones clearer:
data/ means preserved/canonical results or publications,historical finds/ means reviewed archive/recovery material,justified home.
If the right home or the right date label is not obvious yet, it belongs in incoming/ first.
How reviewed archive/recovery material is separated from canonical data and the supported baseline.
This directory is a staging area for newly recovered historical material that appears related to the PhD renovation project, but is not yet part of the validated thesis-result baseline.
New finds should land in incoming/ first. Move material into historical finds/ only after review shows that it belongs here as archive/recovery material rather than as canonical data, supported code, or a reviewed duplicate.
Treat everything here as archive intake first, source-of-truth second. Nothing in this directory should be assumed to define supported behavior until it has been cataloged, compared against the tracked snapshots, and either promoted into a documented recovery path or left as reference-only context.
yj-sun/Most likely the highest-value recovery lead in this intake.
Csp/ looks like a direct relative of the current Lisp solver lineage. Itcontains many familiar files (adt-simple.lisp, mpr-setup.lisp, memory-csp.lisp, general-exp.lisp, test4.lisp, template.txt, testdata/Results/, MyBatch/, etc.) plus older variants and backups that are not all present in the modernized repo.
Gen++/ appears to be the C/C++ analyzer generator toolchain used to producecomponent/control representations for the plan-recognition experiments. It includes documentation, example queries, rule-checker code, and a mylisp/ area that may explain part of the historical input pipeline.
Working assumption: yj-sun/Csp is a recovery candidate for Phase 5 archive work, while yj-sun/Gen++ is an upstream toolchain archive that may help us understand how historical .component / .control inputs were produced.
See also: yj-sun/Csp/README.md for the first comparison pass against the tracked solver snapshots.
Unravel/This looks like an external NIST release of the Unravel slicing tool, including source archives and two technical reports (NIST-IR-5691 volumes 1 and 2).
Working assumption: this is important context for neighboring program-analysis work, but it should remain reference-only unless we find direct evidence that it formed part of the thesis validation pipeline for this repo.
Local guide:
Unravel/README.mdRefine/This currently contains a small set of .pob artifacts under Progs/, with mostly empty companion directories.
Working assumption: these are likely historical tool outputs or snapshots worth preserving, but they are not yet understood well enough to integrate further.
Local guide:
Refine/README.mdSurgA-Info and Unravel-changes/These are small but useful provenance clues:
SurgA-Info links SurgeonsA, tkXsurgeon, and unravelUnravel-changes/SteveLog contains notes about parser output, variable typeextensions, and dataflow representation needs
These notes may help connect Gen++, Unravel, and the Lisp experiments into one broader historical workflow.
Local guide:
Unravel-changes/README.mdpossible.
executables, or generated outputs.
thesis-result validation or to archive recovery.
This directory is not:
New material should enter through incoming/ first. Material only belongs here after review has established that it is best treated as archive/recovery or reference context.
Material reviewed here usually ends in one of these states:
| Outcome | Meaning |
|---|---|
kept in historical finds/ | archive/recovery value remains, but it is not part of the supported line |
promoted into data/ | the material proves to be a canonical preserved result/publication family |
| promoted into a snapshot tree | it clearly belongs to one historical code line |
recorded in DUPLICATES-REVIEW.md | it overlaps a canonical copy and is only needed for provenance |
| reference-only | useful context, but not something the main project needs to build around |
yj-sun/Csp against the tracked solver snapshots to identify uniquesource variants, missing helpers, and older experiment drivers.
yj-sun/Csp/testdata/Results/explains part of PrevResults/, while the ff1 / ff2 / ff3 family now appears to belong to the qcsp-era NewData4b-Batch lineage rather than the older MyBatch lane.
yj-sun/Gen++ as an upstream toolchain archive and identify theminimum subset needed to explain .component / .control generation.
Unravel/, Refine/, and the note files as reference/context until adirect dependency on thesis validation is established.
If the material helps explain how the historical project was assembled, but not what the current supported baseline should execute, this is probably the right place for it.
Local guide to the archive-only Refine subtree and its likely context role.
Local guide to the historical finds/Refine/ archive subtree.
This directory appears to preserve auxiliary program/refinement material rather than a runnable mainline solver component.
The current tracked contents are:
Progs/ with .pob program/object artifacts,Reports/,Tmp/.The strongest current interpretation is:
other recovered tooling,
Treat this directory as archive/context material unless a later provenance pass proves a tighter operational connection.
Local guide to the recovered external Unravel tool distribution and why it remains context-only.
Local guide to the recovered Unravel subtree.
This directory preserves an external program-slicing/tooling distribution, including:
README,unravel_r2.2+/ source/tool tree.It is not part of the supported Lisp solver baseline.
Unravel/ is best read as:
Use this directory for provenance and external-tool context, not for current repo workflows.
Local guide to the recovered Unravel-related notes subtree.
Local guide to the historical finds/Unravel-changes/ notes subtree.
This directory is primarily a note/log layer rather than a codebase.
The key tracked item is:
SteveLogThese notes appear to capture observations about parser output, type handling, or related toolchain behavior around the Unravel/Gen++ side of the research environment.
That makes this directory:
Read this directory as explanatory notes that may connect recovered external tools to the Lisp-side experiments.
How the preserved ACL experiment baseline feeds the supported thesis-result validation path.
This directory is the canonical preserved ACL/SPARC-era baseline for the supported thesis-result validation path.
It contains the historical ij2 / ij3 / ij4 experiment families used as the reference side of the repo's modern ACL-vs-SBCL comparison checks.
If the question is "what published result story does the repo actively protect?", this directory is part of the answer.
The supported validation path:
ij2 / ij3 / ij4 summaries in Q-Batch-SBCL/Graph/,That means this directory is not just archival context. It is one of the main live reference baselines used by tests/validate-artifacts.sh and tests/validate-thesis-comparison.py.
Three preserved experiment series compare CSP search strategies for program understanding:
| Series | Method | Description |
|---|---|---|
ij2 | 2-phase Memory-CSP | Backtracking phase 1, FCDR phase 2 baseline |
ij3 | Memory-CSP + heuristics | Both phases use FC + dynamic rearrangement + advance sort |
ij4 | Direct ADT CSP | Direct constraint satisfaction with FC/DR/advance sort |
Each series tests 20 noise levels (50-1000 in steps of 50) with 10 random seeds per level, for 200 attempted data points per series.
acl-experiments/
├── ij2/ raw ACL result files
├── ij3/ raw ACL result files
├── ij4/ raw ACL result files
├── Graph/ preserved graph data, gnuplot scripts, PostScript plots
├── ij*.lisp ACL-era experiment definition scripts
├── ij*.out console output logs
└── ij*.sh ACL-era shell runner scripts
This is the canonical active copy of the ACL baseline.
qcsp-may29-1996/Q-Batch/ is a reviewed duplicate retained only for snapshot integrity. The supported modern validation path should read from data/acl-experiments/, not from the embedded May29 duplicate.
Each raw result file (for example ij2/ij2-250.3) is a whitespace-separated single-line summary. Important fields include:
Size: noise levelDsize: average domain sizeNCC: node consistency checksTCC: total constraint checksBT/V: backtracks / nodes visitedThe raw ACL files are historical artifacts; the supported modern comparison path does not require every raw file to be perfect or complete. It uses the preserved graph summaries and shared noise-level overlap to validate the thesis story responsibly.
Graph/ contains the preserved ACL analysis layer:
ij*-ci.dat: confidence interval tablesij*-raw.*: older aggregated raw summaries*.gp: gnuplot scripts*.ps: PostScript outputMakefile, Bad/, Heuristic-Errs/, Util/: historical support materialThis preserved graph layer is the ACL side of the modern comparison against Q-Batch-SBCL/Graph/.
The modern experiment workspace lives in Q-Batch-SBCL/.
The normal supported flow is:
bash tests/validate-artifacts.sh
That path:
ij2 / ij3 / ij4 summaries,The repo validates historical trend preservation, not point-for-point numerical identity across platforms.
If you are working on the active thesis-result validation story, this directory is a primary reference input.
If you are studying ACL-era runner mechanics, it is also a preserved source tree, but not the place from which the modern repo executes experiments.
How the thesis PDF relates to the repo's supported validation and publication goals.
This directory holds the thesis document that the repo is trying to make continuously checkable.
Woods PHD CS-96-33 A Method of Program Understanding using Constraint Satisfaction.pdfThe docs/status build exports stable public-facing copies from the canonical PDF:
docs/phd-renovation-thesis.pdfdocs/phd-renovation-thesis.psThe PDF copy is a direct synchronized mirror of the canonical source file. The PostScript copy is generated from that same canonical PDF during the regular docs/status build so the project home page can link both formats from one stable place.
The thesis is not just background reading in this project. It is the main publication target behind the supported validation story.
The repo's primary goal is to keep the solver, preserved baselines, and reproduction harnesses aligned tightly enough that the thesis-result story remains explainable from a fresh checkout.
At a high level, the thesis:
under increasing noise.
These repo areas are the closest operational companions to the thesis:
| Repo area | Role |
|---|---|
data/acl-experiments/ | Preserved ACL/SPARC baseline for the main thesis ij2 / ij3 / ij4 story |
Q-Batch-SBCL/ | Modern SBCL rerun workspace for that same supported comparison story |
tests/validate-artifacts.sh | Main executable thesis-artifact validation path |
tests/validate-thesis-comparison.py | Thesis-story comparison check between regenerated SBCL summaries and preserved ACL curves |
data/sparc-archive/PrevResults/ | Earlier thesis-era and pre-thesis result families that provide historical context but are not the same as the main ij2 / ij3 / ij4 story |
If you want the publication narrative, start with the thesis PDF.
If you want the supported executable approximation of that narrative, start with data/acl-experiments/, Q-Batch-SBCL/, and tests/validate-artifacts.sh.
Operator-facing workflow map: validation, experiments, docs sync, and intake.
This file is the short map of the repo's main operator-facing workflows.
Use it when the question is not "what does this directory contain?" but "what do I run for the task in front of me?"
Use this when you want a REPL with the primary integrated solver line loaded.
sbcl --load "src/main.lisp"
Best for:
qcsp3: entry points by hand,Main guide: src/README.md
Use this when you want the supported confidence check for the repo.
sbcl --non-interactive --load "tests/run.lisp"
bash tests/validate-artifacts.sh
bash tests/validate-dashboard.sh
bash tests/validate-ff-provenance.sh
bash tests/validate-adt-batch.sh
bash tests/validate-csp-batch.sh
bash tests/validate-ao.sh
Best for:
Main guide: tests/README.md
Use this when you want to regenerate the supported SBCL experiment families.
bash Q-Batch-SBCL/ij2.sh
bash Q-Batch-SBCL/ij3.sh
bash Q-Batch-SBCL/ij4.sh
bash Q-Batch-SBCL/run-may29-all.sh
bash Q-Batch-SBCL/run-alex-all.sh
Best for:
Main guide: Q-Batch-SBCL/README.md Plot/data-flow guide: Q-Batch-SBCL/Graph/README.md
Use this when plan/status wording changes.
python3 tools/generate-release-dashboard.py
bash tests/validate-dashboard.sh
Best for:
status manifest in sync,
data and tracked markdown sources.
Main sources:
docs/release-dashboard-data.jsontools/generate-release-dashboard.pydocs/README.mdtools/README.mdUse this when preparing a 1.0.0 release candidate.
python3 tools/generate-release-dashboard.py
sbcl --non-interactive --load "tests/run.lisp"
bash tests/validate-artifacts.sh
bash tests/validate-ff-provenance.sh
bash tests/validate-adt-batch.sh
bash tests/validate-csp-batch.sh
bash tests/validate-ao.sh
bash tests/validate-dashboard.sh
Best for:
RELEASE-1.0-CHECKLIST.md.Main guides:
RELEASE-1.0-CHECKLIST.mdRENOVATION.mdUse this when new code, data, papers, or experiment artifacts arrive.
incoming/ using any convenient dump name.incoming/INDEX.md.data/, historical finds/, a snapshot tree, orDUPLICATES-REVIEW.md.
Main guides:
incoming/README.mdincoming/INDEX.mdThese are still useful, but they are not the main supported operator path.
sbcl --non-interactive --load "run-test4.lisp"
sbcl --non-interactive --load "run-test4-may29.lisp"
sbcl --non-interactive --load "run-test4-alex.lisp"
Use these for:
test4 loaders,Supported AO confidence still comes from tests/ao-run.lisp.
run-csp-tests.lisprenovate.lispThese remain part of the repo's historical/operator context, but they are not the primary supported flow for current work.
If the task is about confidence, use tests/.
If the task is about interactive solver use, use src/main.lisp.
If the task is about the thesis-result experiment story, use Q-Batch-SBCL/.
If the task is about new finds, use incoming/ first.
Which generated docs/status files are authoritative inputs versus build outputs.
This directory contains generated project-status and handbook outputs plus the structured source data that drives them.
Use this guide when you want to answer:
release-dashboard-data.json is the main structured status source for the generated project views.
It carries the current build line, focus, roadmap timeline, handbook refresh policy, and the short public-facing status story used across the generated outputs.
If the roadmap meaningfully moves, the current blocker changes, the harness materially changes, or the release focus shifts, update this file and then regenerate the outputs.
These files are generated from the structured status source and markdown docs:
| File | Role |
|---|---|
release-dashboard.html | Repo-local visual roadmap dashboard |
project-handbook.html | Full generated handbook for human-readable project state |
public-phd-renovation.html | Repo-side source for the public project page |
public-phd-renovation-handbook.html | Repo-side source for the public handbook |
public-status-phd-renovation.json | Manifest export for the shared public status interface |
phd-renovation-thesis.pdf | Stable generated public copy of the canonical thesis PDF |
phd-renovation-thesis.ps | Stable generated PostScript copy derived from the canonical thesis PDF |
Do not hand-edit the generated HTML or JSON here unless you are debugging the generator itself. The normal path is to update the markdown or release-dashboard-data.json, then regenerate.
The repo build produces the PhD-owned public assets that are later copied into the public Pages repo:
phd-renovation.htmlphd-renovation-handbook.htmlphd-renovation-dashboard.htmlphd-renovation-thesis.pdfphd-renovation-thesis.psdata/projects/phd-renovation.jsonThe shared public index.html is no longer owned directly by this repo. Instead, this repo exports its project status through public-status-phd-renovation.json in the interface format.
python3 tools/generate-release-dashboard.py
bash tests/validate-dashboard.sh
That regeneration step updates the dashboard, handbook, public page source, public handbook source, status manifest, and the stable thesis PDF/PS copies together.
If the question is "what is the current official project status view?", start here.
If the question is "how are these generated?", see tools/README.md.
Which generator scripts own the dashboard, handbook, public page, and status manifest.
This directory contains the repo's maintained documentation/status generators.
Use this guide when you want to know which script owns the dashboard, handbook, public page, or status manifest.
generate-release-dashboard.pyThis is the top-level status/doc generation entry point.
It regenerates the project-facing outputs that need to stay synchronized:
docs/release-dashboard.htmldocs/public-phd-renovation.htmldocs/public-status-phd-renovation.jsondocs/project-handbook.htmldocs/public-phd-renovation-handbook.htmldocs/phd-renovation-thesis.pdfdocs/phd-renovation-thesis.psRun this after any meaningful roadmap, blocker, harness, or release-focus change.
generate_project_handbook.pyThis builds the long-form handbook from the repo's source markdown documents.
Normally you do not need to call it directly, because generate-release-dashboard.py already includes it as part of the regular docs/status build.
Use it directly only when debugging handbook generation in isolation.
The generators draw from:
docs/release-dashboard-data.json for structured roadmap/status datagenerate_project_handbook.pyIf a new guide should appear in the handbook, add it to the handbook source list in generate_project_handbook.py.
The supported validation check for these scripts is:
python3 tools/generate-release-dashboard.py
bash tests/validate-dashboard.sh
If validation fails after a source change, the generated files in docs/ are out of date or inconsistent with the expected public/status outputs and exported thesis assets.
Update source docs and status data first.
Then regenerate through generate-release-dashboard.py.
Then validate with tests/validate-dashboard.sh.
Role of the root helper scripts and how they differ from the supported workflows.
This file explains the repo-root helper scripts that are still useful but are not the primary supported workflow.
Use this when you are looking at the top-level .lisp files and want to know which ones are historical/manual helpers versus which ones define the mainline operator path.
If your goal is one of these tasks, prefer the supported mainline entry points:
| Task | Preferred path |
|---|---|
| Interactive solver use | sbcl --load "src/main.lisp" |
| Full confidence check | tests/run.lisp plus the tests/validate-*.sh spine |
| AO baseline validation | tests/ao-run.lisp / tests/validate-ao.sh |
| Thesis experiment replication | Q-Batch-SBCL/ |
run-test4.lispManual qcsp3 AO loader and runner for the legacy test4 harness.
Use it when:
Preferred supported counterpart:
tests/ao-run.lisptests/validate-ao.shrun-test4-may29.lispManual AO harness for the qcsp-may29-1996 snapshot.
Use it for manual/historical comparison work, not as the main confidence gate.
run-test4-alex.lispManual AO harness for the alex snapshot.
This one is especially historical in flavor because alex reuses AO support from qcsp3/extras/ rather than carrying a self-contained AO tree of its own.
run-csp-tests.lispManual loader that runs a small base-snapshot smoke pass in csp/.
Useful for:
Preferred supported counterpart:
tests/run.lisprenovate.lispMinimal bootstrap loader for :phd-research.
Useful for:
Preferred interactive counterpart:
src/main.lispThese root helpers are worth keeping because they preserve historical usage and manual comparison paths.
They are not the repo's primary operator surface.
If you are choosing where to start today:
src/main.lisp for interactive work,tests/ for confidence,Q-Batch-SBCL/ for experiments,path.
Current bridge strategy and investigation state for the next post-M1 integration target.
This file records the investigation state for the preserved ADT batch family.
Current project decision:
treat the preserved ADT batch ij1-ij4 family as a snapshot-specific, integrity-checkable historical family rather than a required reproduction target for the integrated qcsp3 line.
It remains historically important, and the repo keeps the bridge probes because they explain the divergence. But the family is no longer the default next integration target.
The ADT batch family was investigated because:
tests/validate-adt-batch.sh,maintained solver trees,
recovery, and
result families.
Current preserved source of truth:
data/csp-adt-batch/Current integrity check:
tests/validate-adt-batch.shThe preserved family contains four direct-CSP ADT experiment lines:
| Family | Historical method | Current bridge reading |
|---|---|---|
ij1 | Backtracking only | ADT direct match with BT-style settings |
ij2 | FCDR | ADT direct match with FC + DR |
ij3 | AC-3 + BT | ADT direct match with AC-3 preprocessing plus BT |
ij4 | AC-3 + FCDR | ADT direct match with AC-3 preprocessing plus FC + DR |
Important note:
These ij1-ij4 names are not the same family as the later thesis ij2 / ij3 / ij4 memory-CSP line under Q-Batch-SBCL/.
The preserved archive does not use one driver file per family. It uses a small set of batch-part driver files plus shell wrappers:
| Family | Preserved driver files | Preserved shell wrapper | Historical knob pattern |
|---|---|---|---|
ij1 | ij1-5-bt.lisp and earlier sibling parts referenced by ij1-bt.sh | ij1-bt.sh | plain adt with noise/template/random/output knobs only |
ij2 | ij2-1-fcdr.lisp through ij2-5-fcdr.lisp | ij2-fcdr.sh | adt plus :forward-checking t and :dynamic-rearrangement t |
ij3 | ij3-1-ac.lisp through ij3-5-ac.lisp | ij3-ac.sh | adt plus :arc-consis 'before |
ij4 | ij4-1-acfcdr.lisp and sibling parts referenced by ij4-acfcdr.sh | ij4-acfcdr.sh | adt plus :arc-consis 'before, :forward-checking t, and :dynamic-rearrangement t |
Shared preserved facts across those drivers:
adt directly,:situation-id "adt-t2-1" and :template-id "adt-t2",:sit-noise, :random-ident, and :output-file,load chain rooted in the base csp tree,/u/sgwoods/csp.What is already true:
What is not true yet:
preserved ADT batch summaries.
The first narrow executable bridge now exists for one preserved case:
ij2noise 50, random-ident "default"csp:adtCurrent result:
csp:adt,BT, node consistency on, no AC,FC, DR, random-ident default, RANDOM ordering),
Current observed divergence versus preserved ij2-050.1:
| Metric | Preserved | Current bridge |
|---|---|---|
| Average domain size | 10.8 | 14.0 |
| NCC | 450 | 520 |
| TCC | 269 | 383 |
| BT / visited | 13 / 16 | 14 / 17 |
| FC cost | 366 | 563 |
| DR cost | 18 | 23 |
That means the first bridge is already useful: it has moved the ADT batch family from "pure archive" to "executable investigation," but it has not yet crossed into reproduction.
The safest way to investigate the family was:
data/csp-adt-batch/ as the preserved historical source,the family,
archive itself.
Working hypothesis:
| Preserved family | Closest maintained executable line |
|---|---|
ij1 | csp:adt or qcsp3:adt with BT-oriented settings |
ij2 | csp:adt or qcsp3:adt with FC + DR |
ij3 | csp:adt or qcsp3:adt with AC-3 + BT |
ij4 | csp:adt or qcsp3:adt with AC-3 + FC + DR |
This mapping remains a bridge hypothesis, not a finished validation claim.
For the narrow executable bridge probes, the better maintained host is:
csp/ first, then compare against qcsp3/ later if useful.
Why csp/ is the better first bridge host:
(/u/sgwoods/csp) rather than a later integrated line,
csp:adt already matches the preserved default IDs("adt-t2-1" / "adt-t2"),
csp:adtinterface without having to neutralize qcsp3-specific defaults,
qcsp3:adt adds later integrated-line features and different defaults(for example the Quilici-oriented defaults and extra override/suppression controls), which make it a stronger long-term target but a noisier first reproduction surface,
csp bridge will give us a cleaner historicalreference point before we ask whether qcsp3 can stand in for the same family.
That made qcsp3 the better probe host, but not enough to justify folding the family into the integrated line.
The current evidence points to a real model split rather than one missing file or one bad random seed:
csp and qcsp3 bridge probes both run, but neither reproducesthe preserved ij2 metrics,
old-dist1-pre-quilici probe makes the fit worse, notbetter,
qcsp3 builds a smaller noise layer with thestrongest node-domain squeeze on t2-c,
csp/dist1 andmaintained qcsp3/dist1 are different ADT noise models, not the same model with minor drift.
That combination makes the current project stance:
qcsp3 to reproduce this family as part of thesupported integrated baseline.
Even with the snapshot-specific classification, the investigation work still matters because it established:
If the project chooses to revisit ADT batch integration later, the right question is no longer "can qcsp3 just rerun the family?" It is:
gold-standard line?
The useful deliverables from this investigation are now:
ij*.lisp, shell runners, and summary scripts underdata/csp-adt-batch/,
csp and qcsp3 rerun harnesses,snapshot-specific.
The current leading suspect is now random-state lineage. The surviving Rnddefault bundles in qcsp-may29-1996/, qcsp3/, qcsp-alex-sep16-1997/, and historical finds/yj-sun/Csp/ are not byte-identical, and the bridge was originally borrowing only the May29 copy. The new tests/investigate-adt-batch-random-lineage.sh probe exists to compare the same ij2 bridge case across those surviving default bundles before we blame the core solver.
Current result from that probe:
Rnddefault source | Tracked mismatches | Distance score | Current read |
|---|---|---|---|
qcsp3/ADT-Random/Rnddefault | 6 | 391.2 | Closest surviving default bundle so far; still not a reproduction, but much nearer to the preserved ij2-050.1 metrics than the others. |
qcsp-may29-1996/ADT-Random/Rnddefault | 6 | 1273.8 | Significantly further away than the qcsp3 bundle. |
qcsp-alex-sep16-1997/ADT-Random/Rnddefault | 6 | 1345.4 | Furthest successful surviving bundle among the maintained snapshots. |
historical finds/yj-sun/Csp/ADT-Random/Rnddefault | load failure | n/a | Does not currently load cleanly through the csp bridge path. |
That does not prove random lineage is the entire story, but it does move the investigation from "generic random-state suspicion" to a concrete next read: the base csp bridge is much closer when seeded from the surviving qcsp3 default bundle than when seeded from the may29 or alex copies.
Because of that, the narrow bridge probe in tests/investigate-adt-batch-bridge.sh now defaults to the surviving qcsp3/ADT-Random/Rnddefault bundle rather than the May29 copy. The script still accepts PHD_ADT_BRIDGE_RANDOM_SOURCE=... when we want to compare other surviving seed bundles on purpose.
That default change materially improved the first ij2 bridge reading: the bridge still diverges, but it now stays much closer to the preserved archive on NCC, TCC, BT/visited, and FC/DR cost than the earlier May29-seeded probe did.
The next probe also answered a more important question: tests/investigate-adt-batch-input-shape.sh shows that the divergence now starts before search, not inside backtracking. Under the closer qcsp3 seed bundle, the generated bridge input state currently reports:
| Input-shape probe field | Current bridge value |
|---|---|
| Situation size | 104 |
| Raw variable count | 5 |
| Raw average domain size | 104.0 |
| Node-consistent average domain size | 14.0 |
| Node-consistency checks | 520 |
Those last two values exactly match the bridge line's Dsize and NCC columns (14.0 and 520). That means the remaining mismatch is already present by the time preprocessing finishes. The current highest-value next question is therefore not "why does search branch differently?" but "why does the generated situation / node-consistency surface differ from the preserved ij2-050.1 case?"
tests/investigate-adt-batch-source-drift.sh now compares that same pre-search surface across maintained source/dist variants using the surviving qcsp3/ADT-Random/Rnddefault bundle:
| Probe | Situation size | Raw avg domain | Node avg domain | Node checks | Read |
|---|---|---|---|---|---|
csp/dist1 | 104 | 104.0 | 14.0 | 520 | Current narrow bridge baseline |
qcsp3/dist1 | 87 | 87.0 | 8.4 | 435 | Materially closer to preserved ij2-050.1 on the pre-search Dsize / NCC pair |
qcsp3/old-dist1-pre-quilici | 111 | 111.0 | 12.2 | 490 | Runs when the carried distribution is normalized inside a temporary bridge copy, but lands farther from the preserved ij2-050.1 metrics than qcsp3/dist1 |
That means the source-definition question is now sharper: although the preserved wrappers look closer to the older csp tree, the maintained qcsp3 ADT setup currently produces a preprocessing surface closer to the preserved ij2 case than either the maintained csp setup or the normalized old-dist1-pre-quilici variant does. The next useful bridge step is therefore no longer "repair old-dist1 and see if that explains the preserved case." That probe now runs and makes the fit worse. The next step is to understand why the maintained qcsp3/dist1 preprocessing surface is still offset from the preserved archive.
That dedicated qcsp3-side runner now exists as tests/investigate-adt-batch-qcsp3-bridge.sh / tests/run-adt-batch-bridge-qcsp3-ij2.lisp. Using the same surviving qcsp3/ADT-Random/Rnddefault bundle, it currently produces:
| Metric | Preserved ij2-050.1 | csp bridge | qcsp3 bridge |
|---|---|---|---|
| Average domain size | 10.8 | 14.0 | 8.4 |
| NCC | 450 | 520 | 435 |
| TCC | 269 | 383 | 221 |
| BT / visited | 13 / 16 | 14 / 17 | 14 / 18 |
| Number of solutions | 3 | 3 | 4 |
| FC cost | 366 | 563 | 300 |
| DR cost | 18 | 23 | 18 |
That does not make qcsp3 a reproduction yet, but it does change the bridge recommendation: the maintained qcsp3 line is now the closer executable host for the first narrow ij2 ADT batch bridge than the maintained csp line.
The strongest next step is no longer "can qcsp3 run the case at all?". It is now "why does qcsp3 still differ on the remaining bounded metrics, especially solution count and the pre-search Dsize / NCC / TCC surface?"
tests/investigate-adt-batch-structure-drift.sh now drills into that pre-search surface directly for maintained csp/dist1 versus qcsp3/dist1. The current result is that the drift is visible in both the generated noise mix and the per-variable node-consistent domains:
| Probe | Base size | Total size | Noise size | Node avg domain | Node checks |
|---|---|---|---|---|---|
csp/dist1 | 15 | 104 | 89 | 14.0 | 520 |
qcsp3/dist1 | 15 | 87 | 72 | 8.4 | 435 |
Key structural differences from that probe:
qcsp3/dist1 currently generates 17 fewer noise statements than csp/dist1.begin / end noise blocks andmore check noise statements under qcsp3.
t2-c, which falls from 32 candidates under csp to 13 under qcsp3.
That makes the next investigation target much sharper: compare why the maintained qcsp3 path is generating a smaller, differently shaped noise surface for the same random bundle, and why that especially compresses the t2-c candidate domain.
tests/investigate-adt-batch-generator-drift.sh now compares the maintained source definitions directly. It confirms that the preprocessing drift is not just about random-state lineage:
csp/dist1 and qcsp3/dist1 are different distributions, not just the samelabel carried forward. qcsp3/dist1 adds while, increment, and not-equals, increases block, assign, decl, and check weight, and no longer matches the original equal-weight seven-family csp/dist1.
qcsp3 also changed the generator behavior, not just the weights. It usesget-line-number / get-specific-line instead of random-position, supports saved-situation reload, names for blocks explicitly, and allows an extra increment branch inside generated loop bodies.
old-dist1-pre-quilici probe shows that restoring the oldweight family alone is not enough. The maintained qcsp3 generator semantics still differ materially from the older csp path.
That narrows the post-M1 design choice:
csp ADT noise semantics inside a controlledqcsp3 bridge harness when reproducing ADT batch results,
divergence rather than forcing the modern integrated line to mimic it.
This bridge does not mean:
qcsp3/,target.
The goal is to turn an integrity-checkable preserved family into the next deliberate integration experiment, with provenance still intact.
Filesystem review: supported line, reference snapshots, archives, and mixed-purpose areas.
This file reviews whether the repository layout makes it clear:
Short answer: the repo is much clearer than it was, but a few mixed-purpose areas still require insider knowledge.
| Path | Primary role | Current clarity |
|---|---|---|
qcsp3/ | Primary integrated solver candidate | Good |
csp/ | Earliest reference snapshot | Good |
qcsp-may29-1996/ | Reference snapshot plus embedded historical experiment trees | Mixed |
qcsp-alex-sep16-1997/ | Reference snapshot plus archive-heavy experiment/tooling material | Mixed |
tests/ | Supported validation spine | Strong |
Q-Batch-SBCL/ | Modern experiment drivers plus generated outputs | Mixed |
incoming/ | Single intake bucket for newly found relevant material | Strong |
data/ | Consolidated preserved data/results/publications | Strong |
historical finds/ | Archive intake and recovery staging | Good |
docs/ | Generated status/dashboard/public-page outputs | Good |
src/ | Modern interactive entry point | Strong |
| Root helper scripts | Legacy/manual entry points and bootstrap helpers | Mixed |
These are reasonably easy to identify now:
| Area | Why it is clear |
|---|---|
qcsp3/, csp/, qcsp-may29-1996/, qcsp-alex-sep16-1997/ | Snapshot names, ASDF files, and README coverage make the solver lineage visible. |
tests/ | Clearly framed as the supported validation surface. |
src/main.lisp | Clear REPL-oriented entry point. |
data/ | Consolidated preserved data/results catalog with a strong README. |
Within each solver snapshot, the domain split is mostly legible:
| File family | Meaning |
|---|---|
queens.lisp | Queens / confused-queens domain |
adt-simple.lisp + adt-setup.lisp | ADT matching domain and its data/setup |
mpr-simple.lisp + mpr-setup.lisp | MPR domain and its data/setup |
memory-csp.lisp, quilici-search.lisp, bm.lisp, bt.lisp | Solver/search strategies rather than domain definitions |
This is now understandable at a high level:
| Area | Meaning |
|---|---|
Q-Batch-SBCL/ | Active modern experiment control surface |
data/acl-experiments/ | Preserved ACL thesis-era baseline |
data/csp-adt-batch/, data/csp-batch/, data/csp-save-results/ | Preserved historical result families |
historical finds/ | Recovered archive material, not yet promoted |
Q-Batch-SBCL/ mixes code, tracked outputs, and scratch dataThis directory is useful but not self-evident at a glance because it contains:
The README explains this, but the directory still behaves like both experiments/ and artifacts/ at once.
This is especially true in:
qcsp-may29-1996/qcsp-alex-sep16-1997/For example, qcsp-may29-1996/ contains source files alongside Q-Batch/, NewData* batches, ADT-SituationMar96/, and other embedded historical artifacts. That is historically faithful, but structurally mixed.
One reviewed exception is now explicitly marked in-place: qcsp-may29-1996/Q-Batch/ is a preserved duplicate of data/acl-experiments/, retained for snapshot integrity rather than active use.
Files like:
run-test4.lisprun-test4-may29.lisprun-test4-alex.lisprun-csp-tests.lisprenovate.lispare still valuable, but they look more “primary” than they really are. In the current repo they are secondary/manual helpers, not the main supported flow.
Examples:
Q-Batch-SBCL/NewData4a-Batch/, NewData4b-Batch/, NewData5-Batch/Q-Batch-Freeze/MyBatch/artifacts/ inside snapshotsThese names preserve provenance, which is good, but they do not explain their role without documentation.
historical finds/ is accurate but awkward as a pathnameThe name is understandable to humans, but the space in the directory name adds friction for shell work and scripting.
Going forward, read the repo through these buckets:
qcsp3/tests/Q-Batch-SBCL/docs/data/acl-experiments/csp/qcsp-may29-1996/qcsp-alex-sep16-1997/data/csp-adt-batch/data/csp-batch/data/csp-save-results/data/sparc-archive/PrevResults/qcsp-may29-1996/NewData4b-Batch/incoming/historical finds/data/motors-releases/data/motors-backups/data/lost-datasets.mdrun-test4*.lisprun-csp-tests.lisprenovate.lispREPOSITORY-STATUS.md and this file linked from README.md.DOCS-COVERAGE-REVIEW.md current as the explicit record of what isnow well-covered versus still thin.
README.md that root run-test4*.lisp,run-csp-tests.lisp, and renovate.lisp are manual compatibility helpers.
source, runtime-generated data, preserved results, and archive/context.
incoming/ first, then promote them onlyafter review.
Q-Batch-SBCL/ only if the historical name stops paying its way.
manual/ or compat/ home for root helper scripts, butonly if that does not break established references or provenance.
historical finds/ if automationpressure grows.
just to make the layout prettier.
NewData4b-Batch/unless the repo adds a carefully documented alias/mapping layer.
without first promoting it through validation/provenance work.
The repository already tells a coherent story if you know where to start: qcsp3/, tests/, Q-Batch-SBCL/, data/, and the roadmap files.
What remains structurally confusing is not the solver core. It is the historical overlap between:
That means the next best improvements are documentation and labeling, not aggressive directory surgery.
Repo-wide read on what is now well documented, what still feels thin, and where the next documentation passes should go.
This file records the current state of documentation coverage across the repo:
Use it as the documentation-focused counterpart to:
REPOSITORY-STATUS.mdREPOSITORY-STRUCTURE-REVIEW.mdWORKFLOWS.mdShort answer:
documentation coverage is now strong for the primary solver line, the validation spine, the main preserved result families, and the major historical snapshot workspaces.
What remains thinner is no longer the core architecture. It is mostly:
top-level repo navigation.
These areas now explain themselves clearly either in place, from the top-level docs, or both:
| Area | Current read |
|---|---|
README.md | Strong top-level orientation for goals, workflows, and guide entry points. |
DEVELOPMENT.md | Strong architecture and maintenance guide. |
WORKFLOWS.md | Strong operator-facing map of what to run. |
tests/ | Strong validation-surface guidance. |
docs/ + tools/ | Strong generated-doc/status build guidance. |
qcsp3/ | Strong coverage across solver role, mixed workspaces, AO layer, and generated data areas. |
csp/ | Strong enough for the earliest snapshot, including its lighter working-state scaffolding. |
qcsp-may29-1996/ | Stronger now, especially around AO support and working-state vs preserved batch/result trees. |
qcsp-alex-sep16-1997/ | Stronger now, especially around MyBatch/, testdata/, and working-state areas. |
data/ | Strong preserved-data catalog and archive/result-family orientation. |
incoming/ + historical finds/ | Strong intake/review/provenance separation. |
docs/project-handbook.html | Strong readable index for human review and onboarding. |
These areas are understandable, but still rely on historical naming or mixed contents that no amount of README text can fully hide:
| Area | Why it is still mixed |
|---|---|
Q-Batch-SBCL/ | It still mixes tracked experiment infrastructure, generated run outputs, extracted tables, and tracked overlay images. |
qcsp-may29-1996/NewData* and Q-Batch* trees | Historically meaningful naming and embedded result trees remain inherently mixed with the source snapshot. |
qcsp-alex-sep16-1997/testdata/ | Better explained than before, but still a large preserved experiment/data tree with multiple subfamilies. |
historical finds/yj-sun/ | Valuable provenance, but still archive-heavy and not fully normalized into a simplified reading path. |
These are the most likely next documentation targets if we keep going:
| Area | What feels thin |
|---|---|
qcsp-alex-sep16-1997/testdata/Results* and sibling subtrees | The top-level testdata/README.md exists, but the deeper result-family subareas are still more cataloged than narrated. |
historical finds/Refine, historical finds/Unravel, historical finds/Unravel-changes | These are classified as archive/context material, but their internal roles are still light. |
| Root helper scripts as a set | MANUAL-HELPERS.md helps, but the repo root still visually elevates them more than their current importance warrants. |
| In-code entry-point documentation in the historical snapshots | The repo-level docs are stronger than the remaining function-level guidance in some snapshot files. |
The biggest change over the recent cycles is that the repo no longer relies on tribal knowledge for:
overview.
That is a real shift from "the docs exist if you know where to look" to "the repo can orient a new reader from several likely entry points."
The largest documentation risks now are subtle rather than catastrophic:
workflows just because they sit inside snapshot roots,
supporting narrative.
Those are now "clarity polish" risks more than "the repo is unreadable" risks.
If the project keeps investing in the 0.3.x documentation lane, the best next steps are:
qcsp-alex-sep16-1997/testdata/ result-family guidance,historical finds/ subtrees thatstill feel opaque,
solver files,
relocation rather than more explanation.
Update this file whenever:
Which reviewed historical overlaps are duplicates versus preserved provenance layers.
This file records historical data and files that have been reviewed for redundancy.
Its purpose is to separate two different cases clearly:
The repo already has a canonical copy elsewhere, and the duplicate is kept only for snapshot integrity or provenance.
The material overlaps another tree, but still matters for lineage, historical context, or recovery work.
Canonical elsewhere: do not treat this copy as the active source of truth.Retain for provenance: keep it, but do not build new supported workflows on it.Still go-forward valuable: overlapping material still has a distinct role.| Area | Review result | Canonical / active path | Why kept | Go-forward read |
|---|---|---|---|---|
qcsp-may29-1996/Q-Batch/ | Reviewed duplicate | data/acl-experiments/ | Preserved inside the May 1996 snapshot for historical integrity | Not needed as a separate active dataset in the main project |
qcsp-may29-1996/Q-Batch/Graph/ij2-ci.dat, ij3-ci.dat, ij4-ci.dat | Verified duplicate by content | data/acl-experiments/Graph/ij2-ci.dat, ij3-ci.dat, ij4-ci.dat | Snapshot-local preserved copy | Canonical validation should use data/acl-experiments/Graph/ |
historical finds/yj-sun/Csp/MyBatch/ vs qcsp-alex-sep16-1997/MyBatch/ | Exact-match overlap exists | qcsp-alex-sep16-1997/MyBatch/ for tracked snapshot use | Archive copy helps provenance and recovery analysis | Still useful for archive lineage, not an active duplicate to prune casually |
historical finds/yj-sun/Csp/SteveBkps/bt.lisp vs alex backup copy | Exact-match overlap exists | qcsp-alex-sep16-1997/SteveBkps/bt.lisp | Archive provenance | No separate active role, but harmless as archive evidence |
historical finds/yj-sun/Csp/testdata/Results/PS/* vs data/sparc-archive/PrevResults/* carry-forwards | Partial exact carry-forward overlap | data/sparc-archive/PrevResults/ for tracked thesis-era preserved results | Archive source tree explains where many carry-forwards came from | Still valuable for provenance, not redundant enough to treat as disposable |
qcsp-may29-1996/NewData4b-Batch/Graph/ff* vs data/sparc-archive/PrevResults/ff* | Overlapping preserved family, not redundant | Both matter | One is the stronger source-tree provenance anchor, the other is the preserved thesis-era carry-forward layer | Still go-forward valuable as a paired provenance story |
If a reviewed duplicate is needed for:
keep it, but mark its canonical active counterpart clearly.
If it is a true duplicate for day-to-day supported workflows, point users to the canonical location and avoid expanding the supported validation flow around the duplicate copy.
data/acl-experiments/over qcsp-may29-1996/Q-Batch/.
ff* lineage, treatqcsp-may29-1996/NewData4b-Batch/ and data/sparc-archive/PrevResults/ff* as paired provenance layers rather than competing duplicates.
historical finds/, do not assume exact-matchoverlap means “safe to discard.” Many such copies still help explain how the tracked snapshot was assembled.
Update this file whenever:
Migration history, current phase, roadmap, and long-form status narrative.
This document describes the migration of the PhD research codebase from Allegro Common Lisp (SPARC, 1993-1997) to Steel Bank Common Lisp (macOS ARM64, 2026).
| Original | Renovated | |
|---|---|---|
| Lisp | Allegro CL 4.x (Franz Inc.) | SBCL 2.6.x |
| Platform | SPARC / Solaris | Apple M4 / macOS |
| Build | Manual (load "load") chains | ASDF 3 with .asd system definitions |
| Packages | Everything in CL-USER | PHD-CSP, PHD-QCSP3, PHD-QCSP-MAY29, PHD-QCSP-ALEX |
| Tests | None | FiveAM suites + integration runners |
| Files | .cl extension | .lisp extension |
Four systems were modernized covering 49 source files:
:phd-research (csp/) -- base CSP solver:qcsp3 (qcsp3/) -- extended solver with memory-CSP and Quilici search:qcsp-may29-1996 -- historical snapshot (May 1996):qcsp-alex-sep16-1997 -- historical snapshot (Sep 1997)Replaced Allegro CL's manual load chains with ASDF system definitions. Each system got a package.lisp with defpackage/in-package, isolating symbols into their own packages instead of polluting CL-USER.
excl:* and sys:* calls (Allegro-specific extensions)#p(...) reader macros (Allegro pathname literals).clinit.cl initialization files"Macintosh HD:Languages:...").bkp, .bak, *~ files).DS_Store filesThese are latent bugs in the original code that were discovered and fixed:
| Bug | File(s) | Fix |
|---|---|---|
defconstant with list values fails on SBCL reload | multiple | Changed to defparameter |
:mode keyword passed where :arc-consis expected | queens.lisp | Changed to :arc-consis |
LENGTH variable shadows CL built-in | bm.lisp | Renamed to num-vals |
*current-situation typo (missing *) | utility.lisp | Fixed to *current-situation* |
Duplicate defun get-templ-constraints | mpr-simple.lisp | Removed duplicate |
| Extra close paren creating unreachable code | csp/bt.lisp | Removed |
set-globals caller passes 18 args, callee expects 20 | alex/mpr-simple.lisp | Added 2 missing nil args |
eq used on strings (identity vs equality) | may29+alex/mpr-simple.lisp | Changed to string-equal |
Unconditional concatenate on non-string output-file | qcsp3/utility.lisp | Moved inside string-only branch |
Changed 'complete, 'error, 'time-bound (package-internal symbols) to :complete, :error, :time-bound (keywords) across all four bt.lisp files. Keywords are self-evaluating and package-independent, making cross-package test assertions reliable.
SBCL emits redefinition-warning when a function is defined in one file and intentionally redefined in another (e.g., mpr-simple.lisp defines stubs that mpr-setup.lisp overrides). Added sb-ext:muffle-conditions declarations around the 16 files that participate in this pattern, bringing the warning count from ~60 per system to 0.
The core algorithms are untouched:
This was verified by running the same experiment (ij2, noise=50, seed=default) on both the pre-cleanup and post-cleanup code. The results were identical:
Pre-cleanup Post-cleanup
NCC 284 284
TCC 281 281
BT 38 38
FiveAM test suites cover all four systems:
sbcl --non-interactive --load "tests/run.lisp"
Arc-oriented (AO) solver integration tests:
sbcl --non-interactive --load "run-test4.lisp"
sbcl --non-interactive --load "run-test4-may29.lisp"
sbcl --non-interactive --load "run-test4-alex.lisp"
Three experiment series compare CSP search efficiency under increasing noise (50-1000 extraneous program statements), each with 20 noise levels and 10 random seeds (200 runs per series):
| Series | Method | Description |
|---|---|---|
| ij2 | memory-search | Baseline: phase 1 uses BT only |
| ij3 | memory-search | Both phases use FC + DR + advance sort |
| ij4 | adt (direct) | Direct matching with FC + DR + advance sort |
Experiments were run across all four code snapshots:
# qcsp3 (primary)
bash Q-Batch-SBCL/ij2.sh && bash Q-Batch-SBCL/ij3.sh && bash Q-Batch-SBCL/ij4.sh
# alex (Sep 1997 snapshot)
bash Q-Batch-SBCL/run-alex-all.sh
# may29 (May 1996 snapshot)
bash Q-Batch-SBCL/run-may29-all.sh
Results are compared against the original Allegro CL runs (now stored in data/acl-experiments/) using 95% confidence intervals. The CI bands overlap at every noise level for all three series across all snapshots, confirming algorithmic equivalence despite different random number generators (ACL's proprietary PRNG vs SBCL's Mersenne Twister).
python3 Q-Batch-SBCL/Graph/compare-all-overlay.py # Generate 4-way plots (requires matplotlib)
Comparison plots are in Q-Batch-SBCL/Graph/compare-*-overlay.png. Each plot shows four series: ACL (SPARC), SBCL qcsp3, SBCL alex, and SBCL may29.
ts-matches-type function in alex's adt-simple.lisp (line 1296), commenting out the detailed type-matching logic (Decl array/range checking, parameter-count matching for Zero/Assign/Print/Check/Increment/Not-Equals). The simplified version only checks statement type name equality, which allows more domain values to survive node consistency:| Metric (noise=500, seed=default) | qcsp3 | may29 | alex |
|---|---|---|---|
| Avg domain size after NC | 43.0 | 42.0 | 67.7 |
| TCC | 1,904 | 1,759 | 11,919 |
| Backtracks / Visited | 22/23 | 22/23 | 86/87 |
The causal chain: simplified ts-matches-type → ~1.6x larger domains → ~4x more backtracks → ~6.5x higher TCC. This was intentional — the simplified NC was likely paired with alex's DFA-based features (node-type-consis, dfa-rearrangement) which would compensate, but those features default to nil and are not enabled in the standard ij4 experiments. A diagnostic script at Q-Batch-SBCL/diagnose-ij4.sh reproduces these results.
| Issue | Cause | Fix |
|---|---|---|
| Alex TCC=0 for all experiments | Noise injection variable *noise-count* not incremented (local shadow) | Restored *noise-count* global in alex's adt-setup.lisp |
| May29 TCC=0 for all experiments | Pre-generated ADT-Situation/Sit-q-i1-* files from old ACL runs were trivially solvable | Deleted stale situation files to force fresh generation |
| May29 ij4 "Situation not found" | adt called with :situation-id "quilici-i1" but may29 uses "q-i1" | Changed to :situation-id "q-i1" in may29-ij4-run.lisp |
| CRLF line endings in shell scripts | Write tool produced CRLF on macOS | Regenerated with printf and verified with xxd |
The data/sparc-archive/ directory (formerly DataFind/) contains .dir files — original directory listings from the SPARC archive. An audit compared these against the current repo:
| .dir file | Maps to | Status |
|---|---|---|
csp.dir | csp/ | All core solver files present. unify.lisp recovered from qcsp-may29-1996/Keep/. Still missing: adt-test2.lisp, adt-test3.lisp, compile-set.lisp |
qcsp.dir | qcsp3/ | All core files present. Missing: compile.lisp, compile-set.lisp, gsat-test.lisp, load.lisp (all superseded by ASDF) |
qcsp3.dir | qcsp3/ | Identical file list to qcsp.dir (confirms same codebase) |
qcsp-alex.dir | qcsp-alex-sep16-1997/ | Core files present. Non-core files organized into extras/ (34 .lisp) and artifacts/ (15 result/output files). Missing same 4 ACL build files |
QCSP-nov96.dir | Not in repo | Intermediate snapshot with unique terrain analysis code |
Files consistently missing across all snapshots (compile.lisp, compile-set.lisp, load.lisp) are old ACL build infrastructure superseded by ASDF. The package.lisp files added during renovation are consistently "extra" (expected).
See GitHub Issues for tracked items. Summary:
.lisp files moved to extras/, 15 result/output files moved to artifacts/, 7 ephemeral files deleted, 83 generated seed files untracked. README added. (Issue #1)ts-matches-type in alex's adt-simple.lisp (detailed type-matching commented out by Yongjun Zhang). This was intentional, paired with DFA-based extensions not enabled in standard experiments. Diagnostic script at Q-Batch-SBCL/diagnose-ij4.sh. (Issue #2)csp/unify.lisp recovered from qcsp-may29-1996/Keep/ with defconstant→defparameter fix. adt-test2.lisp, adt-test3.lisp, gsat-test.lisp are truly lost (not in any snapshot). compile-set.lisp superseded by ASDF. (Issue #3)ADT-Random/ and ADT-Situation/ directories across all four systems are untracked and in .gitignore. (Issue #7)DataFind/README.md. Later consolidated into data/sparc-archive/. (Issue #5).github/workflows/test.yml runs all FiveAM suites on push/PR. (Issue #8)terrain-setup.lisp, terrain-simple.lisp, closure.lisp), but a newly identified Lacie1 historical drive reportedly contains terrain data and the generator. Recovery is no longer just a generic backup-media search; the next concrete step is to sort that drive and compare it against QCSP-nov96.dir. See data/lost-datasets.md. (Issue #4)Guiding principle for the next phase: treat the published PhD thesis results, the preserved historical experiment artifacts, and the current regression suites as the foundation for every future change. New work should either preserve those published behaviors or explain any intentional deviation in a repeatable way, with the long-term aim of converging on one gold-standard code line rather than maintaining several disconnected runnable snapshots forever.
Bring the thesis codebase to a state where:
fresh checkout,
executable, integrity-checkable, or explicitly classified as provenance-only,
with snapshot-specific differences documented, and
measured and explained.
In short: turn the renovated snapshots, preserved data, and recovered archives into one trustworthy integrated research platform, not just a modernized copy of legacy Lisp.
For the current phase, the practical subgoals are:
ij2/ij3/ij4path,
regression signal,
for eventual inclusion under one integrated solver line, and
qcsp3/ would have to satisfy toearn "gold-standard" status.
| Area | Status | Current position |
|---|---|---|
| Reference snapshots runnable | Strong | All four ASDF systems load and the supported FiveAM suites pass on SBCL. |
| Core regression baseline | Strong | Deterministic metric assertions exist for standard and confused queens across all four systems. |
AO / test4 validation | Strong for bounded M1 scope | AO coverage has moved from smoke-only into asserted deterministic coverage for the supported baseline. qcsp3 and May29 now cover AO cases 1-3 across the reduction families plus the legacy test4s / test4a wrappers, while alex keeps its revise baseline. |
| PhD-result validation path | Strong | CI regenerates SBCL graph artifacts and validates the supported ACL-vs-SBCL ij2/ij3/ij4 trend story. |
| Warning hygiene | Strong for the supported path | The repeated alex/core STYLE-WARNING tail has been cleared from the supported validation path, and the AO harness redefinition chatter has been trimmed from both CI and the manual run-test4*.lisp flows. Fresh March 21, 2026 runs of tests/run.lisp and tests/validate-ao.sh are clean for the supported gate; any remaining legacy notes are now outside that mainline signal. |
| Documentation and onboarding | Good and improving | The top-level docs are aligned with the current validation spine, and local README coverage now makes the code/test/results layout easier to navigate from disk. |
| Historical provenance | Strong | historical finds/yj-sun/Csp is now tied to the alex-era line, many PrevResults artifacts are mapped, the ff1/ff2/ff3 family is grounded in the preserved qcsp-may29-1996/NewData4b-Batch/ tree with an active integrity check, and both the older ADT batch archive and the earliest DREV-era T1-T6 family have moved from provenance-only to integrity-checkable. |
| Gold-standard integration target | Emerging, with M1 accepted | qcsp3/ is the leading candidate, and Milestone M1 is now accepted as the first gate showing it can carry the PhD baseline, AO baseline, and preserved ff* relationship under one supported umbrella. The repo is now moving beyond "is M1 ready?" into post-M1 documentation and integration work. |
| Research-readiness for new experiments | Not there yet | The baseline is much firmer than before, but not yet complete enough for a 1.0.0 integrated research platform claim. A clear Hanoi-4 status statement is sufficient for 1.0; full Hanoi-4 behavioral/repeatability understanding is now explicitly a 2.0 goal. |
qcsp3/ integration milestoneThe first concrete milestone for qcsp3/ is:
Milestone M1: integrated validated baseline
qcsp3/ can be treated as the project's first real integrated solver line when all of the following are true:
tests/run.lisp, tests/validate-artifacts.sh, tests/validate-ao.sh, and tests/validate-ff-provenance.sh,
qcsp3/ remains the default executable path for the supportedthesis-result story, especially the ACL-vs-SBCL ij2/ij3/ij4 comparison workflow,
integrated line rather than treated as a separate historical annex,
ff1/ff2/ff3 family has an explicit documentedrelationship to the integrated line, even if that family is still integrity-checkable rather than fully rerunnable through qcsp3/, and
qcsp3/ and the referencesnapshots are documented as intentional, bounded, or still-open gaps.
The active delta list for this is now centralized in INTEGRATION-DELTAS.md. The short gate-by-gate answer that supported the M1 decision now lives in M1-READINESS.md.
M1 is intentionally narrower than a final "gold-standard achieved" claim. It does not require every historical family to be fully executable through qcsp3/ yet. It does require that qcsp3/ become the clear operational center of the validated baseline, with the historical snapshots serving as reference anchors rather than co-equal supported workflows.
0.1.x Stability: effectively complete for the supportedartifact pipeline. Fresh-checkout plot regeneration and artifact validation are in place.
0.2.x Verification: effectively complete for the M1baseline. This phase delivered stronger regression assertions, AO asserted coverage, automated thesis-comparison checks, ff* integrity/provenance validation, and incremental warning cleanup.
0.3.x Documentation: complete enough for 1.0.0. High-leveldocs are much stronger, the code/test/results roots are easier to navigate, and the status/handbook/public artifacts are now part of the release flow.
diagnosed alex's ij4 divergence, but we are intentionally holding off on broader experimental changes until the baseline is tighter.
historical finds/intake is now classified, yj-sun/Csp has loader/result provenance notes, and archive-to-PrevResults mapping has begun. This lane is now supporting integration planning, not just intake triage.
tests/run.lisp,tests/validate-artifacts.sh, tests/validate-ff-provenance.sh, and tests/validate-ao.sh remain the merge gate for the supported baseline. Keep REPOSITORY-STATUS.md, REPOSITORY-STRUCTURE-REVIEW.md, and DOCS-COVERAGE-REVIEW.md in sync as the broader repo surface changes.
incoming/ intake, de-duplication, and categorization the next majorwork lane. New materials are likely to be the main source of project movement after 1.0.0, so keep the intake, promotion, duplicate review, and archive classification flow disciplined.
1.0.1 for STYLE-WARNING cleanup outside the supported release gate,especially the remaining gsat lexical-special warnings and legacy helper path warnings.
clarifications when useful, but focus on keeping the docs/handbook/status surface accurate rather than broad new README waves.
ij1-ij4 archive family integrity-checkable anddocumented, but treat it as snapshot-specific for now rather than as a required post-M1 integration target. The investigation note for that family lives in ADT-BATCH-INTEGRATION.md. Current recommendation: preserve the bridge probes and the explanation of the maintained csp / qcsp3 noise-model split, but do not require the integrated line to reproduce this family.
output in tests/run.lisp or tests/validate-ao.sh as regression noise to investigate, not normal background.
archive-heavy families now mapped or integrity-checked, avoid widening the supported umbrella casually without a clear post-1.0.0 or intake-review benefit.
maintenance, and intake flow are tighter, begin controlled integration and research-readiness experiments such as alex DFA-option isolation against the validated snapshot.
Hanoi-4 explicitly as a phased lane: for 1.x, keep a clear recordof the situation, artifacts, and any ingested references; for 2.0, pursue actual behavioral/repeatability understanding once the material exists. Seed that future analysis with later Towers of Hanoi encoding literature such as Martins and Lynce (2008), which may help frame hierarchical setup, problem encodings, and repeatability questions more productively than the original 1998 context alone.
Keep the repo on 0.x releases until the thesis-validation baseline is stable enough that a fresh checkout can reproduce the supported historical results and the docs accurately describe that supported path.
0.1.x Stability builds: artifact paths, reproducible plot generation,and baseline environment setup.
0.2.x Verification builds: stronger asserted regression coverage aroundthe thesis-era baselines. This milestone track now culminates in accepted M1.
0.3.x Documentation / research-readiness builds: clearer operator docs,explicit supported workflows, and guarded extension points for new research.
1.0.0 released: phases 1-3 are complete, CI continuously validates thesupported thesis-result baseline, release notes can describe deviations from the thesis as intentional rather than accidental, and deferred lanes like Hanoi-4 are clearly documented rather than silently unresolved.
1.0.1 target: keep the 1.0.0 baseline stable while reducing theremaining STYLE-WARNING noise outside the supported release gate and keeping newly ingested material classified cleanly.
2.0.0 target: the integrated line is stable enough to absorb deeperhistorical/research-readiness questions, including explicit behavioral and repeatability analysis for lanes like Hanoi-4.
Increment the internal build number once per completed roadmap cycle and note the owning phase in the release summary so future work stays tied to the plan.
always be able to regenerate CI summaries and comparison plots from the checked-in ACL and SBCL experiment artifacts.
easier to spot. Treat a quieter load/test log as a reliability feature, not cosmetic cleanup.
confused-queens metric assertions and other low-risk cases where exact behavior can be pinned down.
checks qcsp3 and may29 AO cases 1-3 across the reduction families, retains the legacy test4s/test4a wrappers, and keeps alex's revise baseline in the supported AO line. That bounded AO surface now supports the accepted M1 call without pretending the full historical AO space is already unified.
checks that regenerated SBCL ij2/ij3/ij4 tables preserve the ACL baseline ordering, correlation, and bounded ratio bands; next work should connect the older PrevResults/ff*.ci family once the exact experiment mapping is recovered.
algorithms so future work can build on a clearer map of the code.
repo, especially around CI coverage, warning state, and experiment tooling.
node-type-consis,dfa-rearrangement) in isolated experiments to determine whether they close the known ij4 gap without disturbing the validated baseline path.
baseline snapshot, rerun validation, record deltas against thesis-era results, and only then evaluate new hypotheses or extensions.
compressed archives and keeping watch for any media that could restore the lost QCSP-nov96 terrain code and data, with Lacie1 now recorded as the strongest recovery lead pending review.
historical finds/ as archive intake,not baseline code. The current intake appears to split into: yj-sun/Csp as a likely solver-lineage recovery candidate, yj-sun/Gen++ as a likely upstream analyzer-generation toolchain, and Unravel/ / Refine/ as adjacent program-understanding context that should stay reference-only until a direct thesis-validation role is proven.
first compare historical finds/yj-sun/Csp against the current snapshots and experiment artifacts, then map any unique batch/results material to the thesis-era PrevResults/ff*.ci family, and only after that spend time on broader adjacent-tool recovery.
959dd69 BASE: Original Allegro CL PhD source and publications
b6761e8 Modernize legacy ACL project for SBCL with ASDF build system
a905d9b Modernize qcsp-may29-1996 and qcsp-alex-sep16-1997 for SBCL
ffbeb16 Add test4 runner and fix missing rfn variable in qcsp3
2f37012 Add test4 runners for qcsp-may29-1996 and qcsp-alex-sep16-1997
764e19e Add csp test runner and fix queens arc-consis value
38d181a Add Q-Batch-SBCL experiment infrastructure for SBCL replication
15aadf8 Fix ij4 output paths and add data extraction/comparison pipeline
83f4a54 Add README, FiveAM tests, entry point, and cleanup dead code
78facc4 Add defpackage/in-package to csp/ and qcsp3/ systems
e1b6c18 Fix LENGTH variable bug in bm.lisp and *current-situation typo
3918f1f Remove dead files, backup artifacts, and Mac OS 9 code branches
89552a1 Modernize older snapshots and remove Mac OS 9 dead code
d8b8650 Add FiveAM tests for older snapshots and fix latent bugs
992fb02 Normalize return keywords, fix MPR bugs, muffle redefinition warnings
48d6607 Add ACL vs SBCL comparison plots and seed generator
b8ea6d4 Add renovation docs, expand tests, fix output-file concatenation bug
c780cc5 Re-run ij3 and ij4 experiments fresh with regenerated seeds
afe6666 Add date/time and git version stamp to comparison plots
88da35f Fix alex ADT/memory-search by restoring Quilici data and polymorphic accessors
2427d96 Restore alex noise injection and run batch experiments
80d72c6 Add may29 batch experiments, 4-way comparison plots, and consolidate gitignore
ff95fae Update README and RENOVATION docs with may29 results and .dir audit
f4c4d51 Clean up alex snapshot and recover unify.lisp
0474e79 Update docs to reflect alex cleanup and closed issues
fdd5ceb Replace MvSit2.tar.Z with extracted ADT situation files
09a0d3b Clean up may29 snapshot and fix test4 runner paths
76df23d Clean up qcsp3 snapshot and untrack generated MPR situation data
251fc6f Document alex ij4 TCC divergence root cause (Issue #2)
188e4a6 Add TCC/NCC regression assertions and GitHub Actions CI
afa377f Fix CSP MPR test failure on CI — create MPR-Situation directory
7ff62ff Document DataFind/ archive structure (closes #5)
a0de660 Consolidate all datasets into normalized data/ directory