Project Copperfin is a clean-room blueprint for a modern successor to Visual FoxPro-style business application development.
Current engineering priority:
- security and speed first
- language choice second
This folder captures the current plan for a new platform that can:
- preserve access to legacy xBase/FoxPro-era data and application assets
- work with modern relational databases such as SQLite, PostgreSQL, SQL Server, and Oracle
- interoperate deeply with the .NET ecosystem and produce .NET-consumable outputs
- provide a modern runtime, designer, reporting stack, and migration path
- add modern security, packaging, deployment, and observability
- avoid direct reuse of FoxPro/VFP branding
Interop maturity:
- Version 1 is anchored on Visual FoxPro 9 compatibility. VFP 6, VFP 7, and VFP 8 assets may work through shared DBF/FPT/CDX/DBC readers, but they are best-effort and untested rather than separate targets. Older Fox Software and xBase-family assets may become wishlist interpretation/inspection targets, but producing binaries for those products is not in the current scope.
- Current .NET support is an early modernization path, not a general managed-runtime surface: the build host can publish a generated C# launcher/stub that the native runtime pipeline starts as a child process, while generated C# transpilation output is only an emitted artifact today.
- Python and broader polyglot support are planning/scaffolding surfaces only; there is no Python runtime hook. These capabilities should stay behind a user-selected modernization target until they are implemented and tested end-to-end.
Requirements Recovery:
- Requirements recovery and bidirectional traceability are a continuing DO-178C-inspired project-quality baseline because Copperfin did not start with a complete requirements set; they are not a deferred pass.
- Recovered requirements must come from real installed VFP9 behavior, shipped Microsoft/VFP documentation, explicit repository-owner product policy, or registered known-bug/crash exceptions. Existing Copperfin code and decompiled VFP binaries are not requirement sources.
- Every behavior-changing slice must identify its governing requirement or a properly evidenced recovery gap and link requirements, constraints, code, tests, results, hazards, and exceptions in both directions. Broader recovery backlog work remains risk- and evidence-prioritized.
Why "Copperfin"?
Coppersignals durable infrastructure, wiring, and business systems.Finsignals navigation, movement, and forward compatibility.- It does not reuse the Fox/FoxPro/VFP brand family.
Important note:
Copperfinis a working codename and branding starter, not a legal clearance opinion.- A formal trademark review should happen before public release, filing, or product launch.
License documents:
LICENSE— operative GNU GPL v3.0-only text plus the Copperfin Application, Runtime, and Toolchain Exception 1.0LICENSE.md— concise current-license overviewSOURCE.md— exact-revision Corresponding Source contractTHIRD_PARTY_NOTICES.md— separately licensed material and required noticesdocs/33-application-runtime-license-exception.md— exception scope, offline evidence, and release-review rationaledocs/34-human-authorship-and-assisted-development.md— human direction, review, provenance, and assisted-development evidencedocs/35-rc1-evaluation-guide.md— private RC artifact verification, test scope, limitations, and feedbackdocs/archive/commercial-licensing-2026/— inactive, preserved commercial/source-available planning documentsSECURITY.mdCONTRIBUTING.md— contribution licensing, provenance, sign-off, testing, and clean-room requirementsCONTRIBUTORS.md— durable contributor-credit policyCODE_OF_CONDUCT.md— participation expectationsSUPPORT.md— public and private support routesGOVERNANCE.md— project roles and decision processagents.mdagent-handoff.mddocs/01-product-charter.mddocs/02-architecture.mddocs/03-compatibility-and-migration.mddocs/04-security-model.mddocs/05-roadmap.mddocs/06-branding.mddocs/07-clean-room-rules.mddocs/08-reference-map.mddocs/09-adr-cpp-first.mddocs/10-dotnet-interop.mddocs/11-engineering-spec-dotnet.mddocs/12-vfp-asset-editing-and-execution.mddocs/13-index-format-notes.mddocs/14-hybrid-studio-and-visual-studio-host.mddocs/15-local-product-archeology.mddocs/16-vfp9-equivalent-subsystems.mddocs/17-modern-designer-direction.mddocs/18-native-security-and-rbac.mddocs/19-polyglot-and-ai-subprojects.mddocs/20-runtime-build-and-debug-pipeline.mddocs/21-database-federation-and-query-translation.mddocs/22-vfp-language-reference-coverage.mddocs/23-vfp-help-and-component-mining.mddocs/23-phase-a-dependency-breakdown.mddocs/24-system-uml.mddocs/25-engine-concurrency-policy.mddocs/26-localization-and-release-readiness.mddocs/27-known-vfp9-bug-exceptions.mddocs/32-recovered-requirements-traceability.mdassets/copperfin-logo.png
Current implementation focus:
- Complete the unfinished MVP workstream tree in
docs/05-roadmap.md, selecting work by evidence, risk, blockers, and user-visible impact. - Finish report/label fidelity, IDE workflows, runtime compatibility, localization, package/debug contracts, security, and platform seams without treating any one workstream as permanently active.
- Validate standalone Studio and Visual Studio through the shared model, stable host contracts, and focused smoke coverage.
- Treat implementation completion of the whole MVP tree as RC readiness; perform release evidence and artifact validation afterward.
- Preserve modernization, .NET interop, portability, and Requirements Recovery as explicit v1 roadmap goals.
Implementation bias:
- native core for performance-sensitive and trust-sensitive subsystems
- optional higher-level companion tooling only when it stays outside the product core
- first-class .NET interoperability and 64-bit support
- selective Rust use is acceptable where it materially improves safety or speed
- first-class ability to open, inspect, edit, and eventually execute legacy VFP assets
Current runnable artifacts:
build\Release\copperfin_inspect.exe- low-level file and index inspection for DBF/VFP asset families
build\Release\copperfin_studio_host.exe- early human-facing Studio host for opening legacy VFP assets and previewing schema/records
- now supports
--jsonsnapshots for Visual Studio designer integration - now supports
--list-subsystemsto inspect the planned VFP 9-equivalent Copperfin subsystem map - now emits a structured
reportLayoutsnapshot forFRX/FRTandLBX/LBTassets with named sections and placed objects - now emits native database-federation metadata for relational, document, and vector connector planning in the shared VS/Studio shells
build\Release\copperfin_build_host.exe- native package/build pipeline entry point for
PJX/PJTprojects - stages project assets, emits runtime and debug manifests, bundles the runtime host, and can publish a generated
.NETlauncher
- native package/build pipeline entry point for
build\Release\copperfin_runtime_host.exe- native runtime/debug launch host for packaged Copperfin applications
- reads
app.cfmanifestand now executesPRGstartup code through a native xBase runtime session - supports real breakpoint and step-debugging actions for
PRGstartup paths - now emits richer debug state including call stack, locals, globals, and runtime events for debugger surfaces in Visual Studio and standalone Studio
- now tracks richer VFP-style compatibility state for work areas, aliases, table cursors, data sessions, SQL pass-through cursors, and OLE automation objects in debug output
- runtime faults now pause on the offending source line and keep the host session alive for continued debugging
- the VSIX now registers a FoxPro text content type for
PRG,H,QPR,MPR, andSPRfiles with project-aware statement completion and first-pass hover help in Visual Studio - now bootstraps runnable
SCX/VCX/MNXstartup behavior through generatedPRGwrappers - now boots runnable
FRX/LBXstartup assets into direct preview/event-loop mode instead of treating them as inert metadata - packaged
SCX/VCXstartup assets now stage their memo sidecars and can launch from packaged content instead of only from source trees - now recognizes
ACTIVATE MENU/ACTIVATE POPUPas real event-loop runtime operations - now supports dispatching runtime actions back into waiting xAssets through
--debug-command select:<action-id>and--debug-command invoke:<action-id> - menu startup assets can now dispatch real menu-item selections while paused in the event loop
- runtime xAsset execution now loads the full backing table instead of only the small Studio preview slice, so deeper menu trees and later records can participate in execution
- form/class/report/label method surfaces now expose dispatchable runtime actions derived from extracted xBase methods
DO FORMnow resolves quoted paths cleanly and launches runnable forms into the event loop instead of treating them like one-shot helper scripts- still reports compatibility-mode launch information for non-runnable xAssets and other startup assets while those runtimes are under construction
vsix\Copperfin.VisualStudio\Copperfin.VisualStudio.csproj- installable Visual Studio extension baseline for VS 2022+
- current output:
vsix\Copperfin.VisualStudio\bin\Release\net472\Copperfin.VisualStudio.vsix - registers a first
Copperfin Visual Designerdocument shell forPJX/SCX/VCX/FRX/LBX/MNX - now provides first-pass FoxPro editor assistance for
PRG/H/QPR/MPR/SPR, including project-aware completion, Quick Info, call signature help, andF12definition navigation for indexed project symbols and assets - current shell shows object/property snapshots sourced from the native Studio host
- current
SCX/SCTandVCX/VCTslices expose flattened VFPPROPERTIESdata for inline object selection, design-surface layout, drag-move, and safe property edits - current
FRX/FRTandLBX/LBTslices now surface named report sections in a more modern Visual Studio-style designer shell, with section-aware layout editing forHPOS/VPOS/WIDTH/HEIGHTplus key expression/font fields - current
MNX/MNTslices support asset-aware property-grid editing for menu metadata - current
PJX/PJTslices now surface a grouped project workspace with project-item grouping, startup/build-plan summary, and project-entry property editing - project workspaces now also surface the platform's native security/RBAC posture and
.NET/Python/MCP extensibility story - project workspaces now include a first integrated debugger pane backed by the native runtime host, with pause reason, call stack, locals, globals, and runtime-event summaries
- project workspaces now include shared
Task List,Code References,Data Explorer,Object Browser,Toolbox,Builders,Coverage, andDatabasepanes so the IDE surface is moving toward classic VFP utility windows instead of only showing a build summary - project workspaces now explicitly surface user-selected AI debugging assistance plus Python/R data-science sidecar guidance inside the modern extensibility story
- project workspaces now expose a native database-federation profile that distinguishes deterministic relational translation from optional AI-assisted document/vector planning
vsix\Copperfin.Studio\Copperfin.Studio.csproj- standalone Windows shell that reuses the same shared report/label/form/menu/project designer controls outside Visual Studio
- now opens multiple assets as tabs so the managed shell feels more like an IDE workspace instead of a single-document dialog
- now shares the same first integrated project debugger pane used by the Visual Studio designer shell
- current output:
vsix\Copperfin.Studio\bin\Release\net472\Copperfin.Studio.exe
vsix\Copperfin.DesignerSmokeTests\Copperfin.DesignerSmokeTests.csproj- automated WinForms smoke tests for the shared designer UI
- current output:
vsix\Copperfin.DesignerSmokeTests\bin\Release\net472\Copperfin.DesignerSmokeTests.exe - exercises synthetic rendering plus real
invoice.frx,cust.lbx, andsolution.pjxassets from the local VFP 9 sample tree - now smoke-tests the shared project debugger, task list, code references, data explorer, object browser, toolbox, builders, coverage, and database surfaces against a real VFP sample project
Quick examples:
E:\Project-Copperfin\build\Release\copperfin_studio_host.exe --from-vs --path "C:\Program Files (x86)\Microsoft Visual FoxPro 9\Wizards\Template\Books\Forms\books.scx"
E:\Project-Copperfin\build\Release\copperfin_studio_host.exe "C:\Program Files (x86)\Microsoft Visual FoxPro 9\Samples\Solution\solution.pjx"
E:\Project-Copperfin\build\Release\copperfin_inspect.exe "E:\DBASE\DBFS\CHNGREAS.NDX"
E:\Project-Copperfin\build\Release\copperfin_build_host.exe build --project "C:\Program Files (x86)\Microsoft Visual FoxPro 9\Samples\Solution\solution.pjx" --output-dir "E:\Project-Copperfin\artifacts\runtime-smoke" --configuration debug --enable-security --emit-dotnet-launcher
E:\Project-Copperfin\scripts\validate-windows.ps1Native CMake validation defaults to two concurrent compile jobs to stay within hosted-runner and ordinary workstation memory limits. POSIX operators can override the local default with COPPERFIN_BUILD_JOBS=4 scripts/validate-posix.sh; the script also bounds each CTest case to 180 seconds. Windows operators can use scripts\validate-windows.ps1 -BuildJobs 4. The ordinary hosted validation workflows retain the two-job cap unless measured runner capacity supports a deliberate increase. Manual Windows Deep Validation exposes bounded two- and three-job trial choices; its JSON artifact and GitHub summary report per-phase duration plus sampled runner CPU and memory headroom, and do not authorize changing the default by themselves.
GitHub validation:
.github/workflows/native-validation-linux.yml,.github/workflows/native-validation-macos.yml, and.github/workflows/native-validation-windows.ymlprovide independently dispatchable platform checks. All three call.github/actions/native-validation/action.yml, which keeps configure, bounded compilation, and the full CTest suite in one platform job while preserving the stable platform check names. The native suite uses two CTest workers on all platforms; CTestRUN_SERIALand resource-lock properties continue to serialize unsafe tests..github/workflows/managed-ui-validation-linux.ymlruns the shared managed UI smoke harness on Linux with Mono and Xvfb, includes display-free test discovery, and uploads selector logs as portable evidence. macOS remains runnable locally through the same harness with an existing XQuartz display; hosted Visual Studio, Win32, installer, and VFP9 behavior remain Windows-only gates.- Release readiness requires successful
Linux GCC,macOS Clang, andWindows MSVCchecks. Manual.github/workflows/native-release-readiness.ymlruns all three shared contracts and exposes a final dependent gate. Native validation does not publish or reuse CMake build trees between jobs or workflow runs. .github/workflows/build-installers.ymlremains focused on packaging standalone installer artifacts and intentionally builds with tests disabled..github/workflows/windows-deep-validation.ymlis manual dispatch only and runs a deeper Windows hosted build across native tests, VSIX, standalone Studio, and designer smoke test binaries.scripts/measure-windows-validation.ps1records configure, native compile/test, and managed compile/test evidence underartifacts/windows-deep-validation-metrics; those JSON files are uploaded even when a measured phase fails..github/workflows/windows-msvc-cache-evaluation.ymlis a manual, non-authoritative repeat-build experiment. It pins the sccache action and binary, uses Ninja/MSVC with/Z7, namespaces compiler intermediates by the relevant toolchain and build inputs, exercises source/generated-header/flag/configuration/architecture/compiler invalidation plus malformed-entry fallback, and still runs the complete warm CTest inventory. Hosted run29503180834reduced native compilation from2069.669to237.902seconds (88.51%) with a98.93%warm-hit ratio and passed all281tests. GitHub documents that cache contents are not signed or otherwise verified, so required validation, deep validation, release readiness, installers, and VSIX builds remain cache-free; a warm-cache result must never substitute for an authoritative build or test result.- Windows hosted measurements keep the ordinary native build at two jobs: three-job trials were memory-safe but did not materially reduce cold compile time. Macro-independent test support and exact matching compile-definition groups are reusable object targets in
tests/CMakeLists.txt; configure-time guards require each documented consumer to retain the expected source. Keep semantically distinct macro variants separate.
Portable shared-UI validation:
scripts/run-designer-smoke-portable.shis the canonical non-Windows entry point for the shared managed WinForms surface. It buildsCopperfin.DesignerSmokeTestswithEnableWindowsTargeting=true, runs test selectors through Mono, and uses Xvfb on Linux or an existing XQuartz/X display on macOS.--list-testsworks without a display;--display-mode offscreenis intentionally limited to test discovery because this target needs a display for actual WinForms initialization.scripts/run-designer-smoke-headless.shremains a strict Xvfb wrapper for unattended Linux jobs and compatibility with existing automation. Portable smoke evidence covers shared managed controls and shell behavior. Live Visual Studio docking/theme behavior, Win32 rendering, installer validation, and hosted VFP9 behavior remain Windows-only evidence.
Current MVP scope:
- open
PJX/PJT,SCX/SCT,VCX/VCT,FRX/FRT,LBX/LBT,MNX/MNT,DBF/FPT,CDX/DCX,IDX,NDX, andMDX - inspect headers and companion files
- preview DBF-style schema and a small number of records
- decode memo-backed preview values for synthetic and many real sidecar-backed assets
Known limitation:
- memo-heavy real-world designer files still need deeper VFP-specific decoding and presentation polish before they feel like a true visual designer
- the Visual Studio extension and standalone Studio now provide a shared project debugger pane on top of the native runtime/debug host, but they still do not provide full VFP 9-style design fidelity or the full FoxPro/VFP runtime surface
- packaged runtime output is now good enough to launch runnable
SCX/VCX/MNX/FRX/LBXstartup assets from staged package content, but deeper event/lifecycle fidelity still needs work - runtime action dispatch now covers menu selection and extracted method invocation, but higher-fidelity form/report object lifecycle, richer UI event simulation, and broader runtime semantics still need work
- runtime execution no longer truncates to the Studio preview record limit, which improves parity for deeper
MNXsubmenu trees and other larger xAssets - the new standalone Studio shell shares the same editor stack, but it is still an early shell rather than the finished full-fidelity Copperfin IDE
- the standalone Studio shell now supports tabbed multi-document editing, but it still needs richer IDE chrome and workflow parity before it feels like the full VFP 9 experience
- the new project utility panes are strong parity progress, but they are still summary-driven surfaces rather than the full interactive VFP 9 Project Manager, Data Explorer, Object Browser, Coverage, and builder ecosystem
Project Copperfin is free software licensed under the GNU General Public
License, version 3 only (GPL-3.0-only) with the Copperfin Application,
Runtime, and Toolchain Exception 1.0. See LICENSE for the
complete operative terms and LICENSE.md for the plain-language
boundary.
Independent applications remain under their owners' chosen terms—including proprietary terms—when Copperfin inspects, edits, runs, interprets, analyzes, transforms, modernizes, generates, compiles, assembles, links, packages, tests, debugs, deploys, hosts, maintains, or supports them. The exception covers static and dynamic linking, in-process and separate-process execution, documented interfaces, distributable Copperfin runtime components, and ordinary generated launchers, scaffolds, support code, and package material. The GPL continues to cover Copperfin itself and modifications derived from Copperfin source code; GPL obligations for those Copperfin portions do not extend into an independent application merely because of these permitted uses or combinations.
Contributors retain copyright in their contributions and receive durable
credit through Git authorship/co-authorship, pull requests, issues, and
GitHub's contributor history. Contributions are submitted under the same
GPL-3.0-only-with-exception terms; no copyright assignment is required. See
CONTRIBUTING.md and CONTRIBUTORS.md.
The earlier source-available/commercial model is inactive. Its documentation and implementation are preserved for possible future reconsideration, but normal builds ignore product license files, product-license environment configuration, and entitlement signer registries. See the inactive archive.
Release artifacts and launcher inventories remain cryptographically signed. Those signatures establish provenance and integrity; they are not product activation and do not alter the GPL terms.