WEBVTT

1
00:00:00.110 --> 00:00:01.920
A lab has a device message that

2
00:00:01.920 --> 00:00:05.370
the application does not yet understand.

3
00:00:05.370 --> 00:00:07.825
The first step is a small, testable

4
00:00:07.825 --> 00:00:09.480
extension.

5
00:00:09.480 --> 00:00:11.395
In this walkthrough we use a fictional

6
00:00:11.395 --> 00:00:14.580
Acme device, the public author kit, and

7
00:00:14.580 --> 00:00:17.000
the existing plugin skill.

8
00:00:17.110 --> 00:00:19.605
This is an engineering example, not a

9
00:00:19.605 --> 00:00:22.090
hardware certification.

10
00:00:22.090 --> 00:00:25.070
The Acme protocol is fictional.

11
00:00:25.070 --> 00:00:27.865
Passing these tests proves the declared software

12
00:00:27.865 --> 00:00:30.450
contract for these inputs.

13
00:00:30.450 --> 00:00:33.435
It does not establish clinical suitability,

14
00:00:33.435 --> 00:00:36.170
delivery to a physical device, or safe

15
00:00:36.170 --> 00:00:38.265
treatment decisions.

16
00:00:38.375 --> 00:00:40.635
Start on the developer guide and download

17
00:00:40.635 --> 00:00:42.905
the complete author kit.

18
00:00:42.905 --> 00:00:46.315
It contains exact local SDK packages, a

19
00:00:46.315 --> 00:00:49.775
lockfile, the worked Acme example, and the

20
00:00:49.775 --> 00:00:51.645
plugin skill.

21
00:00:51.645 --> 00:00:53.185
You do not need access to the

22
00:00:53.185 --> 00:00:56.330
private implementation repository to follow this

23
00:00:56.330 --> 00:00:57.650
path.

24
00:00:57.760 --> 00:00:59.730
Extract the whole folder into a new

25
00:00:59.730 --> 00:01:02.050
development location.

26
00:01:02.050 --> 00:01:03.845
Keep it separate from a live lab

27
00:01:03.845 --> 00:01:05.570
and its data.

28
00:01:05.570 --> 00:01:07.625
Node twenty two or twenty four and

29
00:01:07.625 --> 00:01:10.330
npm are prerequisites.

30
00:01:10.330 --> 00:01:12.910
Keep the SDK folder beside the package

31
00:01:12.910 --> 00:01:16.450
files so their local references remain valid.

32
00:01:16.560 --> 00:01:18.590
Run node setup dot m j s

33
00:01:18.590 --> 00:01:21.045
from the extracted folder.

34
00:01:21.045 --> 00:01:23.745
The setup checks the download manifest before

35
00:01:23.745 --> 00:01:26.425
installing dependencies with lifecycle scripts

36
00:01:26.425 --> 00:01:28.045
disabled.

37
00:01:28.045 --> 00:01:30.805
First party SDK packages come from the

38
00:01:30.805 --> 00:01:33.765
included archives; pinned public third party

39
00:01:33.765 --> 00:01:37.290
dependencies come from the npm registry.

40
00:01:37.400 --> 00:01:40.820
Now run the verification command shown.

41
00:01:40.820 --> 00:01:43.160
This is actual output from the extracted

42
00:01:43.160 --> 00:01:44.485
kit.

43
00:01:44.485 --> 00:01:46.555
The same literal samples are checked through

44
00:01:46.555 --> 00:01:49.525
the mapping and plugin paths, with independent

45
00:01:49.525 --> 00:01:51.585
expectations.

46
00:01:51.585 --> 00:01:54.265
Keep this baseline passing before changing the

47
00:01:54.265 --> 00:01:56.920
example for a real protocol.

48
00:01:57.030 --> 00:02:00.580
Open the sample messages beside the cases.

49
00:02:00.580 --> 00:02:03.060
A blood pressure message produces two new

50
00:02:03.060 --> 00:02:04.615
readings.

51
00:02:04.615 --> 00:02:07.590
Heart rate is a display broadcast.

52
00:02:07.590 --> 00:02:10.095
Battery is a device event.

53
00:02:10.095 --> 00:02:12.840
These are different message kinds, so do

54
00:02:12.840 --> 00:02:16.380
not flatten them into one generic observation.

55
00:02:16.490 --> 00:02:19.985
The example also checks repeated readings.

56
00:02:19.985 --> 00:02:22.240
Two equal numeric values can still be

57
00:02:22.240 --> 00:02:24.785
two legitimate measurements, with different

58
00:02:24.785 --> 00:02:26.900
reading identities.

59
00:02:26.900 --> 00:02:30.270
Preserve the supplied timestamp and scope.

