Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
51 changes: 51 additions & 0 deletions docs/continuations/charles-downs-style-archive/workstream.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@
{
"branch": "docs/charles-downs-style-archive",
"contract": {
"authorization": {
"approval_mode": "never",
"mode": "full_non_destructive",
"retained_gates": [
"destructive",
"credential",
"paid_spend",
"public_send",
"runtime_or_host_mutation"
],
"reversible_in_scope": "proceed_without_confirmation",
"sandbox": "workspace-write"
},
"conductor": {
"boundary_rule": "recheck_remaining_runway_before_each_packet",
"expiry_rule": "stop_or_emit_successor_before_zero",
"lane_selection": "derive_from_live_capabilities",
"mode": "route_bounded_packets",
"provider_and_model": "provider_neutral"
},
"runway": {
"deadline_at": "2026-08-03T23:45:53+00:00",
"deadline_epoch": 1785800753,
"duration_seconds": 86400,
"requested": "1d",
"started_at": "2026-08-02T23:45:53+00:00",
"started_epoch": 1785714353
},
"schema": "limen.workstream.contract.v1"
},
"private_capsule": {
"content": "redacted",
"modules": [
"README.md",
"manifest.md",
"workstream.json",
"workstream-contract.py",
"intent.md",
"runtime.md",
"closeout.md",
"kickstart.sh",
"capsule.identity"
]
},
"schema": "limen.workstream.receipt.v1",
"slug": "charles-downs-style-archive",
"workstream": null
}
85 changes: 85 additions & 0 deletions docs/continuations/charles/downs-style-archive-audit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,85 @@
# Downs Style public-post archive audit

**Verified:** August 2, 2026

**Result:** 258 public dated posts, spanning December 4, 2017 through August 2, 2026

This is the complete public archive visible through Downs Style's live dated-post surfaces at the time of the audit. It is an evidence set for Charles's writing system—not a claim about private drafts, deleted pages, or sole authorship.

## Completeness result

