release: freeze 2026-10-15 validated release baseline
CI/CD Pipeline / UI Contracts (source-structure gates) (push) Canceled after 0s
CI/CD Pipeline / E2E (live stack) (push) Canceled after 0s
CI/CD Pipeline / Backend Build & Test (push) Canceled after 0s
CI/CD Pipeline / Admin Web Build (push) Canceled after 0s
CI/CD Pipeline / Mini Program Compile Check (push) Canceled after 0s
CI/CD Pipeline / Migration Validation (push) Canceled after 0s
CI/CD Pipeline / Test Shell Guard (Phase 23 Gate) (push) Canceled after 0s

This commit is contained in:
WorkBuddy
2026-10-15 09:47:31 +08:00
parent 827c23db1d
commit 3c2b967274
149 changed files with 4324 additions and 348 deletions
@@ -0,0 +1 @@
# NEGATIVE-INJECTION-1: listener disabled for red proof
@@ -13,6 +13,14 @@ spring:
serialization:
write-dates-as-timestamps: false
# REQUIRES_NEW 拒绝审计(AuditDenyWriter.insertIndependent)经独立 SqlSession 提交后,
# 不会清空外层测试事务 SqlSession 的一级缓存;测试里 before/after 两次同参数 count
# 第二次会命中缓存返回 before 值(旧行为假绿的机制来源)。statement 作用域让每次查询
# 真执行,与生产 PG READ_COMMITTED 的可见性语义一致。
mybatis-plus:
configuration:
local-cache-scope: statement
jwt:
access-token-secret: test-access-secret-for-unit-tests-only
refresh-token-secret: test-refresh-secret-for-unit-tests-only
+37 -1
View File
@@ -2,7 +2,7 @@ DROP ALL OBJECTS;
CREATE TABLE users (
id VARCHAR(36) PRIMARY KEY, wechat_openid VARCHAR(128) NOT NULL UNIQUE,
wechat_unionid VARCHAR(128), phone VARCHAR(32), account_status VARCHAR(32),
wechat_unionid VARCHAR(128), phone VARCHAR(32), display_number VARCHAR(32), account_status VARCHAR(32),
relationship_status VARCHAR(32), recommendation_enabled BOOLEAN,
last_login_at TIMESTAMP WITH TIME ZONE, closed_at TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE,
@@ -544,6 +544,7 @@ CREATE TABLE operators (
phone_hash VARCHAR(128),
username VARCHAR(100) NOT NULL,
password_hash VARCHAR(255) NOT NULL,
display_id VARCHAR(32),
status VARCHAR(32) NOT NULL DEFAULT 'active',
last_login_at TIMESTAMP WITH TIME ZONE,
created_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
@@ -798,3 +799,38 @@ CREATE TABLE feature_flag_overrides (
updated_at TIMESTAMP WITH TIME ZONE NOT NULL DEFAULT NOW(),
CONSTRAINT chk_flag_value_type CHECK (value_type IN ('boolean', 'int', 'string'))
);
-- V060 公开编号读取契约(PostgreSQL 分配器另做并发实测)
CREATE TABLE public_display_id_counters (
prefix VARCHAR(2) NOT NULL, local_date DATE NOT NULL, sequence_group VARCHAR(8) NOT NULL DEFAULT '',
last_sequence INTEGER NOT NULL CHECK(last_sequence BETWEEN 1 AND 999), PRIMARY KEY(prefix,local_date,sequence_group)
);
CREATE TABLE public_display_id_aliases (
entity_type VARCHAR(64) NOT NULL, entity_id VARCHAR(36) NOT NULL, old_display_id VARCHAR(64) NOT NULL,
new_display_id VARCHAR(13), PRIMARY KEY(entity_type,entity_id,old_display_id)
);
ALTER TABLE activities ADD COLUMN IF NOT EXISTS display_id VARCHAR(13);
ALTER TABLE review_tasks ADD COLUMN IF NOT EXISTS display_id VARCHAR(13);
ALTER TABLE reports ADD COLUMN IF NOT EXISTS display_id VARCHAR(13);
ALTER TABLE matchmaker_services ADD COLUMN IF NOT EXISTS display_id VARCHAR(13);
ALTER TABLE matchmaker_recommendations ADD COLUMN IF NOT EXISTS display_id VARCHAR(13);
ALTER TABLE matchmaker_contact_authorizations ADD COLUMN IF NOT EXISTS display_id VARCHAR(13);
ALTER TABLE matchmaker_assignments ADD COLUMN IF NOT EXISTS display_id VARCHAR(13);
ALTER TABLE matchmaker_followups ADD COLUMN IF NOT EXISTS display_id VARCHAR(13);
ALTER TABLE service_appointments ADD COLUMN IF NOT EXISTS display_id VARCHAR(13);
ALTER TABLE service_appointments ADD COLUMN IF NOT EXISTS referral_display_id VARCHAR(13);
ALTER TABLE activity_registrations ADD COLUMN IF NOT EXISTS referral_display_id VARCHAR(13);
ALTER TABLE matchmaker_followups ADD COLUMN IF NOT EXISTS referral_display_id VARCHAR(13);
CREATE VIEW public_display_ids AS
SELECT CAST(id AS VARCHAR) id, display_number display_id, 'users' entity_type, CAST(NULL AS VARCHAR) referral_display_id FROM users
UNION ALL SELECT CAST(id AS VARCHAR), display_id, 'operators', CAST(NULL AS VARCHAR) FROM operators
UNION ALL SELECT CAST(id AS VARCHAR), display_id, 'activities', CAST(NULL AS VARCHAR) FROM activities
UNION ALL SELECT CAST(id AS VARCHAR), display_id, 'review_tasks', CAST(NULL AS VARCHAR) FROM review_tasks
UNION ALL SELECT CAST(id AS VARCHAR), display_id, 'reports', CAST(NULL AS VARCHAR) FROM reports
UNION ALL SELECT CAST(id AS VARCHAR), display_id, 'matchmaker_services', CAST(NULL AS VARCHAR) FROM matchmaker_services
UNION ALL SELECT CAST(id AS VARCHAR), display_id, 'matchmaker_recommendations', CAST(NULL AS VARCHAR) FROM matchmaker_recommendations
UNION ALL SELECT CAST(id AS VARCHAR), display_id, 'matchmaker_contact_authorizations', CAST(NULL AS VARCHAR) FROM matchmaker_contact_authorizations
UNION ALL SELECT CAST(id AS VARCHAR), display_id, 'matchmaker_assignments', CAST(NULL AS VARCHAR) FROM matchmaker_assignments
UNION ALL SELECT CAST(id AS VARCHAR), display_id, 'matchmaker_followups', referral_display_id FROM matchmaker_followups
UNION ALL SELECT CAST(id AS VARCHAR), display_id, 'service_appointments', referral_display_id FROM service_appointments
UNION ALL SELECT CAST(id AS VARCHAR), referral_display_id, 'activity_registrations', referral_display_id FROM activity_registrations WHERE referral_display_id IS NOT NULL;