WritersLogic Namespace v1
1. Overview
This namespace defines the complete vocabulary for the WritersLogic authorship verification system,
unifying three concerns under a single context:
- C2PA Custom Assertions C2PA -- Five
com.writerslogic.* assertions embedded in C2PA manifests for authorship provenance of text documents.
- Verifiable Credentials VC -- W3C VC 2.0 types for expressing attestation results as portable, independently verifiable credentials.
- Forensic Report Ontology FORENSIC -- Structured data for authorship examination reports, extending W3C PROV-O.
2. C2PA Custom Assertions C2PA
Five custom assertions under the com.writerslogic.* namespace (per C2PA §12.5 reverse-domain naming).
Each is independently verifiable via the C2PA claim signature. Third-party C2PA verifiers validate the manifest
signature and hash binding; our verifier interprets the custom assertion payloads.
| Assertion Label | Format | Purpose | Schema |
com.writerslogic.process-proof |
CBOR |
Top-level verdict and trust vector (the "what") |
JSON Schema |
com.writerslogic.keystroke-cadence |
CBOR |
Typing timing fingerprint (the "how fast") |
JSON Schema |
com.writerslogic.cognitive-markers |
CBOR |
Behavioral analysis dimensions (the "how human") |
JSON Schema |
com.writerslogic.evidence-chain |
CBOR |
Checkpoint seals and temporal proof (the "when") |
JSON Schema |
com.writerslogic.verifiable-credential |
JSON |
Embedded W3C VC 2.0 with Data Integrity proof (the "who says so") |
JSON Schema |
Tier Mapping
| Tier | Assertions Included |
| Free (Export to Publisher) |
process-proof + evidence-chain + verifiable-credential + standard C2PA |
| Pro (Evidence Bundle) |
All 5 custom assertions + standard C2PA + optional embedded evidence packet |
Standard C2PA Assertions (also present)
| Assertion | Purpose |
c2pa.hash.data | Document binding (content hash) |
c2pa.actions.v2 | Created action metadata |
c2pa.metadata | Title, format (optional) |
2.1 com.writerslogic.process-proof v2
Top-level verdict and trust assessment. This is what a verifier reads first to determine authorship confidence.
| Field | Type | Required | Description |
version | integer (const 2) | Yes | Schema version |
evidenceId | string | Yes | Hex-encoded 16-byte evidence packet UUID. Pattern: ^[0-9a-f]{32}$ |
evidenceHash | string | Yes | SHA-256 hex digest of the original evidence packet bytes. Pattern: ^[0-9a-f]{64}$ |
verdict | string enum | No | human-authored, mixed-input, transcriptive, insufficient |
assessmentScore | number [0,1] | No | Composite human-likeness score where 1.0 = strongly cognitive |
riskLevel | string enum | No | low, medium, high, insufficient |
writingMode | string enum | No | cognitive, transcriptive, mixed, insufficient |
compositionMode | string|null | No | direct-composition, ai-mediated, mixed, or null |
attestationTier | integer | No | 1=software-only, 2=enhanced (typing analysis), 3=hardware (Secure Enclave/TPM) |
signalScores | object | No | Per-dimension composite scores (see below) |
forgeryDifficulty | number [0,1] | No | Estimated adversary effort to forge this evidence profile |
transcriptionSuspicious | boolean | No | True when correction ratio >15% or error ecology <0.3 |
aiFluencyFlag | boolean | No | True when word-trigram perplexity below AI threshold |
analysisCompleteness | integer [0,18] | No | Successfully completed analysis modules (out of 18) |
processStart | date-time | No | RFC 3339 timestamp of first checkpoint |
processEnd | date-time | No | RFC 3339 timestamp of last checkpoint |
signalScores sub-fields
| Field | Type | Description |
cognitiveLoad | number [0,1] | IKI-surprisal entanglement (Spearman rho between keystroke timing and word surprisal) |
revisionTopology | number [0,1] | DAG non-linearity of edit positions (branching, revisit depth, frontier distance) |
errorEcology | number [0,1] | Motor vs. visual error distribution (JSD from cognitive reference) |
likelihoodModel | number [0,1] | Bayesian P(cognitive) from per-window log-likelihood ratio model |
compositionMode | number [0,1] | Pure composition vs. AI-mediated authoring score |
2.2 com.writerslogic.keystroke-cadence v1
Typing timing fingerprint enabling independent cadence verification.
| Field | Type | Required | Description |
version | integer (const 1) | Yes | Schema version |
keystrokeCount | integer | Yes | Total keystrokes captured |
sessionDurationSec | number | Yes | Total session duration in seconds |
timing | object | Yes | IKI statistics (see below) |
dwell | object | Yes | Key hold and flight time metrics |
corrections | object | Yes | Correction behavior metrics |
fatigue | object|null | No | Fatigue detection: phase (0=warmup, 1=plateau, 2=fatigue) and trajectory residual |
spectral | object|null | No | FFT PSD analysis: slope and noise type (white/pink/brown) |
hurstExponent | number|null | No | Fractal dimension. Human 0.6-0.8, random 0.5 |
biologicalCadenceScore | number|null [0,1] | No | Keystroke steadiness composite |
timing sub-fields
| Field | Type | Description |
meanIkiMs | number | Mean inter-keystroke interval in milliseconds |
medianIkiMs | number | Median IKI in milliseconds |
coefficientOfVariation | number | IKI std/mean. Below 0.15 = robotic |
ikiPercentiles | array[5] | [p10, p25, p50, p75, p90] in milliseconds |
burstCount | integer | Fast typing bursts (IKI below pause threshold) |
avgBurstLength | number | Mean keystrokes per burst |
pauseCount | integer | Pauses exceeding 2 seconds |
avgPauseDurationMs | number | Mean pause duration in milliseconds |
pauseDepthDistribution | array[3] | Fraction of pauses: [sentence 1-3s, paragraph 3-10s, deep 10s+] |
dwell sub-fields
| Field | Type | Description |
meanDwellMs | number | Mean key hold duration (keyDown-keyUp) in ms |
dwellCv | number | CV of dwell times. Human >0.2, robotic <0.1 |
meanFlightMs | number | Mean release-to-press gap in ms |
flightCv | number | CV of flight times. Human >0.3 |
corrections sub-fields
| Field | Type | Description |
correctionRatio | number [0,1] | Backspace/delete fraction. Cognitive >0.05 |
crossHandTimingRatio | number | Cross-hand vs same-hand IKI std dev ratio. Cognitive >1.3 |
postPauseCv | number | CV of first 5 keystrokes after each pause. Cognitive >0.25 |
ikiAutocorrelation | number | Lag-1 autocorrelation. Cognitive -0.1 to 0.2, transcriptive >0.3 |
2.3 com.writerslogic.cognitive-markers v1
Deep behavioral analysis dimensions. The evidence that typing was cognitive, not mechanical.
| Field | Type | Required | Description |
version | integer (const 1) | Yes | Schema version |
cognitiveLoad | object|null | No | IKI-surprisal entanglement analysis |
revisionTopology | object|null | No | DAG structure of edit positions and revision classification |
errorEcology | object|null | No | Motor vs. visual/bulk error distribution |
likelihoodModel | object|null | No | Per-window Bayesian classification |
focus | object|null | No | Window focus-switching patterns |
editMetrics | object|null | No | Edit position distribution and entropy |
cognitiveLoad sub-fields (required: ikiSurprisalRho, sentenceArcRSquared, structuralPauseConcentration, compositeScore)
| Field | Type | Description |
ikiSurprisalRho | number | Spearman rho between IKI and word surprisal. Cognitive 0.3-0.6, transcriptive ~0 |
sentenceArcRSquared | number | Quadratic fit R-squared to per-sentence velocity. Cognitive >0.3 |
structuralPauseConcentration | number | Gaussian proximity of deep pauses to boundaries. Cognitive >0.6 |
compositeScore | number [0,1] | Composite cognitive load score |
deepPauseCount | integer | Pauses exceeding 3 seconds |
boundaryCount | integer | Sentence/paragraph boundaries detected |
wordCount | integer | Total words analyzed |
revisionTopology sub-fields (required: detourRatio, leadingEdgeDivergence, insertionPointEntropy, compositeScore)
| Field | Type | Description |
meanBranchingFactor | number | Edit targets per source position. Cognitive >2, transcriptive ~1 |
meanRevisitDepth | number | Edits per active region. Cognitive 2-4 |
meanFrontierDistance | number | Fraction behind max cursor. Cognitive 0.3-0.6, transcriptive <0.05 |
detourRatio | number | Non-sequential jumps / total chars. Transcription ~0, composition 0.3-1.5+ |
leadingEdgeDivergence | number | Edits behind frontier. Transcription ~0%, composition 15-40% |
insertionPointEntropy | number | Shannon entropy of behind-edge insertions. Transcription <1.5, composition 2.5-4.0 |
revisionTypes | object | Breakdown: subWordMotorPct, wordSubstitutionPct, clauseRestructuringPct, positionalInsertionPct, totalRevisions |
compositeScore | number [0,1] | Composite revision topology score |
errorEcology sub-fields (required: jsdFromCognitive, jsdFromTranscriptive, compositeScore)
| Field | Type | Description |
rapidSelfCorrectionPct | number | Delete 1-3 chars within 500ms. Cognitive ref: 0.35 |
immediateSmallCorrectionPct | number | Delete 1-3 chars within 1s. Cognitive ref: 0.30 |
delayedCorrectionPct | number | Delete after >2s delay. Transcriptive ref: 0.35 |
bulkCorrectionPct | number | Delete 5+ consecutive chars. Transcriptive ref: 0.30 |
falseStartPct | number | Type 2-4 chars then delete/retype. Cognitive ref: 0.20 |
jsdFromCognitive | number | JSD from cognitive reference. Lower = more cognitive |
jsdFromTranscriptive | number | JSD from transcriptive reference. Lower = more transcriptive |
compositeScore | number [0,1] | Composite error ecology score |
likelihoodModel sub-fields (required: sessionPCognitive, windowCount, compositeScore)
| Field | Type | Description |
sessionLlr | number | Sum of per-window LLRs. Positive = cognitive |
sessionPCognitive | number [0,1] | Sigmoid(mean LLR) posterior probability |
windowCount | integer | Number of 200-sample sliding windows analyzed |
cognitiveWindowCount | integer | Windows with LLR > 0 |
transcriptiveWindowCount | integer | Windows with LLR < 0 |
meanWindowLlr | number | Mean per-window LLR |
llrStdDev | number | Std dev of window LLRs. Higher = mixed session |
compositeScore | number [0,1] | Composite likelihood model score |
focus sub-fields
| Field | Type | Description |
switchCount | integer | Total window focus transitions |
outOfFocusRatio | number [0,1] | Fraction of time with document unfocused |
aiAppSwitchCount | integer | Switches to known AI/browser apps |
midTypingSwitchRatio | number | Switches within 2s of keystroke. Cognitive >0.5 |
editMetrics sub-fields
| Field | Type | Description |
monotonicAppendRatio | number [0,1] | Edits at >95% position. High = append-only (suspicious) |
editEntropy | number | Shannon entropy of 20-bin edit position histogram |
timingEntropy | number | Shannon entropy of IKIs. Threshold: 3.0 bits |
pauseEntropy | number | Shannon entropy of pause durations. Threshold: 2.0 bits |
positiveNegativeRatio | number [0,1] | Insertions / (insertions + deletions) |
deletionClustering | number | Nearest-neighbor distance ratio. Below 1 = clustered |
2.4 com.writerslogic.evidence-chain v1
Temporal proof chain with per-checkpoint cryptographic seals.
| Field | Type | Required | Description |
version | integer (const 1) | Yes | Schema version |
checkpointCount | integer | Yes | Number of checkpoints in the evidence chain |
chainDurationSec | number | Yes | Wall-clock seconds between first and last checkpoint |
seals | array | Yes | Ordered per-checkpoint seals (see below) |
sessionStats | object|null | No | Aggregate session statistics |
seals[] item fields
| Field | Type | Description |
sequence | integer | Monotonic checkpoint ordinal |
timestamp | integer | Unix timestamp in milliseconds (UTC) |
sealHash | string | SHA-256 hex digest (commits to content hash, jitter binding, chain predecessor). Pattern: ^[0-9a-f]{64}$ |
sessionStats sub-fields
| Field | Type | Description |
sessionCount | integer | Editing sessions (gaps >30 min separate sessions) |
avgSessionDurationSec | number | Mean session duration |
totalEditingTimeSec | number | Cumulative active editing duration |
timeSpanSec | number | Wall-clock span first to last event |
2.5 com.writerslogic.verifiable-credential VC
Embeds a complete W3C Verifiable Credential 2.0 document with a Data Integrity proof
(cryptosuite: eddsa-jcs-2022). This is the only assertion encoded as JSON rather
than CBOR, because the Data Integrity proof requires JCS canonicalization.
The VC envelope follows the standard W3C VC 2.0 structure. The schema below defines the
credentialSubject containing the WritersProof-specific ProcessAttestation.
| Field | Type | Required | Description |
id | URI | Yes | Subject DID (author identity) |
type | string (const "ProcessAttestation") | Yes | Subject type |
processAttestation | object | Yes | Attestation claims (see below) |
processAttestation sub-fields (required: status)
| Field | Type | Description |
status | string enum | human-authored, mixed-input, transcriptive, insufficient |
trustVector | object | EAR trust vector components (hardware, instance, executables) |
documentRef | string | SHA-256 hex hash of the attested document |
chainDuration | number | Evidence chain duration in seconds |
attestationTier | integer | 1, 2, or 3 |
writingMode | string | Detected writing mode |
compositionMode | string | Composition mode classification |
forensicSignals | object | 15-field forensic enrichment from 5 analysis dimensions |
3. CBOR Encoding Notes
All C2PA assertions except verifiable-credential are encoded as CBOR (per C2PA 2.4 §8.4.2).
- Map keys: Text strings (CBOR major type 3) in camelCase. The JSON Schemas define the logical structure; the wire encoding uses the same key names as CBOR text string keys.
- Numeric values: Integers use CBOR major types 0/1. Floating-point values use CBOR major type 7 (IEEE 754 float64).
- Null values: CBOR simple value 22 (
0xf6). Fields typed as ["object", "null"] or ["number", "null"] may be null when the analysis module did not produce results.
- Byte strings: Hex-encoded strings in JSON schemas correspond to CBOR byte strings (major type 2) in the wire format.
- Exception:
verifiable-credential uses JSON encoding (CBOR major type 3 text string containing the serialized JSON document) because Data Integrity proofs require JCS canonicalization over the JSON representation.
4. Interpretation Guidelines
Score Ranges
All composite scores use the range [0.0, 1.0] where higher values indicate stronger cognitive (human-authored) signals.
| Score Range | Interpretation | Typical Verdict |
| 0.80 - 1.00 | Strong cognitive signal across multiple dimensions | human-authored |
| 0.60 - 0.79 | Moderate cognitive signal; some dimensions may be weak | human-authored or mixed-input |
| 0.40 - 0.59 | Ambiguous; mixed signals across dimensions | mixed-input |
| 0.20 - 0.39 | Weak cognitive signal; transcriptive patterns dominant | transcriptive |
| 0.00 - 0.19 | Minimal cognitive signal; likely mechanical input | transcriptive |
Reference Values for Key Discriminators
| Metric | Cognitive (Human) | Transcriptive (Copied) | What It Means |
| IKI CV | >0.15 | <0.15 | Keystroke timing variability; low CV = robotic regularity |
| Hurst exponent | 0.6-0.8 | ~0.5 | Long-range timing dependence; 0.5 = random (no memory) |
| Spectral slope | ~-1.0 (pink) | ~0 (white) | Frequency spectrum of timing; pink noise = biological motor control |
| Dwell CV | >0.2 | <0.1 | Key hold duration variability |
| Correction ratio | >0.05 | <0.03 | Humans make and fix more errors during composition |
| Detour ratio | 0.3-1.5+ | ~0 | Non-sequential editing; composition jumps around |
| Leading edge divergence | 15-40% | ~0% | Edits behind the cursor frontier |
| Insertion point entropy | 2.5-4.0 bits | <1.5 bits | Edit position diversity |
| IKI-surprisal rho | 0.3-0.6 | ~0 | Typing slows on harder words (thinking signal) |
Attestation Tiers
| Tier | Name | Description |
| 1 | Software-only | Standard software signing. Timestamps from system clock. Baseline entropy from typing data only. |
| 2 | Enhanced | Typing-derived behavioral entropy binding. Jitter seals at each checkpoint. Dwell/flight cadence analysis. |
| 3 | Hardware-bound | Secure Enclave (macOS) or TPM (Windows/Linux) key storage. Hardware-attested device identity. Tamper-resistant key material. |
Risk Levels
| Level | Assessment Score | Meaning |
low | ≥ 0.7 | High confidence in cognitive authorship |
medium | 0.4 - 0.7 | Some signals present but not conclusive |
high | < 0.4 | Weak cognitive signal; evidence may be mechanical or forged |
insufficient | N/A | Not enough data to assess (e.g., <100 keystrokes) |
5. Verifiable Credential Types VC
| Term | URI | Description |
ProcessAttestationCredential | wlp:ProcessAttestationCredential | A VC whose subject is a PoP Attestation Result. Issued by a Verifier. |
AuthorshipCredential | wlp:AuthorshipCredential | A VC asserting authorship claims backed by PoP evidence. |
AuthorshipClaim | wlp:AuthorshipClaim | A credentialSubject type for authorship assertions. |
ProcessAttestation | wlp:ProcessAttestation | A credentialSubject type for process attestation results. |
PopAttestationResult | wlp:PopAttestationResult | An evidence type referencing a PoP Attestation Result (.cwar). |
PopEvidencePacket | wlp:PopEvidencePacket | An evidence type referencing a PoP Evidence Packet (.cpop). |
VC Usage Example
{
"@context": [
"https://www.w3.org/ns/credentials/v2",
"https://writerslogic.com/ns/v1/context.jsonld"
],
"type": ["VerifiableCredential", "ProcessAttestationCredential"],
"issuer": "did:web:api.writersproof.com",
"validFrom": "2026-05-27T00:00:00Z",
"credentialSubject": {
"id": "did:key:z6Mk...",
"type": "ProcessAttestation",
"processAttestation": {
"status": "human-authored",
"attestationTier": 2,
"documentRef": "a3f8d2e1...",
"chainDuration": 9000,
"writingMode": "cognitive",
"compositionMode": "direct-composition",
"forensicSignals": {
"cognitiveLoadScore": 0.74,
"revisionTopologyScore": 0.81,
"errorEcologyScore": 0.69,
"likelihoodPCognitive": 0.77,
"compositionModeScore": 0.85,
"detourRatio": 0.42,
"leadingEdgeDivergence": 0.28,
"insertionPointEntropy": 3.1
}
}
},
"evidence": [{
"type": "PopAttestationResult",
"verifier": "did:web:api.writersproof.com",
"attestationResult": "urn:cpop:war:abc123",
"digestSRI": "sha256-base64encodedhash...",
"mediaType": "application/cwar+cbor"
}],
"proof": {
"type": "DataIntegrityProof",
"cryptosuite": "eddsa-jcs-2022",
"verificationMethod": "did:web:api.writersproof.com#key-1",
"proofPurpose": "assertionMethod",
"created": "2026-05-27T00:00:00Z",
"proofValue": "z..."
}
}
6. Forensic Report Ontology FORENSIC
Structured data vocabulary for forensic authorship examination reports, extending
W3C PROV-O.
Core Classes
| Class | PROV-O Supertype | Description |
wlp:AuthorshipReport | prov:Entity | Forensic authorship examination report |
wlp:EvidencePacket | prov:Entity | Cryptographically signed behavioral evidence bundle |
wlp:DocumentArtifact | prov:Entity | Document under examination (SHA-256 identified) |
wlp:WritingSession | prov:Activity | Contiguous period of writing activity |
wlp:CheckpointChain | prov:Entity | Hash-linked sequence of cryptographic checkpoints |
wlp:ForensicExamination | prov:Activity | Analysis of evidence to produce a report |
wlp:ForensicEngine | prov:SoftwareAgent | Software that performed the examination |
PROV-O Relations Used
| Relation | Domain / Range | Usage |
prov:wasGeneratedBy | AuthorshipReport / ForensicExamination | Report was produced by the examination |
prov:wasDerivedFrom | AuthorshipReport / EvidencePacket | Report derives from evidence |
prov:wasAssociatedWith | ForensicExamination / ForensicEngine | Examination performed by engine |
prov:used | ForensicExamination / EvidencePacket | Examination consumed evidence |
| Schema | Format | Description |
| evidence-packet.cddl |
CDDL |
CBOR wire format for Evidence Packets (tag 1129336645) and Attestation Results (tag 1129791826). Aligned with IETF RATS. |
8. Version History
| Version | Date | Changes |
| 1.0 |
May 2026 |
Unified namespace at /ns/v1/. Five C2PA custom assertions with
.schema.json definitions. JSON-LD context (wlp: prefix)
covering VC types, forensic report ontology, and all C2PA assertion terms.
CDDL schema for CBOR wire format.
Evidence bundle schema deployed at /schemas/evidence-bundle.schema.json (deprecated format).
|
URN Scheme
| Pattern | Example |
urn:cpop:report:{id} | urn:cpop:report:WAR-A1B2C3D4 |
urn:cpop:examination:{id} | urn:cpop:examination:WAR-A1B2C3D4 |
urn:cpop:engine:{version} | urn:cpop:engine:1.0.5 |
urn:cpop:evidence:sha256:{hash} | urn:cpop:evidence:a3f8... |
urn:cpop:document:sha256:{hash} | urn:cpop:document:a3f8... |