60
00:02:30.270 --> 00:02:32.880
A classifier or language model should not

61
00:02:32.880 --> 00:02:35.480
invent those facts when the protocol supplies

62
00:02:35.480 --> 00:02:36.650
them.

63
00:02:36.760 --> 00:02:38.935
Read the data only mapping before writing

64
00:02:38.935 --> 00:02:40.300
code.

65
00:02:40.300 --> 00:02:42.990
It makes field names, units and message

66
00:02:42.990 --> 00:02:45.055
kinds explicit.

67
00:02:45.055 --> 00:02:48.270
If that mapping expresses the actual protocol,

68
00:02:48.270 --> 00:02:50.710
keep the simpler solution.

69
00:02:50.710 --> 00:02:52.515
A code plugin is useful when the

70
00:02:52.515 --> 00:02:55.025
behavior needs a contract the mapping cannot

71
00:02:55.025 --> 00:02:56.565
represent.

72
00:02:56.675 --> 00:02:58.960
The plugin declares the services it needs

73
00:02:58.960 --> 00:03:01.290
and registers its codec and device type

74
00:03:01.290 --> 00:03:03.755
through the public context.

75
00:03:03.755 --> 00:03:05.810
It does not reach into another plugin's

76
00:03:05.810 --> 00:03:08.465
source or private database, and it does

77
00:03:08.465 --> 00:03:12.250
not secretly open a second transport connection.

78
00:03:12.360 --> 00:03:14.650
Registrations belong to the contributor's

79
00:03:14.650 --> 00:03:16.315
lifetime.

80
00:03:16.315 --> 00:03:18.765
When configuration changes or a plugin is

81
00:03:18.765 --> 00:03:22.060
replaced, old listeners and registrations must

82
00:03:22.060 --> 00:03:23.600
retire.

83
00:03:23.600 --> 00:03:25.860
An awaited operation must confirm that its

84
00:03:25.860 --> 00:03:28.090
owner is still current before publishing a

85
00:03:28.090 --> 00:03:29.575
result.

86
00:03:29.575 --> 00:03:32.240
This matters during a running lab.

87
00:03:32.350 --> 00:03:35.390
Run the kit's type check and tests.

88
00:03:35.390 --> 00:03:37.870
These are actual successful results from this

89
00:03:37.870 --> 00:03:39.985
isolated copy.

90
00:03:39.985 --> 00:03:42.845
The tests include configuration and replacement

91
00:03:42.845 --> 00:03:46.390
behavior, not only a happy path.

92
00:03:46.390 --> 00:03:49.025
They are evidence for the tested contract,

93
00:03:49.025 --> 00:03:50.940
rather than a claim that every browser

94
00:03:50.940 --> 00:03:54.035
or operating system was exercised.

95
00:03:54.145 --> 00:03:56.130
Give your coding agent the included i

96
00:03:56.130 --> 00:03:57.875
two l sim plugin skill and the

97
00:03:57.875 --> 00:04:00.690
public contract references.

98
00:04:00.690 --> 00:04:02.725
The public product name is Open Health

99
00:04:02.725 --> 00:04:05.755
Sim; the existing package and command names

100
00:04:05.755 --> 00:04:07.925
remain unchanged.

101
00:04:07.925 --> 00:04:11.105
Let the skill guide implementation, verification

102
00:04:11.105 --> 00:04:14.360
and an isolated development installation.

103
00:04:14.470 --> 00:04:17.050
Make the request concrete.

104
00:04:17.050 --> 00:04:20.440
Supply the literal protocol samples, expected

105
00:04:20.440 --> 00:04:23.780
message kinds and units, malformed examples, and

106
00:04:23.780 --> 00:04:26.745
the behavior required on unload.

107
00:04:26.745 --> 00:04:29.030
Ask the agent to preserve the baseline

108
00:04:29.030 --> 00:04:31.640
tests and report any untested hardware or

109
00:04:31.640 --> 00:04:33.745
host integration.

110
00:04:33.745 --> 00:04:35.810
Avoid a request that only says make

111
00:04:35.810 --> 00:04:37.185
it work.

112
00:04:37.295 --> 00:04:39.875
For a new extension, run the scaffold

113
00:04:39.875 --> 00:04:41.870
command shown with a new folder name

114
00:04:41.870 --> 00:04:44.275
and the appropriate kind.

115
00:04:44.275 --> 00:04:46.915
This creates an interface starting point inside

116
00:04:46.915 --> 00:04:49.445
the extracted kit, where it can resolve

117
00:04:49.445 --> 00:04:52.595
the exact SDK dependencies already installed in

118
00:04:52.595 --> 00:04:54.435
the parent folder.

