Skip to content

Commit 69965d0

Browse files
Rename PriceSignal to TagSignal (v1.1.0)
The working name PriceSignal collides with pricesignal.co, an active commercial pricing-intelligence product. Renamed the product, package, UI, launchers, assets, examples, and docs to TagSignal. The interop schema key signal.price-evidence.v1 is a stable identifier and is unchanged. No analytical changes. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
1 parent 581993e commit 69965d0

40 files changed

Lines changed: 143 additions & 150 deletions

.github/pull_request_template.md

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,6 @@ Describe the pricing-evidence problem this local change addresses.
44

55
## Boundaries checked
66

7-
- [ ] The PriceSignal label remains local/private and is not published.
87
- [ ] Randomized, historical, and valuation evidence tiers remain separate.
98
- [ ] Historical elasticity remains explicitly associational.
109
- [ ] Pricing scenarios are not presented as market truth or automatic approvals.

AI_ANALYST.md

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
1-
# PriceSignal AI Analyst — run this analysis with any AI, no install needed
1+
# TagSignal AI Analyst — run this analysis with any AI, no install needed
22

3-
> Part of the local PriceSignal working build, a free open-source app that runs this same analysis with a point-and-click interface on your computer. The working name is not cleared for public release; see `docs/name-screen.md`. This file is the no-install alternative: give it to an AI assistant and it becomes the analyst.
3+
> Part of [TagSignal](https://github.com/UlrikErlingsen/pricing-analysis), a free open-source app that runs this same analysis with a point-and-click interface on your computer. This file is the no-install alternative: give it to an AI assistant and it becomes the analyst.
44
55
## How to use this file (2 minutes)
66

@@ -15,7 +15,7 @@
1515

1616
## Instructions for the AI assistant
1717

18-
You are the PriceSignal analyst. Compare one declared candidate price with one declared reference price while preserving the limits of the evidence design. The output is decision support, not an automatic price. Never invent missing prices, costs, quantities, assignment details, market size, or WTP values. Never treat robust standard errors as a cure for confounding. Do not inspect outcomes and then silently revise the candidate, reference, or worthwhile threshold.
18+
You are the TagSignal analyst. Compare one declared candidate price with one declared reference price while preserving the limits of the evidence design. The output is decision support, not an automatic price. Never invent missing prices, costs, quantities, assignment details, market size, or WTP values. Never treat robust standard errors as a cure for confounding. Do not inspect outcomes and then silently revise the candidate, reference, or worthwhile threshold.
1919

2020
### Decision contract (record before touching outcomes)
2121

@@ -24,7 +24,7 @@ You are the PriceSignal analyst. Compare one declared candidate price with one d
2424
3. Reference price and candidate price.
2525
4. Incremental unit cost.
2626
5. Planning multiplier or addressable opportunities.
27-
6. Minimum worthwhile total incremental contribution — **must be above zero**. If it is zero or missing, stop and ask for it: with zero, the reading collapses into a bare significance statement, which PriceSignal refuses to present as a decision.
27+
6. Minimum worthwhile total incremental contribution — **must be above zero**. If it is zero or missing, stop and ask for it: with zero, the reading collapses into a bare significance statement, which TagSignal refuses to present as a decision.
2828
7. Currency and planning horizon.
2929
8. Whether randomization is genuinely confirmed, or whether WTP came from an incentive-compatible protocol.
3030

CHANGELOG.md

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,9 @@
11
# Changelog
22

3+
## 1.1.0 — 2026-07-17
4+
5+
- Renamed from PriceSignal to TagSignal after the working name was found to collide with an active commercial pricing-intelligence product. No analytical changes.
6+
37
## 1.0.1 — 2026-07-16
48

59
### Security

CITATION.cff

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,12 @@
11
cff-version: 1.2.0
2-
message: "If you use PriceSignal, please cite the software and the primary method source appropriate to your evidence route."
3-
title: "PriceSignal: open pricing evidence and decision support"
2+
message: "If you use TagSignal, please cite the software and the primary method source appropriate to your evidence route."
3+
title: "TagSignal: open pricing evidence and decision support"
44
type: software
55
authors:
66
- family-names: Erlingsen
77
given-names: Ulrik
8-
version: 1.0.1
9-
date-released: 2026-07-16
8+
version: 1.1.0
9+
date-released: 2026-07-17
1010
license: AGPL-3.0-or-later
1111
keywords:
1212
- pricing analytics

CONTRIBUTING.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
# Contributing
22

3-
Thank you for improving PriceSignal.
3+
Thank you for improving TagSignal.
44

55
1. Open an issue describing the pricing decision, evidence route, and proposed behavior.
66
2. Keep the interface decision-first and the evidence tier visible.

Dockerfile

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,8 @@ WORKDIR /app
99
COPY requirements.txt .
1010
RUN pip install --no-cache-dir -r requirements.txt
1111
COPY . .
12-
RUN useradd --create-home --uid 10001 pricesignal
13-
USER pricesignal
12+
RUN useradd --create-home --uid 10001 tagsignal
13+
USER tagsignal
1414

1515
EXPOSE 8588
1616
HEALTHCHECK --interval=30s --timeout=5s --start-period=20s --retries=3 CMD python -c "import urllib.request; urllib.request.urlopen('http://localhost:8588/_stcore/health')"

PRIVACY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
# Privacy
22

3-
PriceSignal is local-first. It has no built-in account system, telemetry SDK, advertising, remote database, external AI call, or required API connection. Data entered in the browser is processed by the local Streamlit process and remains in that process unless the user downloads or otherwise moves it.
3+
TagSignal is local-first. It has no built-in account system, telemetry SDK, advertising, remote database, external AI call, or required API connection. Data entered in the browser is processed by the local Streamlit process and remains in that process unless the user downloads or otherwise moves it.
44

55
Pricing data may contain customer, respondent, transaction, market, channel, product, or commercially sensitive information. Remove direct identifiers, contact data, free text, unnecessary protected characteristics, and columns not needed for the declared analysis before upload.
66

77
The evidence pack excludes row-level records, IDs, outcomes, fitted values, and residuals. Aggregate price response, valuation, volume, margin, and source fingerprints can still be confidential.
88

9-
If someone hosts PriceSignal, that operator becomes responsible for transport security, authentication, server logs, backups, access control, retention, incident response, and applicable privacy obligations. Local-first defaults do not automatically make a hosted deployment private.
9+
If someone hosts TagSignal, that operator becomes responsible for transport security, authentication, server logs, backups, access control, retention, incident response, and applicable privacy obligations. Local-first defaults do not automatically make a hosted deployment private.
1010

README.md

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1,45 +1,45 @@
11
<p align="center">
2-
<img src="assets/pricesignal-banner.svg" alt="PriceSignal — what price range is supported, and how does profit move?" width="100%">
2+
<img src="assets/tagsignal-banner.svg" alt="TagSignal — what price range is supported, and how does profit move?" width="100%">
33
</p>
44

55
<p align="center">
6-
<img alt="Status: local working title" src="https://img.shields.io/badge/Status-local%20working%20title-F2C66D">
6+
<a href="https://github.com/UlrikErlingsen/pricing-analysis/actions/workflows/tests.yml"><img alt="Tests" src="https://github.com/UlrikErlingsen/pricing-analysis/actions/workflows/tests.yml/badge.svg"></a>
77
<img alt="Python 3.10+" src="https://img.shields.io/badge/Python-3.10%2B-173C3A?logo=python&logoColor=white">
88
<img alt="Streamlit" src="https://img.shields.io/badge/Streamlit-app-D95B40?logo=streamlit&logoColor=white">
99
<a href="LICENSE"><img alt="License: AGPL-3.0-or-later" src="https://img.shields.io/badge/License-AGPL--3.0--or--later-36534E"></a>
1010
</p>
1111

1212
<p align="center"><strong>Open pricing evidence — bound the price range, preserve uncertainty, and keep the evidence tier beside the economics.</strong></p>
1313

14-
> **Working-name status — local/private only:** an exact active **PriceSignal** product operates in competitor-price tracking, the same commercial neighborhood as this tool. This build is not cleared for public release and must be renamed before it is published, hosted, packaged, or promoted. See the dated [name screen](docs/name-screen.md).
14+
> **Working-name status:** a basic screen on 17 July 2026 found no obvious exact active software product called “TagSignal.” That is encouraging, but it is not trademark clearance. Keep the label provisional until official registers, company names, domains, package registries, app stores, and relevant jurisdictions have been professionally checked. See [the name screen](docs/name-screen.md).
1515
16-
**PriceSignal** helps analysts, product teams, and marketers compare a declared candidate price with a reference price. It accepts one of three evidence routes—an assigned-price experiment, a historical price–quantity series, or respondent-level willingness to pay—and keeps their interpretations separate. Every route feeds the same transparent economic layer: projected volume multiplied by declared unit margin.
16+
**TagSignal** helps analysts, product teams, and marketers compare a declared candidate price with a reference price. It accepts one of three evidence routes—an assigned-price experiment, a historical price–quantity series, or respondent-level willingness to pay—and keeps their interpretations separate. Every route feeds the same transparent economic layer: projected volume multiplied by declared unit margin.
1717

1818
Everything runs locally with open-source Python packages. There is no account, telemetry, external AI call, remote database, or built-in persistence.
1919

2020
## Read this first
2121

22-
> **PriceSignal bounds a pricing scenario; it does not turn a model into market truth.** Historical coefficients can be confounded, randomized tests support their tested prices and implementation, and WTP is not realized demand. Unit cost, addressable demand, competition, capacity, fairness, and execution still require accountable human judgment.
22+
> **TagSignal bounds a pricing scenario; it does not turn a model into market truth.** Historical coefficients can be confounded, randomized tests support their tested prices and implementation, and WTP is not realized demand. Unit cost, addressable demand, competition, capacity, fairness, and execution still require accountable human judgment.
2323
24-
PriceSignal does not select a price because a p-value crossed a threshold. Before analysis, the contract records a reference price, candidate price, unit cost, planning scale, and a minimum worthwhile incremental contribution that must be above zero — with a zero threshold, the reading would collapse into a bare significance statement, which PriceSignal refuses to present as a decision. The resulting interval is compared with that business threshold.
24+
TagSignal does not select a price because a p-value crossed a threshold. Before analysis, the contract records a reference price, candidate price, unit cost, planning scale, and a minimum worthwhile incremental contribution that must be above zero — with a zero threshold, the reading would collapse into a bare significance statement, which TagSignal refuses to present as a decision. The resulting interval is compared with that business threshold.
2525

2626
## Supported evidence routes
2727

2828
### Randomized assigned-price test
2929

30-
Use one row per assigned unit with a positive assigned price and a non-negative purchase or quantity outcome. PriceSignal summarizes each arm, fits a power curve to arm means, and uses a stratified within-arm bootstrap for uncertainty. Binary purchase outcomes are supported.
30+
Use one row per assigned unit with a positive assigned price and a non-negative purchase or quantity outcome. TagSignal summarizes each arm, fits a power curve to arm means, and uses a stratified within-arm bootstrap for uncertainty. Binary purchase outcomes are supported.
3131

3232
A causal reading still requires a valid assignment process, assignment before outcome, acceptable outcome observation, faithful price delivery, limited interference, and a population matching the intended decision. The smooth curve between assigned prices is a functional-form assumption.
3333

3434
### Historical price–quantity series
3535

36-
Use one row per period with positive price and quantity plus optional numeric controls. PriceSignal fits a log–log model and reports the price coefficient as a constant-elasticity association. Newey–West HAC or HC3 covariance is available; a smearing factor retransforms log predictions.
36+
Use one row per period with positive price and quantity plus optional numeric controls. TagSignal fits a log–log model and reports the price coefficient as a constant-elasticity association. Newey–West HAC or HC3 covariance is available; a smearing factor retransforms log predictions.
3737

3838
Neither robust covariance estimator solves endogenous pricing, omitted promotions, seasonality, competitor action, stock-outs, distribution changes, or simultaneous demand shocks. This route is always labeled **ASSOCIATION ONLY**.
3939

4040
### Respondent-level willingness to pay
4141

42-
Use one row per respondent with a positive maximum WTP. At each price, PriceSignal calculates the empirical share with WTP at or above that price and bootstraps respondents.
42+
Use one row per respondent with a positive maximum WTP. At each price, TagSignal calculates the empirical share with WTP at or above that price and bootstraps respondents.
4343

4444
Stated WTP is labeled **STATED VALUATION**. An appropriately implemented BDM or auction protocol may be labeled **INCENTIVE-COMPATIBLE VALUATION**, but even that is not a complete market-demand estimate.
4545

@@ -122,13 +122,13 @@ python -m pip install -r requirements.txt
122122
python -m streamlit run app.py
123123
```
124124

125-
The macOS launcher prefers local port `8588` and falls back to a free port between 8501 and 8599; it accepts the `PRICESIGNAL_PORT`, `PRICESIGNAL_MAX_UPLOAD_MB`, and `PRICESIGNAL_NO_BROWSER` environment variables. The Windows launcher always uses port `8588`. Setting `PRICESIGNAL_DEBUG=1` shows technical error details inside the app on any platform.
125+
The macOS launcher prefers local port `8588` and falls back to a free port between 8501 and 8599; it accepts the `TAGSIGNAL_PORT`, `TAGSIGNAL_MAX_UPLOAD_MB`, and `TAGSIGNAL_NO_BROWSER` environment variables. The Windows launcher always uses port `8588`. Setting `TAGSIGNAL_DEBUG=1` shows technical error details inside the app on any platform.
126126

127127
### Docker
128128

129129
```bash
130-
docker build -t pricesignal .
131-
docker run --rm -p 8588:8588 pricesignal
130+
docker build -t tagsignal .
131+
docker run --rm -p 8588:8588 tagsignal
132132
```
133133

134134
## No install? Give this file to an AI
@@ -149,13 +149,13 @@ Fixtures cover known elasticity recovery, randomized arm behavior, empirical WTP
149149
## Relationship to the Signal suite
150150

151151
- **[WorthSignal](https://github.com/UlrikErlingsen/customer-value-analytics)** supplies customer and contribution economics that can improve pricing scenarios.
152-
- **[SegmentSignal](https://github.com/UlrikErlingsen/customer-segmentation)** can reveal stable groups for separately designed pricing studies; PriceSignal does not search for exploitable personal prices.
153-
- **[ChoiceSignal](https://github.com/UlrikErlingsen/conjoint-analysis)** estimates attribute utilities. WTP conversion remains outside its first release; PriceSignal accepts direct valuation or price-response evidence instead of silently converting weak price coefficients.
154-
- **[ExperimentSignal](https://github.com/UlrikErlingsen/experiment-analysis)** is the general randomized-experiment engine. PriceSignal adds pricing-specific demand and contribution logic while retaining strict randomization caveats.
152+
- **[SegmentSignal](https://github.com/UlrikErlingsen/customer-segmentation)** can reveal stable groups for separately designed pricing studies; TagSignal does not search for exploitable personal prices.
153+
- **[ChoiceSignal](https://github.com/UlrikErlingsen/conjoint-analysis)** estimates attribute utilities. WTP conversion remains outside its first release; TagSignal accepts direct valuation or price-response evidence instead of silently converting weak price coefficients.
154+
- **[ExperimentSignal](https://github.com/UlrikErlingsen/experiment-analysis)** is the general randomized-experiment engine. TagSignal adds pricing-specific demand and contribution logic while retaining strict randomization caveats.
155155
- **[AllocSignal](https://github.com/UlrikErlingsen/marketing-mix-allocation)** allocates marketing budgets, not product prices.
156-
- **[GateSignal](https://github.com/UlrikErlingsen/launch-decision-gate)** can consume the aggregate PriceSignal bridge as one bounded launch input.
156+
- **[GateSignal](https://github.com/UlrikErlingsen/launch-decision-gate)** can consume the aggregate TagSignal bridge as one bounded launch input.
157157

158-
The maintained public suite is listed at [ulrikerlingsen.com](https://ulrikerlingsen.com). This working build is deliberately excluded until it has a cleared replacement name.
158+
TagSignal shares the suite’s local-first, named-method, fictional-demo, portable-evidence, and explicit-boundary standard. The portfolio overview is at [ulrikerlingsen.com](https://ulrikerlingsen.com).
159159

160160
## Method references
161161

@@ -169,6 +169,6 @@ The maintained public suite is listed at [ulrikerlingsen.com](https://ulrikerlin
169169

170170
## Originality and license
171171

172-
PriceSignal is an independent implementation based on public pricing, experimental, econometric, and valuation literature. It does not reproduce lecture slides, classroom cases, assessment material, teaching diagrams, proprietary pricing templates, or institution-specific wording. All bundled examples and interface copy were created for this project. See [sources and originality](docs/sources-and-originality.md).
172+
TagSignal is an independent implementation based on public pricing, experimental, econometric, and valuation literature. It does not reproduce lecture slides, classroom cases, assessment material, teaching diagrams, proprietary pricing templates, or institution-specific wording. All bundled examples and interface copy were created for this project. See [sources and originality](docs/sources-and-originality.md).
173173

174174
The software and documentation are free under **AGPL-3.0-or-later**. This application was developed with AI coding assistance and checked through source review, analytical fixtures, deterministic synthetic recovery, automated app tests, and visual inspection. Verify material pricing decisions independently; no warranty is provided.

SECURITY.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,6 @@ Please report a suspected vulnerability privately through GitHub's security-advi
1010

1111
## Data-handling notes
1212

13-
PriceSignal accepts CSV, XLSX, and JSON tables up to 50 MB and applies row and column limits. It does not execute workbook macros. Exported strings that could be interpreted as spreadsheet formulas are neutralized. Aggregate evidence exports omit row-level pricing records.
13+
TagSignal accepts CSV, XLSX, and JSON tables up to 50 MB and applies row and column limits. It does not execute workbook macros. Exported strings that could be interpreted as spreadsheet formulas are neutralized. Aggregate evidence exports omit row-level pricing records.
1414

15-
These controls do not turn PriceSignal into a hardened multi-tenant service. A hosted deployment should add authentication, TLS, authorization, rate limiting, secure headers, isolated storage, dependency monitoring, logging appropriate to the data classification, and a documented deletion policy.
15+
These controls do not turn TagSignal into a hardened multi-tenant service. A hosted deployment should add authentication, TLS, authorization, rate limiting, secure headers, isolated storage, dependency monitoring, logging appropriate to the data classification, and a documented deletion policy.

0 commit comments

Comments
 (0)