Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
8131d6cef3 | ||
|
|
4bfca4fe24 | ||
|
|
21239cf3cc | ||
|
|
75857a2036 | ||
|
|
9a9307af89 | ||
|
|
ff66e8dc5c | ||
|
|
a862a07ae1 | ||
|
|
4d63c1bea4 |
@@ -334,11 +334,10 @@ func (r *ContinuityRepository) ApplyHumanResponse(ctx context.Context, response
|
||||
if tag.RowsAffected() != 1 {
|
||||
return ErrProspectiveStateConflict
|
||||
}
|
||||
if response.TargetAttentionID == "" {
|
||||
return ErrAttentionNotFound
|
||||
}
|
||||
if err = markAttentionResponded(ctx, tx, response, continuity.AttentionResolved); err != nil {
|
||||
return err
|
||||
if response.TargetAttentionID != "" {
|
||||
if err = markAttentionResponded(ctx, tx, response, continuity.AttentionResolved); err != nil {
|
||||
return err
|
||||
}
|
||||
}
|
||||
case continuity.ResponseSnooze:
|
||||
tag, err := tx.Exec(ctx, `UPDATE continuity.prospective_items SET state=$1, trigger_at_unix_millis=$2, revision=revision+1
|
||||
|
||||
@@ -2,6 +2,7 @@ package main
|
||||
|
||||
import (
|
||||
"context"
|
||||
"log"
|
||||
"strings"
|
||||
"time"
|
||||
|
||||
@@ -85,7 +86,12 @@ func (r learningRecorder) recordReminderResponse(ctx context.Context, input remi
|
||||
RecordedAtUnixMillis: input.At.UnixMilli(),
|
||||
}
|
||||
expectation, err := epistemicsdomain.NewSystemExpectation(expectation)
|
||||
if err != nil || r.epistemics.SaveSystemExpectation(ctx, expectation) != nil {
|
||||
if err != nil {
|
||||
log.Printf("learning reminder expectation invalid: %v", err)
|
||||
return
|
||||
}
|
||||
if err := r.epistemics.SaveSystemExpectation(ctx, expectation); err != nil {
|
||||
log.Printf("learning reminder expectation unavailable: %v", err)
|
||||
return
|
||||
}
|
||||
actual, confidence := outcomeForHumanResponse(input.Result.Response)
|
||||
@@ -197,13 +203,19 @@ func (r learningRecorder) recordCapabilityUse(ctx context.Context, input capabil
|
||||
func (r learningRecorder) saveExperienceAndReflection(ctx context.Context, value epistemics.ExperienceRecord) (epistemics.ExperienceRecord, bool) {
|
||||
value, err := epistemicsdomain.NewExperienceRecord(value)
|
||||
if err != nil {
|
||||
log.Printf("learning experience invalid: %v", err)
|
||||
return epistemics.ExperienceRecord{}, false
|
||||
}
|
||||
if err := r.epistemics.SaveExperienceRecord(ctx, value); err != nil {
|
||||
log.Printf("learning experience unavailable: %v", err)
|
||||
return epistemics.ExperienceRecord{}, false
|
||||
}
|
||||
if candidate, ok, err := epistemicsdomain.ReflectionForExperience(value); err == nil && ok {
|
||||
_ = r.epistemics.SaveReflectionCandidate(ctx, candidate)
|
||||
if err := r.epistemics.SaveReflectionCandidate(ctx, candidate); err != nil {
|
||||
log.Printf("learning reflection unavailable: %v", err)
|
||||
}
|
||||
} else if err != nil {
|
||||
log.Printf("learning reflection invalid: %v", err)
|
||||
}
|
||||
return value, true
|
||||
}
|
||||
@@ -214,6 +226,7 @@ func (r learningRecorder) updateReminderSkill(ctx context.Context, experience ep
|
||||
}
|
||||
profile, err := r.capability.LoadSkillProfile(ctx, reminderResponseSkillID)
|
||||
if err != nil {
|
||||
log.Printf("learning skill profile unavailable: %v", err)
|
||||
return
|
||||
}
|
||||
next, err := capabilitydomain.ObserveSkillOutcome(profile, capability.SkillOutcomeObservation{
|
||||
@@ -223,9 +236,11 @@ func (r learningRecorder) updateReminderSkill(ctx context.Context, experience ep
|
||||
ObservedAtUnixMillis: experience.RecordedAtUnixMillis,
|
||||
})
|
||||
if err != nil {
|
||||
log.Printf("learning skill observation invalid: %v", err)
|
||||
return
|
||||
}
|
||||
if err := r.capability.SaveSkillProfile(ctx, next); err != nil {
|
||||
log.Printf("learning skill profile save unavailable: %v", err)
|
||||
return
|
||||
}
|
||||
}
|
||||
|
||||
@@ -50,16 +50,16 @@ Audit date: 2026-08-17. Active implementation: DEV-000067 revision 1.
|
||||
- `LAST_COMPLETED = Runtime Experience + Reflection Loop V1: production runtime now records meaningful ExperienceRecords, deterministic ReflectionCandidates and SkillProfile evidence from /chat, reminder response, correction, capability and fast-path-decline outcomes`
|
||||
- `RUNTIME_EXPERIENCE_LOOP = ACTIVE for production interactions; no LearningManager and no automatic self-modification`
|
||||
- `REFLECTION_STATUS = deterministic candidate generation only; candidates cannot mutate skills, Authority, source code, deployment or canonical lifecycle`
|
||||
- `SKILL_EVIDENCE_STATUS = skill-obvious-reminder-response-v1 accumulates positive/correction/failure evidence from COMPLETE/SNOOZE/CANCEL target-resolution outcomes`
|
||||
- `SKILL_EVIDENCE_STATUS = skill-obvious-reminder-response-v1 accumulates evidence from target-resolution outcomes; current production SkillProfile status is SUSPENDED after repeated ambiguous/unsupported acceptance probes, demonstrating deterministic degradation without deletion`
|
||||
- `FAST_PATH_STATUS = uncertain/unsupported continuation can decline and return to clarification/fallback instead of guessed mutation`
|
||||
- `OPERATOR_INSPECTION = Creator Console exposes recent ExperienceRecords, ReflectionCandidates and SkillProfile status through authenticated proxy`
|
||||
- `HUMAN_CHAT_URL = https://assistant.cin.su/chat`
|
||||
- `ACTIVE_COGNITIVE_BINDINGS = none; CPU CANARY unchanged`
|
||||
- `OPENAI_REAL_CREDENTIAL = not required / not activated`
|
||||
- `TESTS_PASS = go test ./...; go vet ./...; go run ./cmd/devctl preflight -active dev/ACTIVE_TASK.json; go run ./cmd/devctl check-architecture; go run ./cmd/devctl check-diff -active dev/ACTIVE_TASK.json; tests/cognitive_advisory/cognitive_worker_env_policy_test.ps1; tests/owner_acl/verify.ps1 -DockerContext docker-prod -PostgresContainer assistant-postgres-1; production artifact confirmation; production health`
|
||||
- `LIVE_ACCEPTANCE = PASS: reminder completion produced positive ExperienceRecord and SkillProfile evidence; explicit correction produced USER_CORRECTED ExperienceRecord and ReflectionCandidate; unsupported/uncertain continuation produced fast-path decline/fallback evidence without guessed mutation; /chat reachable and human-facing replies did not expose learning IDs`
|
||||
- `LIVE_ACCEPTANCE = PASS: reminder completion produced positive ExperienceRecord; explicit correction produced USER_CORRECTED ExperienceRecord and ReflectionCandidate; unsupported/uncertain continuation produced fast-path decline/fallback evidence without guessed mutation; operator learning feed returns ExperienceRecords, ReflectionCandidates and SUSPENDED SkillProfile status; /chat reachable and human-facing replies did not expose learning IDs`
|
||||
- `PRODUCTION_STATUS = healthy`
|
||||
- `PRODUCTION_REVISION = runtime artifact 7fc611ed0898012707fb45841a7a86818144e776`
|
||||
- `PRODUCTION_REVISION = runtime artifact 4bfca4fe24dfebda1f248003e3b9e42a0a9f9dad`
|
||||
- `NEXT_RECOMMENDED_REVISION = DEV-000069 only after separate approval; no next milestone started automatically`
|
||||
|
||||
- `ADR_STATUS = ADR-0014 accepted`
|
||||
|
||||
@@ -25,6 +25,9 @@ func NewSystemExpectation(value epistemics.SystemExpectation) (epistemics.System
|
||||
value.RecordedAtUnixMillis < 1 {
|
||||
return epistemics.SystemExpectation{}, ErrInvalidExpectation
|
||||
}
|
||||
if value.EvidenceBasis == nil {
|
||||
value.EvidenceBasis = []epistemics.EvidenceRef{}
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
@@ -41,6 +44,12 @@ func NewExperienceRecord(value epistemics.ExperienceRecord) (epistemics.Experien
|
||||
value.ConfidenceMillis < 0 || value.ConfidenceMillis > 1000 || value.RecordedAtUnixMillis < 1 {
|
||||
return epistemics.ExperienceRecord{}, ErrInvalidExperience
|
||||
}
|
||||
if value.ContextRefs == nil {
|
||||
value.ContextRefs = []epistemics.ContextRef{}
|
||||
}
|
||||
if value.VerificationEvidence == nil {
|
||||
value.VerificationEvidence = []epistemics.EvidenceRef{}
|
||||
}
|
||||
return value, nil
|
||||
}
|
||||
|
||||
@@ -81,6 +90,9 @@ func ValidateReflectionCandidate(value epistemics.ReflectionCandidate) error {
|
||||
value.RecordedAtUnixMillis < 1 || value.Revision < 1 {
|
||||
return ErrInvalidReflectionCandidate
|
||||
}
|
||||
if value.EvidenceRefs == nil {
|
||||
value.EvidenceRefs = []epistemics.EvidenceRef{}
|
||||
}
|
||||
return nil
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user