Claude Compass

Memories

Memory files live at C:\Users\matt_\.claude\projects\C--Users-matt--OneDrive-Claude\memory\ and are indexed in MEMORY.md. Claude writes and updates these automatically. There are four types: project (ongoing work context), reference (where to find things), user (preferences and background), and feedback (how to behave).
Project NPG Dispute — 18 Sandal Avenue Level: Personal
Key contacts, dates, case facts and outstanding items for Northern Powergrid property access dispute (ENQ23250651)
project_npg_dispute.md

Matthew moved in 2012 (earlier sessions had this as 2022 — this is the correct date).

  • Andy Balding — technical lead — andy.balding@northernpowergrid.com
  • Ben Hardy — complaints handler — ben.hardy@northernpowergrid.com
  • Paul McGinlay — Operations Director — paul.mcginlay@northernpowergrid.com
  • Louise Lowes — Director of Customer Service — louise.lowes@northernpowergrid.com (unverified)
  • Garry Dando — Data Governance — garry.dando@northernpowergrid.com

New contacts: Mark Appleyard (Andy's manager) — mark.appleyard@northernpowergrid.com; Dean Hogarth (OCU DPO) — dpo@ocugroup.com.

Status (4 June 2026): All letters sent. Andy Balding responded to technical letter — did not refuse reinstatement conditions. Meeting agreed in principle with 6 conditions (date after 21 June, Saturday, reinstatement in writing, assessment only, disconnection threat withdrawn, prior letter provided). OCU SAR chased. TPO enquiry sent to Wakefield Council; emergency provisional TPO request to follow 5 June. Key Andy admission: NPG books works first, informs later. All files reorganised to _output\NPG-dispute\.

Feedback No dashes in written text Level: Global
Never use em dashes or hyphens as connectives in written text — they make the writing look AI-generated
feedback_no_dashes_in_text.md

Do not use em dashes or hyphens as connectives in any written text (letters, documents, responses). Use full sentences instead.

Why: It makes writing look AI-generated. Matthew flagged this while reviewing NPG correspondence.

Exception: Hyphens in compound words (e.g. well-established, hand-pointed) are fine.

Reference Claude's Agent Gmail — mattnoodling Level: Global
Dedicated Gmail account for Claude to send personal enquiries and quote requests on Matthew's behalf
reference_agent_gmail.md

mattnoodling@gmail.com — used by the Personal Assistant agent for outbound enquiries: quote requests, tradespeople, bookings, and similar personal tasks. Keeps Matthew's personal addresses out of agent correspondence.

Password stored in the global secrets vault as CLAUDES-GMAIL-PASSWORD.

Feedback SQL Stored Proc Standards Level: Global
Matthew's preferred SQL formatting, merge pattern, and surrogate key approach for Fabric Warehouse stored procedures
feedback_sql-standards.md — full reference at C:\Users\matt_\.claude\sql-standards.md
  • Developer in all proc headers: Matthew Denison, Team: D&A
  • UPDATE then INSERT — never use SQL MERGE statement
  • RowHash computed in staging view, stored in target, compared on join
  • Surrogate keys: SK{TableName}ID — generated via @maxid + ROW_NUMBER() (no IDENTITY in Fabric)
  • DELETE commented out for Dims by default; active for Facts
  • Schemas: target dw, staging STG, procs LOAD
Feedback SQL Reserved Word Aliases Level: Global
Always bracket T-SQL column aliases that are reserved words — RowCount, Count, Name, Value, Key, Type, Date, Status — to avoid syntax errors in Fabric Warehouse
feedback_sql_reserved_words.md (Reapit project) — rule also added to C:\Users\matt_\.claude\sql-standards.md
  • Fabric Warehouse throws Incorrect syntax near the keyword '<alias>' for bare reserved word aliases
  • Always write [RowCount], [Name], [Value] etc. — never unbracketed
  • Applies to ad-hoc queries and UNION ALL count scripts as well as stored procedure SQL
Project Disseminate Website Architecture Level: Disseminate
Azure DevOps repos, Cloudflare hosting stack, and separation of Compass vs main site for disseminate.co.uk
project_disseminate_website.md

The disseminate.co.uk website is split into two repos in the diss-tfs Azure DevOps org, project Disseminate Web Site:

  • disseminate-compass — Claude Compass internal guide site. Source: _claude-guide\. Deployed to compass.disseminate.co.uk via Cloudflare Pages, triggered on push to main. Password protected with Cloudflare Access (one-time PIN to matthew@disseminate.co.uk).
  • disseminate-web — Main disseminate.co.uk website (not yet built). Separate Cloudflare Pages project.

Hosting stack: 123-reg DNS → Cloudflare nameservers → Cloudflare Pages (free tier). Auth via Cloudflare Access (Zero Trust, personal plan).

Why separate repos: Each is an independent app — Compass updates should not trigger a main site deployment. The main site will be public; only Compass needs auth.

Reference Claude Compass Design Reference Level: Disseminate
Colour palette, typography, and style guide for the Compass site (awwwards-inspired, amber accent, near-black sidebar)
reference_compass_design.md

Claude Compass is styled after awwwards.com/jobs — bold, near-monochromatic editorial aesthetic with an amber accent.

  • Sidebar: #111111 near-black
  • Accent: #D4920A amber/gold
  • Background: #F2F2F2, cards white
  • Headings: 52px, weight 900, uppercase, tight letter-spacing
  • Logo bars: amber shades #F5D08A → #E8A020 → #D4920A
  • Shadows: minimal/flat. Border-radius: 6px.
Reference Global CLAUDE.md Symlink Level: Global
The real path for the global CLAUDE.md — always edit the target, not the symlink
reference_global_claudemd.md

~/.claude/CLAUDE.md is a symlink. The real file is C:\Users\matt_\OneDrive\Claude\_global\CLAUDE.md.

Always edit the real path directly — the Edit tool refuses to write through symlinks. The symlink keeps global rules in OneDrive for backup and portability while making them available in Claude's config folder.

Feedback Silver Layer Column Casing (CRL) Level: Project: CRL
Silver LH views are case-sensitive — use exact source casing when referencing columns from Silver views, alias to DW names in #Staged
feedback_silver-casing.md

When selecting from CRL_Silver_LH views, always use the exact column casing from the original LOAD proc (typically all lowercase, e.g. countryname, iso2). Alias to DW PascalCase in the #Staged SELECT. Everything referencing #Staged afterwards uses DW names.

Why: The Silver Lakehouse is case-sensitive. Using PascalCase like [CountryName] directly in a Silver query causes Msg 207 "Invalid column name" at runtime.

How to apply: Find the original Silver→STG LOAD proc and copy column names from its SELECT list exactly. Never infer casing from the DW or STG DDL.

Feedback No mid-task warnings once plan approved Level: Global
Don't add safety/security commentary mid-execution; one warning at planning stage is enough
feedback_plan_approval.md

Once Matthew has approved a plan and execution is underway, proceed without giving additional warnings about actions covered in the plan.

Why: Rule 6 already covers this — plan approval = permission to execute. Mid-task warnings feel like re-asking for permission and slow things down.

How to apply: Give one-time warnings at the planning stage if something is irreversible or risky. Once Matthew says go, execute cleanly without commentary on each step.

Project Jacuzzi J-235 "Huzi" Level: Personal
Purchase details, supplier, and electricity tariff for Matthew's J-235 hot tub
project_jacuzzi.md
  • Model: Jacuzzi J-235 (2021), nickname "Huzi"
  • Purchased from: Outdoor Living — contact for servicing, parts, and warranty
  • Tariff: Intelligent Octopus Go — 6.9p/kWh off-peak (23:30–05:30), 28.5p/kWh peak
  • Setup: Built-in economy/off-peak mode + external timer plug
Project T&T Fabric Medallion — Fee Flash Gold Layer Level: Project: Fabric Medallion
Design decisions and constraints for the Fee Flash Gold layer build in Turner and Townsend's Fabric Medallion project
project_tt_fabric_medallion.md
  • Data retention: 2 years of transactional GL data only — do not load bi.gl_grouped historical rollup (pre-2023 Dufrain-era monthly summaries with degraded dimensionality)
  • Invoiced filter: mainaccountid IN ('600000','600100','603500','619500','600500','601000','600600') AND postingtype <> 14
  • AccDef filter: mainaccountid IN ('602000','602100','602200','602300','602010','602110','600000','600100','600500') AND postingtype = 14
  • Sign convention: All amounts negated (* -1) to match business reporting convention
  • Schema mapping: _output\fee-flash-schema-mapping.xlsx
  • Source model: GL SL PBIP at _context\powerbi\GL SL.SemanticModel\
Feedback Close Fabric notebook after running Level: Project: Fabric Medallion
Matthew closes Fabric notebook tabs after each run so subsequent git syncs land cleanly without being overwritten by Fabric's cached copy of the notebook.
feedback-fabric-git-single-channel.md
  • Symptom: a valid change lands via git sync, then Fabric silently overwrites it with the pre-sync version seconds later (autosave writes the stale in-memory copy back to git)
  • Fix: close the notebook tab after running so Fabric drops its in-memory copy; the next sync then applies cleanly
  • When Claude edits code and pushes: remind Matthew to close the tab in Fabric before "Update from Git", or immediately after his next run
  • Do not suggest avoiding Fabric edits altogether — running notebooks in Fabric is unavoidable in Matthew's workflow
Feedback Gold/Silver config datatype strings Level: Project: Fabric Medallion
Datatype strings in silver_config / gold_config JSON must match the exact keys in nb_0001_functions_gold.getDataType — otherwise createTable throws AssertionError at runtime.
feedback-gold-config-datatypes.md
  • Valid values: string, long, integer (not "int"), float, double, decimal, date, timestamp, boolean
  • Symptom of mismatch: AssertionError "dataType None should be an instance of pyspark.sql.types.DataType"
  • Root cause: getDataType() returns None when the string is not in its switch dict
  • How to avoid: before adding a datatype value, grep nb_0001_functions_gold for getDataType or copy the datatype string from an existing column of the same type
Feedback Project doc back link points to Projects Level: Project: Fabric Medallion
Every project documentation page in _claude-guide\ must have its top back link pointing to projects.html with the relevant customer anchor (e.g. #turner-townsend, #savills), labelled "Back to Projects".
feedback-back-link-to-projects.md
  • Applies to: tt-*.html, reapit-*.html, eufinance-*.html, and any future project docs across all customers
  • Anchor slugs: Savills = #savills, Turner & Townsend = #turner-townsend
  • Why: lands the user on their customer's block instead of the top of the page. projects.html is the canonical hub grouping all project docs
  • Does not apply to: non-project pages (agent pages, home entertainment sub-pages, etc.) which may legitimately link back to their own parent
Feedback Azure DevOps not GitHub (Reapit repo) Level: Project: Reapit
The Reapit repo lives on Azure DevOps (savills-uk.visualstudio.com), not GitHub. Do not use `gh` CLI here.
feedback_azure_devops_not_github.md
  • Check git remote -v before assuming platform tooling
  • Azure DevOps equivalent of gh is az repos, but Matthew prefers UI operations anyway
  • Direct PR URL pattern: savills-uk.visualstudio.com/Savills%20Applications/_git/bi-data-platform-reapit-core/pullrequestcreate?sourceRef=<source>&targetRef=<target>
Feedback No git commands without explicit permission Level: Global
Never run state-changing git operations (commit, push, pull, checkout, merge, rebase, reset, add/stage) without explicit permission from Matthew
feedback_no_git_without_permission.md
  • Read-only commands (git status, git log, git diff, git show) are fine to use freely
  • Exception: git operations directly implied by an agreed task instruction (e.g. "update this folder from branch X")
  • Always ask or confirm before committing, pushing, pulling, or checking out
Feedback PR creation is manual (DevOps UI) Level: Project: Reapit
Matthew creates pull requests himself via the Azure DevOps UI. After pushing a branch, write PR details to a temp file and open in Notepad rather than running a PR-create CLI.
feedback_pr_creation.md
  • Do NOT run gh pr create, az repos pr create, or equivalents
  • Instead: write PR title, description, source/target branches, and a direct DevOps PR-create URL to _temp\cmd-{project}-{timestamp}.txt
  • Open the file in Notepad so Matthew can copy-paste into the DevOps UI
Project PRD Snowflake schema is SAV not SAU Level: Project: Reapit
The Reapit PRD Snowflake account names the SAU source schema AURORA_SAV_RPS_SAV; dev/QA/UAT use AURORA_SAU_RPS_SAU. Any SQL, config, or pipeline parameter targeting PRD must use the SAV name.
project_prd_schema_is_sav.md
  • Discovered 4 Aug 2026: PRD initial load failed with "Schema does not exist or not authorized" — naming difference, not grants
  • Fix: update SchemaName in the PRD CONFIG.Processes from SAU to SAV (PRD only — other environments keep SAU)
  • Fabric Lakehouse schema is LANDING in all environments — unaffected
  • PP schema naming in PRD is unverified — check before the PP PRD load
Project Silver view deployment (Lakehouse) Level: Project: EU Finance
EU Finance silver views live on a Fabric Lakehouse SQL analytics endpoint — deploy via CREATE OR ALTER scripts in a notebook, not direct Warehouse DDL.
eufinance-silver-view-deployment.md

Silver layer is a Fabric Lakehouse (not a Warehouse). Views on the SQL analytics endpoint (EU_FO_Silver_LH.staging.*, EU_FO_Silver_LH.landing.*) require CREATE OR ALTER deployment scripts run against the Lakehouse endpoint.

  • Update the SQL in the relevant notebook (Create or Alter Staging Views.Notebook, Create or Alter Landing Views.Notebook)
  • Run the notebook against the correct workspace (dev / test / prod) to apply the change
  • Do not try to ALTER via a Warehouse connection or Fabric UI — the mechanics differ