119
00:04:54.545 --> 00:04:57.270
The generated greeting is a starting point,

120
00:04:57.270 --> 00:05:00.295
not the finished device integration.

121
00:05:00.295 --> 00:05:03.790
Keep the manifest, configuration schema,

122
00:05:03.790 --> 00:05:06.695
lifecycle test and minimal contract host while

123
00:05:06.695 --> 00:05:09.255
implementing the real feature.

124
00:05:09.255 --> 00:05:11.355
Do not replace those boundaries with a

125
00:05:11.355 --> 00:05:13.835
hidden kernel patch or an unreviewed network

126
00:05:13.835 --> 00:05:15.115
call.

127
00:05:15.225 --> 00:05:17.530
Run the generated project's type check and

128
00:05:17.530 --> 00:05:19.915
test from its own folder.

129
00:05:19.915 --> 00:05:21.800
There is no separate install in this

130
00:05:21.800 --> 00:05:26.050
example: the parent kit supplies the SDK.

131
00:05:26.050 --> 00:05:28.440
If you later move the project, bind

132
00:05:28.440 --> 00:05:30.890
its dependencies to the correct distribution

133
00:05:30.890 --> 00:05:33.550
rather than assuming unpublished packages exist

134
00:05:33.550 --> 00:05:35.270
on a registry.

135
00:05:35.380 --> 00:05:37.630
Inspect the package before installing it

136
00:05:37.630 --> 00:05:39.100
anywhere.

137
00:05:39.100 --> 00:05:42.095
Read the requested services and permissions, and

138
00:05:42.095 --> 00:05:44.285
check that its entry points and license

139
00:05:44.285 --> 00:05:47.175
match the code you intend to ship.

140
00:05:47.175 --> 00:05:50.090
A coding agent can explain this report,

141
00:05:50.090 --> 00:05:52.170
but it should not silently approve new

142
00:05:52.170 --> 00:05:54.280
privileges for a lab.

143
00:05:54.390 --> 00:05:56.165
Use the dry run to inspect what

144
00:05:56.165 --> 00:05:58.560
the archive would contain.

145
00:05:58.560 --> 00:06:01.855
Development data, recordings and secrets do not

146
00:06:01.855 --> 00:06:04.445
belong in a plugin package.

147
00:06:04.445 --> 00:06:07.750
The actual package needs the implementation, its

148
00:06:07.750 --> 00:06:10.880
manifest and required attribution.

149
00:06:10.880 --> 00:06:13.645
Review that artifact, not only the source

150
00:06:13.645 --> 00:06:15.735
folder you worked in.

151
00:06:15.845 --> 00:06:17.675
A real development host check is a

152
00:06:17.675 --> 00:06:19.745
separate step when the feature relies on

153
00:06:19.745 --> 00:06:21.545
that boundary.

154
00:06:21.545 --> 00:06:23.955
Use an owned development profile and data

155
00:06:23.955 --> 00:06:27.850
directory, verify behavior and cleanup, and stop

156
00:06:27.850 --> 00:06:29.820
only that host.

157
00:06:29.820 --> 00:06:32.730
This video has shown SDK checks; it

158
00:06:32.730 --> 00:06:34.810
has not installed this scaffold into the

159
00:06:34.810 --> 00:06:36.890
demonstration lab.

160
00:06:37.000 --> 00:06:40.035
For a lab installation, review requirements and

161
00:06:40.035 --> 00:06:42.405
permissions through the ordinary administrator

162
00:06:42.405 --> 00:06:44.020
workflow.

163
00:06:44.020 --> 00:06:47.100
Installation, configuration and activation are

164
00:06:47.100 --> 00:06:49.465
deliberate operations.

165
00:06:49.465 --> 00:06:51.570
A passing test suite or a generated

166
00:06:51.570 --> 00:06:54.465
archive does not bypass that approval, and

167
00:06:54.465 --> 00:06:56.490
a local example does not imply a

168
00:06:56.490 --> 00:06:59.350
public hosted store is deployed.

169
00:06:59.460 --> 00:07:02.245
You now have a reproducible example, an

170
00:07:02.245 --> 00:07:04.900
isolated scaffold and concrete engineering

171
00:07:04.900 --> 00:07:06.450
evidence.

172
00:07:06.450 --> 00:07:08.430
Continue with the written plugin guide and

173
00:07:08.430 --> 00:07:11.700
the included skill, adapt one small contract

174
00:07:11.700 --> 00:07:13.965
at a time, and keep the untested

175
00:07:13.965 --> 00:07:16.400
boundaries visible when you hand the extension

176
00:07:16.400 --> 00:07:17.865
to a lab.
