mirror of
https://github.com/ZuneDev/ZuneShell.dll.git
synced 2026-07-27 13:11:51 -07:00
[WIP] Check in Claude's initial instructions
This commit is contained in:
@@ -0,0 +1,76 @@
|
||||
# CLAUDE.md
|
||||
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
## What this project is
|
||||
|
||||
`ZuneDBApi` is one project inside the larger `ZuneShell.dll` solution (root: `..`), which is a clean-room
|
||||
reimplementation of the original Microsoft Zune desktop software. The dependency chain is:
|
||||
|
||||
```
|
||||
ZuneDBApi (this project) → ZuneImpl → ZuneShell → ZuneHost / ZuneHost.Wpf (entry points)
|
||||
```
|
||||
|
||||
ZuneDBApi is the lowest layer: it re-creates the public API surface of the original closed-source
|
||||
`Microsoft.Zune.*` / `MicrosoftZuneInterop` / `MicrosoftZuneLibrary` assemblies that shipped with the real
|
||||
Zune software, so the rest of the stack (`ZuneImpl`, `ZuneShell`) can compile and run against a familiar API
|
||||
without bundling Microsoft's original binaries or decompiled source.
|
||||
|
||||
Namespace-to-folder mapping is strict and should be preserved when adding files:
|
||||
- `Microsoft.Zune.Configuration` → `Microsoft.Zune/Configuration/`
|
||||
- `Microsoft.Zune.Service` → `Microsoft.Zune/Service/`
|
||||
- `Microsoft.Zune.ErrorMapperApi` → `Microsoft.Zune/ErrorMapperApi/`
|
||||
- `Microsoft.Zune.Util` → `Microsoft.Zune/Util/`
|
||||
- `MicrosoftZuneInterop` → `MicrosoftZuneInterop/`
|
||||
- `MicrosoftZuneLibrary` → `MicrosoftZuneLibrary/`
|
||||
- `ZuneUI` (HRESULT, attributes) → `ZuneUI/`
|
||||
|
||||
## Critical constraint: no decompiled code
|
||||
|
||||
A prior commit (`d0fd93a`, "Added raw ZuneDBApi decomp") added a raw decompilation of the original Microsoft
|
||||
assembly and was immediately reverted (`749a29a`) — verbatim decompiled Microsoft code must not be checked in.
|
||||
Instead, classes here are **clean-room stubs**: same public type/method/property signatures as the original
|
||||
(so dependent code compiles and links correctly), but with placeholder or minimal real bodies, not copied
|
||||
Microsoft implementation logic. The `mcp__ilspy__*` tools (already allowlisted in `.claude/settings.local.json`)
|
||||
are for inspecting the *shape* of the original assembly (type/member lists, signatures) to match the API
|
||||
surface — not for pulling decompiled method bodies into source files.
|
||||
|
||||
Two stub styles coexist in this codebase, both legitimate:
|
||||
- **Pure no-op stub** — method sets `out` params to defaults and returns `HRESULT._S_OK` (e.g.
|
||||
`Microsoft.Zune/Service/AccountManagement.cs`).
|
||||
- **Real working logic** — e.g. `Microsoft.Zune/Configuration/*Configuration.cs` classes are genuinely
|
||||
backed by `RegistryHive`/`CConfigurationManagedBase` with real default values, and `ZuneUI/HRESULT.cs` is a
|
||||
fully real HRESULT struct with the actual Zune error codes.
|
||||
|
||||
When a stub needs to represent an unmanaged COM pointer the original held (e.g. `IPlaylist*`, `IQueryPropertyBag*`),
|
||||
do **not** invent raw C-style pointer types or C++-style destructor syntax (`~Foo()` as an ordinary method, or
|
||||
`!Foo()`) — neither compiles in C#. Use `IntPtr`/`SafeHandle`-style fields and a normal `IDisposable` pattern
|
||||
(`protected virtual void Dispose(bool disposing)` + `~Foo()` as an actual finalizer) instead, matching the
|
||||
pattern already used in `Microsoft.Zune/Configuration/CConfigurationManagedBase.cs`.
|
||||
|
||||
## Build
|
||||
|
||||
```bash
|
||||
# From repo root or this directory — build just this project:
|
||||
dotnet build ZuneDBApi/ZuneDBApi.csproj
|
||||
|
||||
# Build the whole solution (Windows-only platforms exist in ZuneShell.sln; on Linux only net8.0 TFMs build):
|
||||
dotnet build ZuneShell.sln
|
||||
```
|
||||
|
||||
`Directory.Build.props` (repo root) sets `TargetFrameworks` to `net8.0` everywhere, adding `net472` and
|
||||
`net8.0-windows` automatically when building on Windows. There is no test project for ZuneDBApi or the
|
||||
solution as a whole.
|
||||
|
||||
Note: building currently fails on files containing invalid C++-style syntax (see constraint above) —
|
||||
running a build will surface any remaining instances; treat new ones the same way (fix to valid C#, do not
|
||||
silently work around them).
|
||||
|
||||
## Working in this project
|
||||
|
||||
- `Nullable` and `ImplicitUsings` are enabled; `AllowUnsafeBlocks` is true (file-scoped namespaces are fine).
|
||||
- This project only references `UIX.csproj` (from the `MicrosoftIris`/`ZuneUIXTools` submodule) — keep it free
|
||||
of dependencies on `ZuneImpl`/`ZuneShell` to avoid circular references, since those layers depend on it.
|
||||
- `Microsoft.Win32.RegistryHive`/`Registry*` APIs used by the `Configuration` classes are Windows-only; this
|
||||
is expected since the original Zune client was Windows-only, but keep cross-platform buildability in mind
|
||||
for the `net8.0` (non-`-windows`) TFM — avoid adding new Windows-only APIs outside what's already used.
|
||||
Reference in New Issue
Block a user