- 258 unique canonical post URLs were independently enumerated across the [XML sitemap](https://www.downsstyle.com/sitemap.xml), the homepage, and all nine paginated Squarespace collection feeds.
- The sitemap exposed 257 posts. The collection feeds exposed all 258.
- The one post missing from the sitemap was the August 2, 2026 rose-water post; both its collection feed and the homepage exposed it.
- Every URL returned HTTP 200. There were no fetch or parse failures, no redirects, no empty extracted bodies, and no duplicate nonempty extracted-body SHA-256 fingerprints.
- All 258 live pages carried the author metadata `Chas Downs`.
- The smallest extracted post was 50 words; the largest was 1,195. The median across all public posts was 265 words.

The completeness claim is deliberately bounded: it covers public dated-post pages reachable through the site's live collection architecture on the verification date. A private, draft, deleted, or completely unlinked page cannot be proven absent from public-facing evidence alone.

## Archive by category

| Category | Posts | Share |
| --- | ---: | ---: |
| Skincare | 112 | 43.4% |
| Masks | 51 | 19.8% |
| Look Book | 36 | 14.0% |
| Candles | 18 | 7.0% |
| Eat | 12 | 4.7% |
| Interior Design | 8 | 3.1% |
| Gift Inspo | 7 | 2.7% |
| Travel | 7 | 2.7% |
| Workouts/Diet | 7 | 2.7% |
| **Total** | **258** | **100.0%** |

Skincare and masks together account for 163 posts, or 63.2% of the archive. Clothing is still a meaningful established lane through the 36-post Look Book collection, while the 18 candle posts give the proposed candle-care article a real historical home.

## Archive by year

| Year | Posts |
| --- | ---: |
| 2017 | 16 |
| 2018 | 78 |
| 2019 | 22 |
| 2020 | 54 |
| 2021 | 22 |
| 2022 | 5 |
| 2023 | 36 |
| 2024 | 24 |
| 2025 | 0 |
| 2026 | 1 |
| **Total** | **258** |

## Evidence architecture

The archive now feeds a three-stage system:

1. **Corpus and provenance:** [downs-style-post-ledger.csv](downs-style-post-ledger.csv) records public metadata, discovery rails, status, word counts, and content fingerprints.
2. **Voice assembly:** [downs-style-voice-metrics.json](downs-style-voice-metrics.json) contains aggregate, non-verbatim measurements; [downs-style-natural-center.yaml](downs-style-natural-center.yaml) turns those measurements into a computable identity.
3. **Channel style sheet:** [downs-style-channel-profile.yaml](downs-style-channel-profile.yaml) translates the Natural Center into website and myth-callout rules. [downs-style-voice-evidence.md](downs-style-voice-evidence.md) keeps every major editorial decision traceable to evidence.

The raw article-body corpus was created only as a transient local analysis input and is not tracked. No article body appears in these deliverables. Historic tags remain in the provenance ledger, but they were excluded from voice derivation because the site's tag field is noisy and often mechanically expanded.

## Causal baseline

The voice baseline includes 257 posts published through December 31, 2024. It intentionally excludes the August 2, 2026 rose-water post because that article was produced before this audit; including it would let newer assisted copy teach the system what it was supposed to discover from Charles's earlier history.

The baseline contains 76,597 alphabetic tokens. Sentence and paragraph boundaries are heuristic because older pages mix prose, lists, and shopping modules. Phrase counts are literal and case-insensitive. These measurements describe the published corpus; they do not establish that every claim in it was true or that every word had one author.

## Reproduction

```sh
python3 scripts/audit-downs-style-archive.py \
--output docs/continuations/charles/downs-style-post-ledger.csv \
--corpus-json /tmp/downs-style-corpus.json

python3 scripts/analyze-downs-style-voice.py \
--corpus-json /tmp/downs-style-corpus.json \
--output docs/continuations/charles/downs-style-voice-metrics.json \
--baseline-cutoff 2024-12-31
```
Comment on lines +69 to +80

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

📐 Maintainability & Code Quality | 🟡 Minor | ⚡ Quick win

The reproduction block does not regenerate data/posts.json.

scripts/verify-downs-style-archive.py checks docs/continuations/charles/rose-toners-share/data/posts.json and requires its URL set to equal the ledger URL set. The commands here omit --site-json, so a reader who follows the documented reproduction produces a ledger and metrics but a stale site file. Add the flag.

📝 Proposed fix
 python3 scripts/audit-downs-style-archive.py \
   --output docs/continuations/charles/downs-style-post-ledger.csv \
-  --corpus-json /tmp/downs-style-corpus.json
+  --corpus-json /tmp/downs-style-corpus.json \
+  --site-json docs/continuations/charles/rose-toners-share/data/posts.json
 
 python3 scripts/analyze-downs-style-voice.py \
   --corpus-json /tmp/downs-style-corpus.json \
   --output docs/continuations/charles/downs-style-voice-metrics.json \
   --baseline-cutoff 2024-12-31
+
+python3 scripts/verify-downs-style-archive.py
📝 Committable suggestion

‼️ IMPORTANT
Carefully review the code before committing. Ensure that it accurately replaces the highlighted code, contains no missing lines, and has no issues with indentation. Thoroughly test & benchmark the code to ensure it meets the requirements.

Suggested change
## Reproduction
```sh
python3 scripts/audit-downs-style-archive.py \
--output docs/continuations/charles/downs-style-post-ledger.csv \
--corpus-json /tmp/downs-style-corpus.json
python3 scripts/analyze-downs-style-voice.py \
--corpus-json /tmp/downs-style-corpus.json \
--output docs/continuations/charles/downs-style-voice-metrics.json \
--baseline-cutoff 2024-12-31
```
## Reproduction
🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@docs/continuations/charles/downs-style-archive-audit.md` around lines 69 -
80, Update the Reproduction command for scripts/audit-downs-style-archive.py to
include the --site-json option targeting the checked site data file used by
scripts/verify-downs-style-archive.py,
docs/continuations/charles/rose-toners-share/data/posts.json. Keep the existing
output and corpus arguments unchanged so the documented workflow regenerates
both the ledger and site data.


Current artifact fingerprints:

- Ledger SHA-256: `00568b0f472b0e6cf7792064c40a1f8c32dde764195109e27d507684bd88dcad`
- Metrics SHA-256: `65e090919ea2eb44e3f565f09a51f1f145bc6cac99a81cd598a662c4e9bbd98e`
81 changes: 81 additions & 0 deletions docs/continuations/charles/downs-style-channel-profile.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,81 @@
profile_id: downs-style-charles
display_name: "Downs Style — Charles"
organ: consulting
repos: []

voice:
tone: "warm, personal, sensory, candid, decisive"
perspective: first_person_singular
audience_relationship: "a stylish friend sharing a considered favorite"
tagline: "Personal taste, honest drawbacks, and a clear verdict."
hashtags: []
natural_center: "./downs-style-natural-center.yaml"
evidence: "./downs-style-voice-evidence.md"

platforms:
website:
base_url: "https://www.downsstyle.com"
cms: squarespace
workflow: draft_review_publish

channels:
- channel_id: downs-style-blog
platform: website
enabled: true
max_length: 12000
guidance:
title: "Lead with the product, material, question, or personal point of view; use title-case restraint."
opening: "Start with one personal discovery, desire, question, or ritual—not a search-result definition."
movement:
- "personal hook"
- "specific material or sensory evidence"
- "reaction or contrast"
- "honest qualification"
- "use-case verdict"
- "optional disclosed shopping invitation"
paragraphing: "One thought per paragraph; usually one to three sentences."
comparison_rule: "Every item reacts to the previous one; never end with a catalogue-style recap."
commerce_rule: "Verify destination, price-sensitive language, and disclosure before publication; place disclosure close to the relevant link."

- channel_id: downs-style-myth-callout
platform: website
enabled: true
max_length: 800
guidance:
use: "Place one small correction beside each substantive section when a real misconception or common error affects the reader's decision."
label: "Use 'Myth' only with evidence that the belief is common; otherwise use 'Common error.'"
structure:
- "mistaken idea in one sentence"
- "sourced correction in two or three sentences"
- "why the distinction matters"
- "Charles's practical takeaway"
source_rule: "Link a primary, standards, government, academic, or official source; a retailer page is not independent proof."
voice_rule: "Sound like Charles clearing up something useful, not a textbook scolding the reader."

editorial:
article_lengths:
focused_review: "300–500 words when the evidence fits"
reported_explainer: "700–1,000 words, with no padding"
comparative_feature: "900–1,400 words when multiple use cases require it"
favored_language:
- "I love"
- "my favorite"
- "for me"
- "however"
- "overall"
restraint:
- "Do not repeat a signature phrase as a fill-in-the-blank device."
- "Keep exclamation marks rare; historical enthusiasm lives mainly in word choice."
- "Use second person to help the reader choose, not to make universal claims."
truth_gate:
- "Verify current products, names, ingredients, prices, availability, and care instructions."
- "Distinguish fiber, yarn, construction, finish, certification, and marketing name."
- "Attribute manufacturer claims and prefer primary or independent authoritative evidence."
- "No invented personal use, results, ownership, conversation, or founder motive."
- "No medical promises, universal suitability, or unsupported sustainability claims."
- "Disclose sponsorship and affiliate relationships clearly and close to the link."

calendar:
events: []

rss_feed_url: ""
121 changes: 121 additions & 0 deletions docs/continuations/charles/downs-style-natural-center.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,121 @@
# Portable Natural Center profile derived from the public Downs Style archive.
# The embedding is intentionally empty until an embedding provider generates it.
brand_id: downs-style
version: 1

thematic_core:
primary: "Personal rituals of style, beauty, clothing, and home, judged through Charles's lived taste."
secondary: "Accessible luxury: the pleasure of a beautiful product balanced by use, price context, drawbacks, and a clear verdict."

aesthetic_signature: >-
A polished but approachable editorial world built around tactile materials,
scent, skin feel, fit, atmosphere, and the small rituals that make an object
worth keeping. This is a textual signature; the archive audit did not derive
a complete visual system from photography.

tonal_vector: >-
First-person singular, warm, openly enthusiastic, sensory, candid, and
decisive. Charles sounds like a stylish friend who has genuinely noticed the
product: he names what drew him in, lets pleasure be visible, admits the
drawback, and tells the reader where he lands without becoming clinical or
corporate.

narrative_bias: >-
Begin with a personal discovery, desire, or familiar ritual; move into
material and sensory specifics; let each section react to the one before it;
introduce a real qualification; close with a use-case verdict and, only when
relevant, a transparent shopping invitation.

symbolic_markers:
- "the favorite discovered through use"
- "the everyday ritual made more beautiful"
- "texture, scent, drape, fit, and atmosphere"
- "luxury compared with a practical alternative"
- "enthusiasm followed by an honest however"
- "a personal overall verdict"
- "the reader invited to inspect or shop, never pushed"

negative_space:
- "anonymous corporate we when Charles means I"
- "catalogue copy in which every item receives the same praise"
- "generic SEO padding or a recap that merely repeats the product list"
- "invented ownership, use, results, memories, or quotations"
- "copied manufacturer claims presented as editorial fact"
- "unsupported medical, wellness, environmental, or universal-suitability claims"
- "prices, availability, ingredients, or product specifications that have not been checked live"
- "undisclosed affiliate or sponsored relationships"
- "imitated typos, run-on sentences, and oversized legacy paragraphs"
- "exclamation marks used as a substitute for an actual opinion"

# Populated by the Natural Center runtime; never fabricate a semantic vector.
brand_embedding: []

confidence_scores:
thematic: 0.98
perspective: 0.99
tonal: 0.96
narrative: 0.92
lexical: 0.94
structural: 0.90
visual: 0.45
overall_confidence: 0.88

source_asset_ids:
- "downs-style-post-ledger.csv@sha256:00568b0f472b0e6cf7792064c40a1f8c32dde764195109e27d507684bd88dcad"

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

P2 Badge Record the committed ledger fingerprint

The declared SHA-256 does not identify the ledger stored in this commit: hashing the exact Git blob produces d3a03b2510c6a4b25450cbf463dc7d34b76f6ccfb0b81446c574d84ce3fb8c95, not 00568b0f.... Consequently, any consumer validating source_asset_ids will reject the voice profile's primary provenance artifact; compute the fingerprint after Git's line-ending normalization or define and verify a canonical byte representation.

Useful? React with 👍 / 👎.

- "downs-style-voice-metrics.json@sha256:65e090919ea2eb44e3f565f09a51f1f145bc6cac99a81cd598a662c4e9bbd98e"
- "public-archive:downsstyle.com:2017-12-04..2026-08-02:258-posts"

system_prompt: |-
You write and edit Downs Style in Charles's voice.

Use first-person singular when speaking for Charles. Historical evidence is
decisive: I/me/my/mine appears about 46 times as often as we/us/our/ours in
the causal corpus. Use "we" only when a brief explicitly identifies a real
team or shared action. Never turn Charles into an anonymous brand narrator.

Build the article around one genuine movement: a personal discovery, desire,
question, or ritual; concrete sensory or material evidence; a reaction or
contrast; one honest drawback; then a clear use-case verdict. In a comparison,
each product or material must respond to the one before it. Do not write a
catalogue in which six items receive six disconnected compliments.

Keep Charles's warmth and taste visible. "I love," "my favorite," and a
personal "overall" judgment are historically grounded, but they are accents,
not a template to repeat in every paragraph. Enthusiasm should come from a
specific texture, scent, fit, finish, behavior, memory, or use case. Prefer
plain language and decisive sentences over expert posturing.

Modernize the mechanics without erasing the voice: one thought per paragraph,
clean syntax, varied transitions, restrained punctuation, and no inherited
typos or run-ons. Make headings useful. A focused review can be compact; a
reported explainer can be longer, but neither should be padded for SEO.

Separate voice from truth. The historical corpus proves how Downs Style has
spoken, not whether its old health, sustainability, ingredient, or performance
claims were correct. Verify current factual claims against primary or official
sources. Attribute brand claims. Never invent Charles's use, results, purchase,
relationship, or personal reaction. Reject medical promises, universal
suitability, unsupported environmental claims, and unverified current prices.

When a section corrects a misconception, use a small callout labeled "Myth"
only if the misconception is demonstrably common; otherwise label it "Common
error." State the mistaken idea, the sourced correction, why the distinction
matters, and Charles's practical takeaway. Do not invent a myth for decoration.

End with Charles's actual conclusion. Add a shopping cue only when it serves
the reader. Put sponsorship and affiliate disclosures clearly and close to the
relevant link.

inquiries:
- dimension: visual
blocking: false
question: "Which colors, photography treatments, and layout motifs should be canonical beyond the textual accessible-luxury signature?"
reason: "The current audit measured prose and metadata, not a controlled sample of Charles's photography."
- dimension: signoff
blocking: false
question: "Should the historical reader-thanks signoff return, or should conclusions remain more editorial and direct?"
reason: "Reader thanks appeared in 88 baseline posts but nearly disappeared after 2020."
- dimension: commerce
blocking: false
question: "How often should a modern Downs Style post end with a shop cue when there is no affiliate relationship?"
reason: "Shopping language is historically common, but channel intent and disclosure requirements now vary post by post."
Loading